Я хочу использовать Imagemagick (через PHP) для обработки PNG с прозрачным фоном и некоторыми полупрозрачными пикселями (например, градиентами). Изображения должны быть изменены следующим образом:
1. сделать все непрозрачные пиксели одинаковыми, сплошной цвет (черный в порядке)
2. расширить края фигур на изображении на 25 пикселей
С этим входом (прозрачный фоновый рисунок, некоторые пиксели полупрозрачны):
Это не просто изменение размера изображения. Я ищу функциональность, похожую на то, как Photoshop расширяет выделение (например, разрыв в верхнем круге сводится на нет, потому что он меньше, чем расширение в 25 пикселей).
В настоящее время у меня есть код, который сканирует изображение и находит края, но не работает, когда есть несколько фигур, которые не связаны внутри изображения. Есть ли у Imagemagick способ сделать это или есть алгоритм, который я могу использовать для сканирования изображения и получения нужного мне результата? скорость является беспокойство, но я могу жить с медленным решением, пока оно работает.
Этот ответ находится в стадии разработки, я думаю, что мы можем доставить вас туда, хотя …
По сути, ваш шаг 1) означает, что вы хотите установить каналы RGB черным по всему изображению, оставляя при этом прозрачность для определения форм — я думаю. Ну, мы можем сделать это множеством способов, но давайте воспользуемся следующим порогом:
convert shapes.png -threshold 100% result.png
Теперь вы хотите расширить выделение, но выделение действительно только в канале альфа / прозрачности, поэтому мы ограничиваем наши операции этим каналом, который будет поддерживать скорость. В морфологическом смысле вы ищете расширение, поэтому вы можете сделать что-то вроде этого:
convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 result.png
Существуют и другие формы (диск, ромб и т. Д.) И другие степени расширения (я выбрал 25 расширений) — взгляните на превосходные страницы Энтони Тиссена с примерами ImageMagick … Вот.
Не уверен, что происходит с градациями в прозрачности, поэтому я зарезал их дополнительным -threshold
на альфа-канале:
convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 -threshold 99% result.png
Я оставлю вас, чтобы перевести это на PHP — должно быть довольно легко.
Других решений пока нет …