2015-10-22 3 views
1

Я ищу, чтобы использовать Imagemagick (через PHP) для обработки PNG с прозрачным фоном и некоторыми полупрозрачными пикселями (например, градиенты). Изображения должны быть изменены следующим образом: 1. приложить все непрозрачные пиксели одинаковы, сплошной цвета (черный отлично)
2. расширить края форм в пределах изображений с помощью 25 пикселейИспользование Imagemagick для репликации функциональности «expand selection photoshop»

с этим входом (прозрачный BG, некоторые пиксели полупрозрачные):
Input PNG

Я ожидаю, что выход так:
Output PNG

Это не только изменение размера изображения. Я ищу функциональность, подобную тому, как Photoshop расширяет выбор (например, пробел в верхнем круге отрицается, потому что он меньше, чем 25-пиксельное расширение).

В настоящее время у меня есть код, который сканирует изображение и находит его, но не работает, когда есть несколько фигур, которые не связаны внутри изображения. Есть ли у Imagemagick способ сделать это или есть алгоритм, который я могу использовать для сканирования изображения и создания нужного вам результата? Скорость - беспокойство, но я могу жить с медленным решением, пока оно работает.

ответ

4

Этот ответ является незавершенное, я думаю, что мы можем получить вас там, хотя ...

В принципе, ваш шаг 1) означает, что вы хотите установить RGB каналы для черного по всему изображению, в то время оставляя прозрачность для определения фигур - я думаю. Ну, мы можем сделать это много способов, но давайте использовать порог, как это:

convert shapes.png -threshold 100% result.png 

enter image description here

Теперь вы хотите, чтобы расширить выбор, но выбор только действительно в/канал прозрачности альфа поэтому мы ограничиваем наши операции этим каналом, который будет поддерживать ускорение. В морфологическом плане, вы ищете дилатации, так что вы можете сделать что-то вроде этого:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 result.png 

Есть другие формы (диск, алмаз, и т.д.) и другие степени дилатации (я выбрал 25 дилатаций) - есть посмотрите на отличные примеры примеров ImageMagick Энтони Тиссена ... here.

enter image description here

Не уверен, что происходит с градаций прозрачности, поэтому я всесильный их с дополнительным -threshold на альфа-канале:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 -threshold 99% result.png 

enter image description here

Я буду вы должны перевести это на PHP - должно быть довольно легко.

+0

Это идеальное решение. Как-то расширение PHP Imagemagick не поддерживает морфологию (хотя это и есть в документах). Благодарим вас за элегантное решение. – Maximillian

+0

Отлично - рад, что это сработало для вас! Я удивлен, что материал морфологии не находится в версии PHP. Я обычно не использую PHP, но, возможно, @emcconville может пролить свет на него ... –

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