Как обрезать png с помощью ImageMagick конвертировать инструмент, и держать все вещи на одинаковом расстоянии от исходного центра? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть png с некоторой прозрачностью на доске, и я хочу подрезать прозрачность и держать каждую вещь с одинаковым расстоянием до исходного центра. Я использую инструмент преобразования из ImageMagick Например,

Оригинальный.

The original

Результат, который я хочу.

The correct result

Результат, который я использую с convert original.png -trim +repage out.png

The wrong result

Оригинальный файл здесь.

enter image description here

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Я могу получить описанный вами результат, используя IM 6.8.9-9 в оболочке ubuntu bash в Windows 10, выполнив эту команду ...

convert test.png -write mpr:input -duplicate 3 \
   -distort SRT %[fx:t*90] -background none -layers merge -trim \
   -set option:pagewide %[w] -set option:pagehigh %[h] -set option:pageoffset %[fx:page.x] \
   -delete 0 mpr:input -set page %[pagewide]x%[pagehigh]-%[pageoffset]-%[pageoffset] \
   -coalesce result.png

Это читает на входе, сохраняет одну копию во временной памяти, делает еще 3 копии и поворачивает их на 0, 90, 180 и 270 градусов. Затем он выравнивает их и использует результаты обрезки для расчета окончательных размеров и смещений изображения. Затем он удаляет это измененное изображение, возвращает оригинал из временной памяти и создает вывод, применяя эти рассчитанные параметры страницы к оригиналу.

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

EDITED TO ADD: Команда, которую я добавил ниже, должна взять любое входное изображение и обрезать его настолько прозрачно, насколько это возможно, сохраняя при этом исходные центральные пиксели в центре результата ...

convert test.png -write mpr:input -background none \
   -rotate 180 mpr:input -composite -set page %[@] \
   -set option:bounds %[fx:page.width]x%[fx:page.height]-%[fx:page.x]-%[fx:page.y] \
   -delete 0 mpr:input -set page %[bounds] -coalesce result.png

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

0 голосов
/ 09 мая 2018

Спасибо всем, ребята. Все ваши команды работают, и потому что некоторые из моих изображений не квадратные, поэтому я наконец-то использую эту команду учиться на форуме imagemagick, она работает в Windows 7 с IM V7.0.7-31

magick lBW9I.png ( +clone -trim -set option:NTRIM %[fx:min(min(page.x,page.width-w-page.x),min(page.y,page.height-h-page.y)*page.width/page.height)]x%[fx:min(min(page.y,page.height-h-page.y),min(page.x,page.width-w-page.x)*page.height/page.width)] +delete ) -shave %[NTRIM] x.png
0 голосов
/ 08 мая 2018

Я бы порекомендовал запустить операцию -trim и записать смещения страниц во временной переменной.Затем рассчитайте окончательное изображение, применив -extent.

Например ..

# Capture original size.
read -r WIDTH HEIGHT <<<$(convert lBW9I.png -format '%[fx:page.width] %[fx:page.height]' info:-)
# Capture offset after applying trim.
read -r LEFT TOP <<<$(convert lBW9I.png -trim -format '%[fx:page.x] %[fx:page.y]' info:-)
# Use the local variables to calculate finial paging...
convert lBW9I.png \
        -background transparent \
        -extent "$(($WIDTH - $LEFT * 2))x$(($HEIGHT - $TOP * 2))+$LEFT+$TOP" \
        output.png

With original center

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...