Imagick::trimImage

(PECL imagick 2, PECL imagick 3)

Imagick::trimImageRemove edges from the image

说明

public Imagick::trimImage ( float $fuzz ) : bool

Remove edges that are the background color from the image. 此方法在Imagick基于ImageMagick 6.2.9以上版本编译时可用。

参数

fuzz

By default target must match a particular pixel color exactly. However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same. This parameter represents the variation on the quantum range.

返回值

成功时返回 true

错误/异常

错误时抛出 ImagickException。

范例

Example #1 Using Imagick::trimImage():

Trim an image, then display to the browser.

<?php
/* Create the object and read the image in */
$im = new Imagick("image.jpg");

/* Trim the image. */
$im->trimImage(0);

/* Ouput the image */
header("Content-Type: image/" $im->getImageFormat());
echo 
$im;
?>

参见

User Contributed Notes

tamucola 20-Sep-2021 04:31
fuzz needs getQuantum
/**
 * @param string $imagePath
 * @param float  $fuzz 0.1=10%
 * @return bool
 * @throws ImagickException
 */
public static function trimImage($imagePath, $fuzz = 0.1)
{
    if (empty($imagePath)) {
        return false;
    }
    $imagePath = realpath($imagePath);
    if (!is_file($imagePath)) {
        return false;
    }
    if (!class_exists('Imagick')) {
        return false;
    }
    $im = new Imagick($imagePath);
    $result = $im->trimImage($fuzz * $im::getQuantum());
    if (!$result) {
        return false;
    }

    return $im->writeImage($imagePath);
}
Kirsty Forrester 08-Feb-2013 11:17
The command for trim can return info which tells you the coordinates of where the image was cropped and the new dimensions of the trimmed image. I couldn't find an example for how to do that with this class, so here's how I did it:

<?php

// Create and trim image
$image = new Imagick('image.png');
$image->trimImage(0.3);

/**
* Imagick:: getImagePage() gives us an array with the width, height, x and y coordinates of the trimmed image
* However, the width and height are of the original image
*/
$imagePage = $image->getImagePage();
list(
$x, $y) = array($imagePage['x'], $imagePage['y']);

// So we need to reset the image page to get the right height and width of the trimmed image
$image->setImagePage(0, 0, 0, 0);
list(
$width, $height) = array($image->width, $image->height);

?>

This will leave you with two variables for the width and height of the trimmed image, plus two variables for the x-coordinate and y-coordinate of the trimmed area relative to the original image.

This information is useful when the image you're trimming is the difference between two images (e.g. from Imagick::compareImages(), and you want to crop the original image to the same size and position as the difference.
dhp 23-Apr-2009 04:31
After operations that change the crop of the image, like trimImage does, IM preserves the old canvas and positioning info. If you need to do additional operations on the image based on the new size, you'll need to reset this info with setImagePage. This is the equivalent of the +repage command line argument.

<?php
$im
->trimImage(0);
$im->setImagePage(0, 0, 0, 0);
?>
Mark van der Velden 06-Dec-2007 01:35
This method requires ImageMagick version >= 6.2.8
PHP8中文手册 站长在线 整理 版权归PHP文档组所有