Я пытаюсь рассчитать, какой процент пикселей имеет прозрачность в конкретном изображении. Для этого я пытаюсь определить, имеет ли пиксель прозрачность (используя Imagick на PHP). Я знаю, что в основном есть ‘getPixel’ и ‘getColor’, которые возвращают массив rgba, но я получаю различные значения для ‘a’ для изображений jpg и непрозрачных pngs … Я пробовал с нормализацией и без нее ,
Например, для этого изображения я получаю альфа-значения 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;
...
Что я делаю неправильно? Есть ли другой способ получить эту информацию?
Вы можете проверить свою версию с:
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
Запустив этот код, я получу все для вашего изображения — т.е. без альфа-слоя или полностью непрозрачного изображения:
#!/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
на вашем изображении нет альфа-слоя:
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
Я думаю, что-то не так с вашими версиями / конфигурациями.
Других решений пока нет …