Odpowiedzi:
Wyjaśnia to oficjalna dokumentacja ImageMagick w części „Wytnij miniaturę, aby dopasować” :
Alternatywą jest zamiast wycinania obrazu w celu dopasowania go do określonego rozmiaru miniatury, którego chcemy, to zamiast tego odciąć części obrazu, które nie pasują do ostatecznego rozmiaru.
Oczywiście oznacza to, że faktycznie tracisz niektóre części oryginalnego obrazu, szczególnie krawędzie obrazu, ale wynikiem jest powiększona miniatura środkowej części obrazu. Jest to zazwyczaj (ale nie zawsze) główny temat obrazu, więc jest to praktyczna metoda tworzenia miniatur.
Od IM v6.3.8-3 dodano specjalną flagę opcji zmiany rozmiaru „^”, aby to ułatwić. Po prostu zmieniamy rozmiar za pomocą tej flagi, a następnie wycinamy części obrazu, które przekraczają pożądany rozmiar.
A w kontekście przykładowego polecenia:
convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \
-gravity center -extent 100x100 cut_to_fit.gif
Ignacio link do właściwej dokumentacji, jednak dla wygody wkleję ją tutaj:
convert -define jpeg:size=200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 thumbnail.jpeg
Podobnie jest w przypadku GraphicsMagick:
gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg
Wyjaśnienie:
-size 200x200
informuje dekoder jpeg, że potrzebujemy tylko tej rozdzielczości, aby mógł zaoszczędzić pamięć i szybciej odczytać obraz źródłowy-thumbnail 100x100^
szybka zmiana rozmiaru co najkrótszy bok 100- gravity center
wyśrodkuj następną operację-extent 100x100
zastosuj obraz na płótnie 100 x 100+profile "*"
nie zapisuj żadnych metainfo na JPEG (zmniejszając wynikowy obraz)To jest prostszy sposób na zrobienie tego:
Następujące polecenie zmienia rozmiar mniejszej strony do 100 pikseli i przycina kwadrat 100 x 100. Możesz dodać -strip
polecenie, aby zmniejszyć rozmiar pliku.
convert original.jpg -resize "100^>" -gravity center \
-crop 100x100+0+0 -strip thumbnail.jpg
W przeciwieństwie do innych, nie próbuje oszczędzać pamięci. Zamiast tego robi to, co chcesz i nic więcej. Ponadto nie przeskaluje obrazów.
Korzystam z Graphicsmagick, aby generować miniatury o precyzyjnych rozmiarach, ale zamiast kadrowania zwisu wypełniam obraz szachownicą.
gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg
gm convert
// Single threaded seems faster on smaller files
-limit Threads 1
// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard
// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg
// Merge the layers
-flatten
// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65!
// Use Progressive JPEG Encoding
-interlace Line
// Output Image
thumb_112x65.jpg
Myślę, że szukasz czegoś takiego:
convert -crop 100x100+50+50 input_image.jpg output_image.jpg
gdzie 100x100
jest wielkość końcowego prostokąta i offsetu .50x50
convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg
, aby uzyskać więcej informacji, sprawdź przykład odpowiedzi Igancio Vazqueza lub sprawdź dokumentację
To polecenie przycina do kwadratu, a następnie zmienia rozmiar na 150 x 150
convert 824-full.jpg -set option:size '%[fx:min(w,h)]x%[fx:min(w,h)]' xc:none +swap -gravity center -composite -resize 150x150 temp.jpg
Więcej opcji jest dostępnych tutaj: http://www.imagemagick.org/Usage/thumbnails/#square