Закругленные углы с использованием ImageMagick (задний фон прозрачный или белый)

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

Если входное изображение является файлом PNG или GIF, мой скрипт работает правильно.

Но если мой входной файл является файлом JPEG, углы будут черными. Я бы хотел использовать собственный цвет углов в этом случае (например, белый). Есть идея?

Вот мой рабочий сценарий на bash:

convert -size "$W"x"$H" xc:none -draw "roundrectangle 0,0,$W,$H,$R,$R" $MASK
convert $SRC -matte $MASK -compose DstIn -composite $DST

Параметры:

$ SRC: входное изображение $ W: ширина входного изображения $ H: высота входного изображения $ MASK: изображение маски, которое содержит прозрачные углы $ DST: результирующее изображение с закругленными углами.

Заранее спасибо.


person PM.    schedule 16.12.2009    source источник


Ответы (1)


Наконец нашел решение:

convert -size "$W"x"$H" xc:none -draw "roundrectangle 0,0,$W,$H,$R,$R" $MASK
convert $SRC -matte $MASK -compose DstIn -composite $TMP_PNG

Я использую временный файл PNG в качестве места назначения. Если выходной формат не GIF или PNG, я использую функцию «сглаживания» ImageMagick с белым цветом в качестве фона.

convert $TMP_PNG -background white -flatten $DST

Для вывода PNG: просто скопируйте $ TMP_PNG в $ DST

Для вывода в формате GIF: просто конвертируйте $ TMP_PNG в $ DST

Иначе: сгладьте изображение, как было сказано ранее.

Надеюсь, это поможет.

person PM.    schedule 16.12.2009
comment
Примечание для всех, кто читает этот ответ: если файл временной маски $TMP_PNG не имеет расширения файла, определяющего его формат (например, .png), вам нужно вместо этого указать префикс переменной. Как это: png:$TMP_PNG. Также canvas:none - это новый способ написания xc:none, хотя последний все еще работает. - person starfry; 05.07.2015