Những thông số nào "chuyển đổi" (?) Cần có được OUTPUT này từ INPUT này?
ĐẦU VÀO:
ĐẦU RA:
Những thông số nào "chuyển đổi" (?) Cần có được OUTPUT này từ INPUT này?
ĐẦU VÀO:
ĐẦU RA:
Câu trả lời:
Vì tôi không muốn hình ảnh bị lộn với phía bên phải, tôi đã phải sử dụng một cách tiếp cận khác ( composite
công cụ của ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
phải là kích thước hình ảnh cuối cùng bạn muốn, canvas.png
là một khung vải trắng trống, in.png
sẽ là hình ảnh bạn muốn đệm và -geometry
là phần bù định vị.
Phiên bản ImageMagick của tôi là '6.7.8-0 2012-07-04 Q16'. Theo tài liệu, câu trả lời của lệnh @kev sẽ hoạt động:
convert in.png -gravity east -extent 520x352 out.png
Tuy nhiên, giống như hầu hết các câu hỏi của ImageMagick, bạn có thể đạt được cùng một mục tiêu với các phương tiện khác nhau. Bạn có thể sử dụng montage
như thế này:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
Điều này sử dụng hình ảnh 'null:' đặc biệt để ghép nó với in.png
.
Đúng là convert
bạn cần phải tính lại các giá trị bạn cần truyền -extent
cho mỗi hình ảnh đầu vào có kích thước khác nhau.
Lần đầu tiên sử dụng identify -format
để có được kích thước của hình ảnh:
identify -format '%Wx%H' in.png
Điều này sẽ trả về một cái gì đó như:
449x352
Ok, bây giờ bạn sẽ cần thêm 71 pixel mong muốn của mình, để có được 520x352
giá trị cuối cùng . Nhưng bạn không cần phải thực hiện phép tính đó trong bộ não của mình:
ImageMagick để giải cứu!, Và khả năng tính toán kỳ diệu của nó ... :-)
Bạn có thể nói identify -format
lệnh để thực hiện phép tính đó cho bạn:
identify -format '%[fx:W+71]x%H'
Điều này bây giờ sẽ cung cấp cho bạn một kết quả của:
520x352
Vì vậy, giả sử bạn muốn chỉ cần thêm / thêm một 'dải trắng' có chiều rộng 71 pixel vào bên trái của bất kỳ hình ảnh nào, bạn có thể sử dụng dòng lệnh đơn sau đây:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Voila! Một dòng lệnh (bao gồm 2 lệnh, thành thật mà nói) và bạn có thể để lệnh này lỏng lẻo trên tất cả các PNG, JPEG, GIF, ... của bạn trong một thư mục để tự động thêm dải trắng 71pixels của bạn vào mỗi lệnh:
for i in *.png *.jpeg *jpg *.gif; do
convert \
${i} \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' ${i}) \
$(convert ${i} -format "71-pixels-padded-left---%t.%e" info:)
done
Đối với mỗi hình ảnh, đầu ra của nó vẫn giữ nguyên kiểu tệp. Tất nhiên bạn có thể thực thi tất cả đầu ra là PNG (hoặc bất cứ điều gì bạn muốn). Chỉ cần thay thế %t.%e
một phần của lệnh bằng %t.png
...
Tài liệu: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. +1 cho 'đúng hướng' mặc dù :-P
-background transparent
để giữ một nền trong suốt.
Tôi có lệnh này được xác định trong của tôi .bash_profile
. Nó sẽ tự động tính toán kích thước hình ảnh cuối cùng từ phần đệm bạn muốn theo chiều rộng và chiều cao (hoạt động với số không):
# arithmetic with awk
calc() { awk "BEGIN { print $* }"; }
# pad an image
img_pad() {
local width height pw ph
[ $# -lt 3 ] && { echo "Usage: img_pad <Input> <WxH> <Output>"; return; }
# parse current size and padding
IFS=x read width height <<< "$(identify "$1" | awk '{print $3}')"
IFS=x read pw ph <<< "$2"
# new widht and height
width=$(calc "$width + 2*$pw")
height=$(calc "$height + 2*$ph")
echo "Converting '$1' to '$3' with size ${width}x${height} (+w=${pw}, +h=${ph})."
convert "$1" -gravity center -extent "${width}x${height}" "$3"
}
Ví dụ sử dụng:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png