我使用ImageMagick
从我的图片中修剪空白。一切都很好,成功修剪。但现在我想留下大约30px的偏移并从图像中删除额外的空白。我的意思是说我目前的结果是
现在您可以看到上面的图像被完全修剪但我想要一些像
这样的偏移我想在每一侧留下30px并修剪剩余的空白。我正在使用以下代码填充Fuzz
$image = new Imagick('capfile.jpg');
$image->trimImage(25000);
我不想添加边框或裁剪。我只想修剪30px的偏移到主图像本身,因为我的许多图像也有一些使用Fuzz修剪的浅色背景颜色,因此添加边框不是一种选择。
答案 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));
}
}
它正在为图像添加边框,对我来说工作正常:)