Kwadratowe miniatury z ImageMagick (konwersja)?

32

Jak utworzyć kwadratową / przyciętą miniaturę za pomocą ImageMagick? Kadrowanie jak poniżej.

uprawa

marioosh
źródło

Odpowiedzi:

19

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 Vazquez-Abrams
źródło
7
Być może ... jakiś opis?
Cześć71,
Uwielbiam puste odpowiedzi Ignacio :-)
Ciro Santilli 17 改造 中心 法轮功 六四 事件
55

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)
Jonah Braun
źródło
3
Kiedy użyłem go w linii poleceń (magiczna grafika), dostałem obraz na środku, dwa sidery są wypełnione białym. Nie ten opisany w pytaniu. czy robię coś źle?
Umut Benzer
2
Jeśli używasz systemu Windows, musisz podwoić znak ^, aby go uciec. Np .: -thumbnail 100x100 ^^
George Filippakos
3
Dlaczego nie rozmiar 100x100?
Hello World,
@HelloWorld: Przeczytaj „Geometria Imagemagick”. Google, to będzie łatwe do znalezienia.
saurabheights
11

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ć -strippolecenie, 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.

Reinaldo Guedes
źródło
Dodając późną odpowiedź na pytanie z ustalonymi odpowiedziami, pomocne jest udzielenie wystarczającego wyjaśnienia, dlaczego twoja odpowiedź oferuje coś wyjątkowego i nowego w porównaniu z innymi odpowiedziami.
Jason Aller
2
Dzięki, nie wiem, dlaczego inni nadmiernie skomplikowali swoje odpowiedzi, aby spróbować zaoszczędzić pamięć, gdy OP w ogóle o tym nie wspomina.
zmieszany 00
2

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

Opcje wyjaśnione.

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
Ryan Williams
źródło
1

Myślę, że szukasz czegoś takiego:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

gdzie 100x100jest wielkość końcowego prostokąta i offsetu .50x50

pconcepcion
źródło
Ten obraz kadrowania, ale nie tworzy miniatury.
marioosh
1
@marioosh: Nie zrozumiałem, możesz użyć 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ę
pconcepcion
1

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

michaelbn
źródło