我需要找到第一个像素的 x 坐标以及 alpha 设置为 1 的 y 坐标。我有一个透明图像,上面有一个黑色边框矩形。现在我需要找到矩形的顶部和左侧。
例如,检查图像:
所以我想,如果我能以某种方式获得图像中的第一个非透明点,我就可以获得它的坐标并了解它。
可以在 php.ini 中使用 Imagick 来完成吗?我阅读了有关 pixelIterator 的信息,但我如何使用它来做到这一点?有什么建议或想法吗?
我需要找到第一个像素的 x 坐标以及 alpha 设置为 1 的 y 坐标。我有一个透明图像,上面有一个黑色边框矩形。现在我需要找到矩形的顶部和左侧。
例如,检查图像:
所以我想,如果我能以某种方式获得图像中的第一个非透明点,我就可以获得它的坐标并了解它。
可以在 php.ini 中使用 Imagick 来完成吗?我阅读了有关 pixelIterator 的信息,但我如何使用它来做到这一点?有什么建议或想法吗?
您可以循环遍历所有像素并使用Imagick::getImagePixelColor(x,y)函数来读取颜色。
三年后,只是为了好玩,这里有一些关于从命令行使用 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
这告诉我阈值透明度的边界框是 91 像素宽 x 118 像素高,它从左上角开始 80 像素,最重要的是它从顶部向下 81 像素开始 - 我现在知道 y 坐标是 81 .
虽然我们实际上并不需要它来找到您寻找的像素,但它有助于显示我在做什么,所以让我画出那个框以便您可以看到它:
convert rectangle.png -stroke red -fill none -draw "rectangle 80,81 170,198" fyi.png
现在我可以只裁剪图像中的第 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。