Как добавить границу с помощью Imagemagick

Как добавить границу с помощью Imagemagick

Я хочу добавить к своим фотографиям в Imagemagick:

  • белая рамка
  • 2 дюйма в ширину

Как мне это сделать?

решение1

convert -bordercolor white -border 20 input.jpg output.jpg

добавит к изображению белую рамку размером 20 пикселей. Вам просто нужно узнать, сколько пикселей составляет дюйм (dpi) изображения.

Больше примеров можно найтиздесь.

В случае моего тестового изображения, в нем была сохранена информация о dpi. Я мог получить ее с помощью identivy -verboseи она выглядела так:

$ identify -verbose tiger.jpg
Image: tiger.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
  Class: DirectClass
  Geometry: 600x400+0+0
  Resolution: 96x96
  Print size: 6.25x4.16667
  Units: PixelsPerInch
  Type: TrueColor
...

Как видите, разрешение составляет 96x96 точек на дюйм, поскольку единицы измерения имеют тип PixelsPerInch.

В этом случае 2 дюйма на моем изображении равны 192 пикселям.

решение2

Сначала выясните, сколько пикселей будет у 2-дюймовой границы. Добавьте эти пиксели к #пикселям вашего исходного изображения (дважды, так как вам нужна одинаковая граница с каждой стороны).

Теперь используйте convert like

convert <input> -size <newsize> xc:white +swap -gravity center -composite <output>

Допустим, размер изображения составляет 3600x2400, а разрешение — 100 пикселей/дюйм. Таким образом, вам нужно добавить 400 пикселей к каждому измерению, получив в результате 4000x2800. (Как узнать эти значения, описано @V-master). Затем команда читается как (гдеввод.jpgявляется оригинальным ивыход.jpgэто результат)

convert input.jpg -size 4000x2800 xc:white +swap -gravity center -composite output.jpg

Для меня это сработало так, как я и просил.

Редактировать:

convert input.jpg -bordercolor white -border <n> output.jpg

(как уже предложил @V.master) тоже работает, только -bordercolorопция должна быть определена до -border. Это сокращение для моего предложения, которое я использую, чтобы иметь границы разного размера (т. е. фиксированное соотношение сторон, независимое от исходного изображения).

Нет возможности установить единицу измерения в дюймах. Что такое 2", зависит от выходного разрешения вашего изображения при печати (например, 300 точек на дюйм: n=600, 600 точек на дюйм: n=1200 и т. д.).

Для тех, кому интересно: xcне-опция означаетX-окно Цвет, и устанавливаетхолстцвет. В новых версиях ImageMagick canvasпсевдоним был добавлен для ясности.

решение3

Работая над документацией, мне приходится обновлять изображения и снова добавлять рамку.

Следующий скрипт упрощает добавление рамки:

#!/bin/bash -e
if [ -z "$1" ]; then
    echo "Usage: $0 file"
    exit 1
fi

file="$1"
if [[ "$file" == *"-original"* ]]; then
    original=$file
    file=${file//-original/}
else
    extension=${file##*.}
    original="${file%.$extension}-original.$extension"
fi

if [ ! -e "$original" ]; then
    mv "$file" "$original"
fi

convert -bordercolor white -border 2 "$original" "$file"

Например, у нас есть файл myimage.pngбез рамки. Следующая команда:

$ ./add_frame.sh myimage.png

Для файла myimage.png:

  1. создает myimage-original.pngс текущим (без фрейма) содержимым
  2. добавляет рамку кmyimage.png

Для следующих заездов:

$ ./add_frame.sh myimage.png # you may use current name

$ ./add_frame.sh myimage-original.png # or with original suffix, result is the same
  1. Он копирует myimage-original.pngmyimage.png
  2. Добавить рамку вmyimage.png

Таким образом, я просто обновляю myimage-original.pngи добавляю кадр через скрипт.

Связанный контент