如何在PHP中使用Imagemagick修剪图像的左侧和右侧?

2022-08-30 21:01:32

我正在尝试使用ImageMagick和PHP在图像中仅左侧和右侧修剪可变数量的空白。有谁知道如何做到这一点(也许使用imagemagick以外的其他东西?)?

下面是一个示例。

我有这两个图像:
Test
Test Again
每个图像都有可变数量的文本,这些文本是在固定宽度的图像中动态创建的。我需要做的是修剪右侧和左侧的背景,以便图像像这样出来:
TestResult
Test Again Result

如果ImageMagick做不到,我愿意使用其他东西,但我需要帮助,因为我不是一个程序员。谢谢!

以下是我当前的代码,用于修剪图像的所有侧面:

<?php
/* Create the object and read the image in */
$i = '3';
$im = new Imagick("test".$i.".png");

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

/* Ouput the image */
//header("Content-Type: image/" . $im->getImageFormat());
//echo $im;
/*** Write the trimmed image to disk ***/
$im->writeImage(dirname(__FILE__) . '/test'.$i.'.png');
/*Display Image*/
echo $img = "<img src=\"test".$i.".png\">";
?>

答案 1

我认为您与 的运算符 1) 走在正确的轨道上,但诀窍是让它告诉您,如果不实际执行,它会做什么,然后对其进行修改以执行您真正想要的操作...ImageMagick-trim

因此,要获取第一个图像的修剪框计算,请执行以下操作:ImageMagick

convert -fuzz 10% image.jpg -format "%@" info:
60x29+21+31

这是一个 60x29 像素的矩形,从左上角偏移 21 个,向下偏移 31 个。现在,我们希望将这些值放入变量中,因此我将 IFS(输入字段分隔符)设置为拆分空格上的字段,并签名:bashx+

#!/bin/bash
IFS=" x+" read a b c d < <(convert -fuzz 10% image.jpg -format "%@" info:)

echo $a $b $c $d
60 29 21 31

现在我可以忽略 和 因为我们只对裁剪宽度感兴趣,并像这样裁剪:2931

convert image.jpg -crop "${a}x+${c}+0" out.jpg

所以,对于你的2张图片,我得到这些:

enter image description hereenter image description here

完整的过程是这样的:

#!/bin/bash
IFS=" x+" read a b c d < <(convert -fuzz 10% image.jpg -format "%@" info:)
convert image.jpg -crop "${a}x+${c}+0" out.jpg

笔记

1)这只是操作员的简写,这将是完整的-format %@-trim

convert image.jpg -trim info:
image.jpg JPEG 72x40 200x100+16+24 8-bit sRGB 0.000u 0:00.000

答案 2

从我在ImageMagick文档中看到的关于裁剪和边框的内容来看,这似乎是不可能的。

您无法为“智能”裁剪(称为命令行)指定边缘,并且所有接受几何参数的裁剪方法都需要固定编号才能进行裁剪。-trim

想到的唯一想法是在单独的调用中获取剃须区域的颜色,运行 ,然后使用 将丢失的区域添加回去。trimImage-border

编辑:IM手册也提出了类似的东西。查看仅修剪图像的一侧。我不熟悉IM的PHP扩展,将代码转换为PHP调用,但它应该是半途而废的。


推荐