
Я хочу добавить к своим фотографиям в 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
:
- создает
myimage-original.png
с текущим (без фрейма) содержимым - добавляет рамку к
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
- Он копирует
myimage-original.png
→myimage.png
- Добавить рамку в
myimage.png
Таким образом, я просто обновляю myimage-original.png
и добавляю кадр через скрипт.