Imagick. Изменение цвета для прозрачности

Я хотел бы изменить черную границу этого изображения: http://dev.loungeup.net/im/ прозрачно с Imagick в PHP.

В результате изображение должно иметь видимую серой рамку, изображение внутри серой границы видится, а все за пределами серой границы (сегодня в черном) должно быть прозрачным и пусть отображается основное содержимое (например, на HTML-странице).

Я несколько раз проходил документацию и пытался несколько решений, но не понял, как ее достичь.

Любая помощь приветствуется.

благодаря

Вот один из методов, который вы можете использовать, похожий на инструмент волшебной палочки Photoshop:

convert original.jpg -alpha set -channel alpha -fuzz 18% \ -fill none -floodfill +0+0 black transparent-border.png 

Ниже приведены команды:

convert original.jpg : начать Imagemagick с оригинальным изображением

-alpha set : активировать альфа-канал

-channel alpha : имеют следующие операторы действуют на альфа-канал

-fuzz 18% : см. -floodfill

-fill none : см. -floodfill

-floodfill +0+0 black : начните с верхнего левого угла ( +0+0 ) и найдите соседние пиксели внутри -fuzz цветное расстояние black и замените его на -fill

transparent-border.png : выходное изображение

Вот результат: Метод Imagemagick 1

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

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

Если вы застряли с этими маленькими изображениями (или если вы просто хотите использовать другой метод), я бы порекомендовал идти другим путем, где вы создаете свою собственную форму маски, которая меньше размера исходной фотографии, а затем добавляет обратно ваша собственная серая граница. Я привел пример этого процесса ниже.

Возможной командой для этого метода будет:

 convert original.jpg mask.png -compose CopyOpacity -composite \ -compose src-over new-border.png -composite clean-result.png 

… разбито …

convert original.jpg mask.png : запустите Imagemagick с оригинальным изображением и принесите mask.png в качестве второго слоя (mask.png – это белая округло-прямоугольная форма фотографии на черном фоне, но форма немного меньше, чем оригинала – результат удалит серо-черную рамку оригинала).

-compose CopyOpacity -composite : используйте mask.png для «выбивания» формы из оригинала.png

-compose src-over : сбросить композитный метод на простой накладной

new-border.png -composite : наложение серой границы (png – граница шириной 3 px, 1px с каждой стороны края маски на прозрачном фоне)

clean-result.png : выходное изображение

Я создал mask.png и new-border.png в Photoshop. Вы можете использовать векторные инструменты Imagemagick и делать это все в одной команде, используя только original.jpg, но это будет непросто.

Результат: Метод Imagemagick 2

В заключение, я не уверен, используете ли вы PHP Imagick или Imagemagick из командной строки. Несколько лет назад я попытался использовать Imagick, но быстро разочаровался в отсутствии документации по сравнению с командной строкой (возможно, это было изменено). Вместо этого я выполняю команды из PHP (например, от exec() или passthru() ). Некоторые или многие другие, вероятно, скажут вам, что никогда не следует выполнять команды оболочки из PHP, но пока вы избегаете каких-либо аргументов, я пока не вижу убедительного аргумента против этого. Тогда у вас будет вся документация Imagemagick в вашем распоряжении ( http://www.imagemagick.org/Usage/ ).

Приветствия.