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

Nat*_*han 16 php imagemagick

我正在尝试使用ImageMagick和PHP在左侧和右侧的图像中修剪可变数量的空白.有谁知道怎么做(也许使用imagemagick以外的东西?)?

这是一个例子.

我有这两个图像:
测试
再次测试
每个都有一个可变数量的文本,在固定宽度的图像中动态创建.我需要做的是修剪右侧和左侧的背景,使图像像这样:
测试结果
再次测试结果

如果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\">";
?>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 19

我认为你ImageMagick-trim操作员1是在正确的轨道上,但诀窍是让它告诉你如果不实际做它做什么,然后修改它来做你真正想要的......

因此,要ImageMagick为第一张图像计算修剪框,请执行以下操作:

convert -fuzz 10% image.jpg -format "%@" info:
60x29+21+31
Run Code Online (Sandbox Code Playgroud)

这是一个60x29像素的矩形,从左上角偏移21和31.现在,我们希望将这些值变为bash变量,因此我将IFS(输入字段分隔符)设置为在空格上分割字段,x并且还+标记:

#!/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
Run Code Online (Sandbox Code Playgroud)

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

convert image.jpg -crop "${a}x+${c}+0" out.jpg
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述 在此输入图像描述

完整的程序是这样的:

#!/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
Run Code Online (Sandbox Code Playgroud)

笔记

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

convert image.jpg -trim info:
image.jpg JPEG 72x40 200x100+16+24 8-bit sRGB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)


Pek*_*ica 5

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

您不能为“智能”裁切指定一条边(-trim在命令行上称为),并且所有接受几何参数的裁切方法都需要使用固定编号进行裁切。

想到的唯一想法是,在单独的调用中获得剃光区域的颜色,运行trimImage并使用来添加丢失的区域-border

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

  • 我能够使用以下代码修剪图像的左右两侧:exec('convert test4.png -gravity West-背景白色-splice 5x0-背景黑色-splice 5x0 -trim + repage -chop 5x0 test44.png' ); 谢谢!exec('convert test44.png -gravity East-背景白色-splice 1x0-背景黑色-splice 1x0 -trim + repage -chop 1x0 test44.png'); (4认同)

hak*_*kre 5

基于GD的库WideImage有类似的东西.它被称为autoCrop,默认情况下它适用于所有四个方面.

但是,您可以添加另一个参数,并根据它仅裁剪上/下或左/右.

autoCrop代码

它有很好的记录.$img是一种WideImage_Image类型.还有一个互动的在线演示.

相关问题:删除视频缩略图中的黑条.