พารามิเตอร์ใดที่ "แปลง" (?) จำเป็นต้องรับเอาท์พุทนี้จากอินพุตนี้
INPUT:
เอาท์พุท:
พารามิเตอร์ใดที่ "แปลง" (?) จำเป็นต้องรับเอาท์พุทนี้จากอินพุตนี้
INPUT:
เอาท์พุท:
คำตอบ:
เนื่องจากฉันไม่ต้องการให้ภาพล้างออกทางด้านขวาฉันจึงต้องใช้วิธีการอื่น ( composite
เครื่องมือของ ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
ควรเป็นขนาดภาพสุดท้ายที่คุณต้องการcanvas.png
เป็นผืนผ้าใบสีขาวที่ว่างเปล่าin.png
จะเป็นภาพที่คุณต้องการรองและ-geometry
การจัดตำแหน่งออฟเซ็ต
เวอร์ชัน ImageMagick ของฉันคือ '6.7.8-0 2012-07-04 Q16' ตามที่ docu คำตอบของคำสั่ง @kev น่าจะใช้ได้:
convert in.png -gravity east -extent 520x352 out.png
อย่างไรก็ตามเช่นเดียวกับคำถาม ImageMagick ส่วนใหญ่คุณสามารถบรรลุเป้าหมายเดียวกันด้วยวิธีการที่แตกต่างกัน คุณสามารถใช้montage
สิ่งนี้:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
นี้ใช้พิเศษ 'null:' in.png
ภาพเพื่อเชื่อมกับ
เป็นความจริงที่ว่าเมื่อconvert
คุณต้องการคำนวณค่าที่คุณต้องส่งให้-extent
กับภาพอินพุตแต่ละภาพที่มีขนาดแตกต่างกัน
ใช้งานครั้งแรกidentify -format
เพื่อรับขนาดของภาพ:
identify -format '%Wx%H' in.png
สิ่งนี้ควรส่งคืนสิ่งที่ชอบ:
449x352
ตกลงตอนนี้คุณจะต้องเพิ่ม 71 พิกเซลที่คุณต้องการเพื่อรับ520x352
ค่าสุดท้าย แต่คุณไม่จำเป็นต้องทำการคำนวณในสมองของคุณ:
ImageMagick เพื่อช่วยเหลือ!, และความสามารถในการคำนวณเวทย์มนตร์ ... :-)
คุณสามารถบอกให้identify -format
คำสั่งทำการคำนวณนั้นสำหรับคุณ:
identify -format '%[fx:W+71]x%H'
สิ่งนี้ควรให้ผลลัพธ์แก่คุณดังนี้:
520x352
ดังนั้นสมมติว่าคุณต้องการเพียงแค่ pad / เพิ่ม 'แถบสีขาว' ความกว้าง 71 พิกเซลที่ด้านซ้ายของภาพใด ๆ คุณสามารถใช้ commandline เดียวต่อไปนี้:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Voila! หนึ่งบรรทัดคำสั่ง (ซึ่งสรุปคำสั่ง 2 คำเพื่อตรงไปตรงมา) และคุณสามารถปล่อยให้สิ่งนี้หลวมใน PNG ของคุณ, JPEGs, GIFs, ... ในไดเรกทอรีเพื่อเพิ่มแถบสีขาว 71pixels ของคุณโดยอัตโนมัติอย่างน่าอัศจรรย์:
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
สำหรับแต่ละอิมเมจของมันจะยังคงเป็นไฟล์ประเภทเดียวกัน แน่นอนคุณสามารถบังคับใช้เอาต์พุตทั้งหมดให้เป็น PNG (หรืออะไรก็ได้ที่คุณต้องการ) เพียงแทนที่%t.%e
ส่วนของคำสั่งด้วย%t.png
...
เอกสารประกอบ: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
คุณควรจะได้นำมาใช้ +1 สำหรับ 'ทิศทางที่ถูกต้อง' แม้ว่า :-P
-background transparent
เพื่อรักษาพื้นหลังโปร่งใส
.bash_profile
ฉันมีคำสั่งนี้กำหนดไว้ในของฉัน มันจะคำนวณขนาดภาพสุดท้ายโดยอัตโนมัติจากการขยายที่คุณต้องการในความกว้างและความสูง (ทำงานร่วมกับศูนย์):
# 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"
}
ตัวอย่างการใช้งาน:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png