Jakie parametry musi „przekonwertować” (?), Aby uzyskać to WYJŚCIE z tego WEJŚCIA?
WEJŚCIE:
WYNIK:
Jakie parametry musi „przekonwertować” (?), Aby uzyskać to WYJŚCIE z tego WEJŚCIA?
WEJŚCIE:
WYNIK:
Odpowiedzi:
Ponieważ nie chciałem, aby obrazy były zrównane z prawą stroną, musiałem zastosować inne podejście ( composite
narzędzie ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
powinien być ostatecznym rozmiarem obrazu, który chcesz, canvas.png
jest pustym białym płótnem, in.png
obrazem, który chcesz wypełnić, i -geometry
jest przesunięciem pozycjonowania.
Moja wersja ImageMagick to „6.7.8-0 2012-07-04 Q16”. Według docu odpowiedź polecenia @kev powinna działać:
convert in.png -gravity east -extent 520x352 out.png
Jednak, podobnie jak w przypadku większości pytań dotyczących ImageMagick, możesz osiągnąć ten sam cel różnymi środkami. Możesz użyć montage
tego w następujący sposób:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
Wykorzystuje to specjalny obraz „null:” do połączenia go z plikiem in.png
.
Prawdą jest, że wraz z convert
koniecznością ponownego obliczenia wartości, które należy przekazać -extent
dla każdego obrazu wejściowego o innym rozmiarze.
Najpierw użyj, identify -format
aby uzyskać wymiary obrazu:
identify -format '%Wx%H' in.png
Powinno to zwrócić coś takiego:
449x352
Ok, teraz musisz dodać 71 pikseli, aby uzyskać końcową 520x352
wartość. Ale nie musisz wykonywać tych obliczeń we własnych mózgach:
ImageMagick na ratunek !, i jego magiczne możliwości obliczeniowe ... :-)
Możesz nakazać identify -format
komuś wykonanie obliczeń:
identify -format '%[fx:W+71]x%H'
To powinno dać ci wynik:
520x352
Zakładając, że chcesz po prostu wstawić / dodać „biały pasek” o szerokości 71 pikseli po lewej stronie dowolnego obrazu, możesz użyć następującej pojedynczej linii poleceń:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Voila! Jedna linia poleceń (która, szczerze mówiąc, zawiera 2 polecenia), i możesz pozwolić temu poluzować wszystkie PNG, JPEG, GIF, ... w katalogu, aby automatycznie magicznie dodać biały pasek 71 pikseli do każdego z nich:
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
Dla każdego obrazu jego wyjście pozostaje tego samego typu pliku. Oczywiście możesz wymusić zapisywanie wszystkich danych wyjściowych jako PNG (lub cokolwiek chcesz). Po prostu zamień %t.%e
część polecenia na %t.png
...
Dokumentacja: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. +1 za „właściwy kierunek” :-P
-background transparent
aby zachować przezroczyste tło.
Mam to polecenie zdefiniowane w moim .bash_profile
. Automatycznie obliczy ostateczny rozmiar obrazu na podstawie wypełnienia, którego chcesz szerokość i wysokość (działa z zerami):
# 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"
}
Przykładowe użycie:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png