Làm thế nào để chèn khoảng trắng với hình ảnh tưởng tượng?


15

Những thông số nào "chuyển đổi" (?) Cần có được OUTPUT này từ INPUT này?

ĐẦU VÀO:

nhập mô tả hình ảnh ở đây

ĐẦU RA:

nhập mô tả hình ảnh ở đây

Câu trả lời:


8

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 ( compositecông cụ của ImageMagick ):

convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png

-sizephải là kích thước hình ảnh cuối cùng bạn muốn, canvas.pnglà một khung vải trắng trống, in.pngsẽ là hình ảnh bạn muốn đệm và -geometrylà phần bù định vị.


15

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 montagenhư 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à convertbạn cần phải tính lại các giá trị bạn cần truyền -extentcho 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 520x352giá 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 -formatlệ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.%emột phần của lệnh bằng %t.png...


8

Tài liệu: http://www.imagemagick.org/Usage/crop/#extent

convert in.png -gravity east -extent 500x352 out.png

Cảm ơn!! Nhưng nếu hình ảnh của tôi không phải là 500x352 - vì kích thước thay đổi thì sao?
gasko peter

1
Tôi chỉ cho bạn cách làm.
kev

@kev: Lệnh của bạn không thực hiện chính xác những gì @gasko peter muốn. Bạn nên sử dụng -extend 520x352. +1 cho 'đúng hướng' mặc dù :-P
Kurt Pfeifle

sed 's # -extend # -extent # g'
Kurt Pfeifle

Tôi đã phải thêm -background transparentđể giữ một nền trong suốt.
run rẩy

0

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 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.