Получите верхний левый угол пикселя в изображении с альфа-набором 1, используя imagick

Мне нужно найти координату x первого пикселя вместе с координатой y, имеющей альфа-набор 1. У меня есть прозрачное изображение, на котором у меня есть прямоугольник с черной рамкой. Теперь мне нужно найти верхнюю и левую стороны прямоугольника.

Например, проверьте изображение: прозрачный внешний прямоугольник

Итак, я подумал, что если каким-то образом я смогу получить первую непрозрачную точку на изображении, я смогу получить ее координаты и узнать об этом.

Можно ли это сделать с помощью Imagick в php. Я читал о pixelIterator, но как мне его использовать? любые предложения или мысли?


person kailash19    schedule 19.11.2012    source источник


Ответы (2)


Вы можете просмотреть все пиксели и использовать Imagick::getImagePixelColor(x,y) функция для чтения цвета.

person noslone    schedule 19.11.2012
comment
Спасибо .. но у нас нет ничего, что просто убрало бы пиксель с цветом?, или мне нужно вручную выполнить цикл, только это вариант. - person kailash19; 20.11.2012
comment
Может быть, есть какая-то библиотека, которая может сделать это за вас. Но я думаю, что проще написать этот цикл самому, чем найти эту библиотеку. - person noslone; 20.11.2012

Три года спустя, и просто для удовольствия, вот некоторые мысли о способе приблизиться к этому с помощью ImageMagick из командной строки...

Во-первых, вы можете извлечь канал прозрачности, используя -alpha extract <filename>, но на самом деле мне не нужен этот файл, поэтому я могу передать его другой команде convert, чтобы исключить все, где альфа не равна 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 пиксель и высоту 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.

person Mark Setchell    schedule 25.11.2015