我正在尝试计算特定图像中具有透明度的像素百分比。为此,我试图检测像素是否具有透明度(在PHP上使用Imagick)。我知道基本上有'getPixel'和'getColor'返回一个rgba数组,但是我得到了jpg和非透明pngs图像的'a'的各种值......我试过了没有规范化
例如,对于此图像,我获得了各种像素的alpha值0,1,0.1,0.9等。
这是我正在使用的代码:
$imageIterator = $image->getPixelIterator();
foreach ($imageIterator as $row => $pixels) {
foreach ($pixels as $column => $pixel) {
$color = $pixel->getColor(true);
echo $color['a'] . PHP_EOL;
...
我做错了什么?是否有其他方式获取此信息?
答案 0 :(得分:2)
您可以通过以下方式检查您的版本:
php -i | grep -i -A10 magick
我是这样的:
imagick module => enabled
imagick module version => 3.3.0
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick compiled with ImageMagick version => ImageMagick 6.9.3-0 Q16 x86_64 2016-01-08 http://www.imagemagick.org
Imagick using ImageMagick library version => ImageMagick 6.9.3-0 Q16 x86_64 2016-01-08 http://www.imagemagick.org
ImageMagick copyright => Copyright (C) 1999-2016 ImageMagick Studio LLC
ImageMagick release date => 2016-01-08
运行此代码,我为您的图像获取所有代码 - 即没有alpha图层或完全不透明的图像:
#!/usr/local/bin/php -f
<?php
$image = new Imagick("budgie.png");
$pixel_iterator = $image->getPixelIterator();
foreach($pixel_iterator as $y => $pixels)
{
foreach($pixels as $x => $pixel)
{
$color = $pixel->getColor(true);
echo $color['a'] . PHP_EOL;
}
}
?>
同样,如果我在你的图片上运行identify
,它就不会显示alpha图层:
identify -verbose budgie.png | more
Image: budgie.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 296x383+0+0
Units: Undefined
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
我认为您的版本/配置存在一些问题。