2016-02-10 2 views
1

Я пытаюсь рассчитать, какой процент пикселей имеет прозрачность в определенном изображении. Для этого я пытаюсь определить, имеет ли пиксель прозрачность (используя Imagick на PHP). Я знаю, что в основном есть «getPixel» и «getColor», которые возвращают массив rgba, но я получаю различные значения для «a» для jpg и непрозрачных изображений pngs ... Я пробовал с и без нормализации ,Обнаружение прозрачности пикселей с помощью Imagick

Например, для этого изображения я получаю альфа-значения 0, 1, 0,1, 0,9 и т. Д. Для различных пикселей enter image description here.

Это код, я использую:

$imageIterator = $image->getPixelIterator();  
foreach ($imageIterator as $row => $pixels) { 
    foreach ($pixels as $column => $pixel) { 
     $color = $pixel->getColor(true); 
     echo $color['a'] . PHP_EOL; 
     ... 

Что я делаю неправильно? Есть ли другой способ получить эту информацию?

+1

Поделитесь своим кодом :) –

+1

Спасибо - я добавил. – yakobom

+0

Это изображение не прозрачно. – Danack

ответ

2

Вы можете проверить свою версию с:

php -i | grep -i -A10 magick 

Mine это:

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 на изображении, он не показывает альфа-слой р resent:

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 

Я думаю, что есть что-то с вашими версиями/конфигурациями.

+0

Спасибо. Шахта действительно старше, 3.1.2. Вы знаете, как я могу обновить его до последней версии? используя «sudo apt-get install php5-imagick» говорит мне, что у меня есть самая новая версия – yakobom

+0

Я боюсь, что я использую OSX и 'homebrew' для управления пакетами. Я думаю, вам, вероятно, нужно будет «sudo apt-get update» обновить список пакетов, но, пожалуйста, попробуйте Google и проверьте сначала - и, возможно, убедитесь, что ваши резервные копии обновлены до того, как вы сделаете слишком много. –

+0

Нет, я уже сделал это ... Я постараюсь найти способ сделать это. Если это действительно решение моей проблемы, я, естественно, приму ваш ответ. Большое спасибо. – yakobom

Смежные вопросы