ImageMagick使用偏移量修剪空白

时间:2016-04-12 18:14:03

标签: php image-processing imagemagick

我使用ImageMagick从我的图片中修剪空白。一切都很好,成功修剪。但现在我想留下大约30px的偏移并从图像中删除额外的空白。我的意思是说我目前的结果是

enter image description here

现在您可以看到上面的图像被完全修剪但我想要一些像

这样的偏移

enter image description here

我想在每一侧留下30px并修剪剩余的空白。我正在使用以下代码填充Fuzz

$image = new Imagick('capfile.jpg');                                        
$image->trimImage(25000);

我不想添加边框或裁剪。我只想修剪30px的偏移到主图像本身,因为我的许多图像也有一些使用Fuzz修剪的浅色背景颜色,因此添加边框不是一种选择。

2 个答案:

答案 0 :(得分:2)

您可以在命令行中将ImageMagick 修剪的剪裁框修改为:

convert -fuzz 10% -format %@ cap.jpg info:
259x171+19+21

然后您可以根据需要修改宽度/高度和偏移量,然后再使用修改后的数字进行裁剪 - 即从x和y偏移量中减去30并在宽度和高度上加60.

由emcconville编辑

  

我怎么能在php中做到这一点?

这是一个PHP替代方案......

$img = new Imagick('/tmp/Zpuq9.jpg');
// Get Quantum to calculate 40%
$quantumInfo = $img->getQuantumRange();
// -fuzz 40%
$img->trimImage($quantumInfo['quantumRangeLong'] * 0.4);
// -format %@
$img->setOption('format','%@');
// info:
$img->setImageFilename('info:');

/*
 * For this example, let's use PHP memory protocol
 * to capture std out (from `info:').
 */
$fd = fopen('php://memory','rwb');
$img->writeImageFile($fd);
fseek($fd, 0);
$info = fread($fd, 1024);
fclose($fd);
var_dump($info);
//=> string(13) "258x170+19+22"

答案 1 :(得分:0)

我知道这有点傻但这对我有用,这是解决方法。我无法得到这个,所以我想出了完全不同的方法。

1)有时我们会上传像卧室内部这样的可视化照片,因此我们不需要修剪照片中的空白区域,因为它不存在。这就是为什么我们需要通过此线程https://stackoverflow.com/a/5959461/2760717

中的 get_avg_luminance 函数来检查照片是亮还是暗

2)现在我们必须写这个

$src_image = new Imagick($src_file);
$dimmensions = $src_image->getImageGeometry();
$height = $dimmensions['height'];
$luminance = get_avg_luminance($src_file);

// If image is mostly bright then add white border with 5% of entire height
if ($luminance > 170) {
    $quantumInfo = $src_image->getQuantumRange();
    if ($src_image->trimImage($quantumInfo['quantumRangeLong']*0.1)) {
            // add white border with 5% of offset
            $src_image->borderImage('#ffffff', 0, ($height *0.05));
    }
}

它正在为图像添加边框,对我来说工作正常:)