LINUX.ORG.RU

ImageMagick бордюр в текстуре

 


0

1

Есть текстура размером 30х30. Нужно без скейла изображения на ней добавить бордюр в один пиксель, что бы получилась текстура 32х32. Но при этом бордюр должен быть того же цвета, что и смежный пиксель.

Для добавления прозрачного бордюра я делаю так:

montage source.png -background none -geometry +1+1 out.png

Или вот так можно окрасить бордюр в красный цвет:

convert -border 1x2 -bordercolor "#FF0000" source.png out.png

Как мне покрасить бордюр в смежный цвет?

★★★★★

Последнее исправление: andreyu (всего исправлений: 1)

Повторить исходную картинку 9 раз:

-geometry +0+0
-geometry +2+0
-geometry +0+2
-geometry +2+2
-geometry +1+0
-geometry +0+1
-geometry +1+2
-geometry +2+1
-geometry +1+1

cdslow ★★
()
Ответ на: комментарий от cdslow

Не пойдет. На текстуре может быть объект с тенью. Нужно дублировать именно крайний пиксель.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Получилась пока такая штука:

convert -size 34x34 xc:none \
    ${in} -geometry +0+0 -composite \
    ${in} -geometry +2+0 -composite \
    ${in} -geometry +0+2 -composite \
    ${in} -geometry +2+2 -composite \
    ${in} -geometry +0+1 -composite \
    ${in} -geometry +2+1 -composite \
    ${in} -geometry +1+0 -composite \
    ${in} -geometry +1+2 -composite \
    ${in} -geometry +1+1 -composite \
    ${out}

Но нужно из ${in} брать только крайние пиксели. Не могу понять, как указать position и crop для ${in}.

При добавлении "-crop 1x32+0+0" получаю ошибку:

convert: geometry does not contain image `source.png' @ warning/transform.c/CropImage/666.

Танцы с круглыми скобками и -clone, +clone, +repage не помогли. Уверен, что есть простое решение, но я не могу его найти.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

только крайние пиксели

А зачем, нельзя просто +0+0 поверх разместить? Или так критично дольше отрабатывает?

anonymous
()
Ответ на: комментарий от anonymous

Нужно брать только крайние пиксели, дабы не испортить тени.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

convert: geometry does not contain image `source.png' @ warning/transform.c/CropImage/666.

Похоже понял в чем проблема. Я доэтого разрезал текстуру на тайлы с помощью convert source.png -crop SIZExSIZE out%03d.png
А нужно было добавить параметр -strip.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Родил такой говнокостыль:

convert ${in} -crop 1x1+0+0   lt.png
convert ${in} -crop 1x1+31+0  rt.png
convert ${in} -crop 1x1+0+31  lb.png
convert ${in} -crop 1x1+31+31 rb.png

convert ${in} -crop 1x32+0+0  l.png
convert ${in} -crop 1x32+31+0 r.png
convert ${in} -crop 32x1+0+0  t.png
convert ${in} -crop 32x1+0+31 b.png

convert -size 34x34 xc:none \
    lt.png -geometry +0+0   -composite \
    rt.png -geometry +33+0  -composite \
    lb.png -geometry +0+33  -composite \
    rb.png -geometry +33+33 -composite \
    l.png  -geometry +0+1   -composite \
    r.png  -geometry +33+1  -composite \
    t.png  -geometry +1+0   -composite \
    b.png  -geometry +1+33  -composite \
    ${in}  -geometry +1+1   -composite \
    PNG32:${out}

andreyu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.