使用imagick获得具有alpha set 1的图像中的像素的左上角

时间:2012-11-19 06:43:47

标签: php imagemagick imagick

我需要找到第一个像素的x坐标以及具有alpha集1的y坐标。我有一个透明图像,我有一个黑色边框矩形。现在我需要找到矩形的顶部和左侧。

例如,检查图片: tranparent outer rectangle

所以我想到,如果我能在图像中得到第一个非透明点,我可以得到它的坐标并了解它。

可以在php中使用Imagick完成。我读到了关于pixelIterator的内容,但我如何使用它来做到这一点?有什么建议或想法吗?

2 个答案:

答案 0 :(得分:1)

您可以遍历所有像素并使用Imagick::getImagePixelColor(x,y)函数来读取颜色。

答案 1 :(得分:0)

三年后,只是为了踢,这里有一些关于从命令行使用ImageMagick来解决这个问题的想法......

首先,您可以使用-alpha extract <filename>提取透明度通道,但我真的不想要该文件,因此我可以将其传输到另一个convert命令,以限制alpha所在的任何位置不是1(我假设16位量化,即65535 = 1),然后询问ImageMagick如何使用-format %@ -write info:

将图像修剪到最小的边界框
convert rectangle.png -alpha extract png:- | convert - -threshold 65534 -format %@ -write info: alpha.png

<强>输出

91x118+80+81

告诉我,阈值透明度的边界框是91px宽,高118像素,它从左上角开始向上80px,最重要的是它从顶部向下开始81像素 - 我现在知道y坐标是81。

虽然我们实际上并不需要它来找到你寻找的像素,但它有助于展示我正在做的事情,所以让我只是画那个盒子让你看到它:

convert rectangle.png -stroke red -fill none -draw "rectangle 80,81 170,198" fyi.png

enter image description here

现在,我可以从图像中裁剪出第81行并找到grep的第一个白色像素,并在找到后立即退出。

convert alpha.png -crop x1+0+81 txt: | grep -m1 "#FFFFFF"

<强>输出

147,0: (65535,65535,65535)  #FFFFFF  gray(255)

所以,这告诉我第一个白色像素是147,所以我也知道x坐标。因此,您寻找的像素为147,81。