Jaka jest różnica między operatorami sample / resample / scale / resize / adaptive-resize / thumbnail w programie ImageMagick Convert?

84

Znalazłem wiele sposobów zmiany rozdzielczości obrazu za pomocą convert:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail

Jaka jest różnica między nimi?

Jeśli chcę zrobić miniatury zdjęć o różnych rozmiarach i ze stałym współczynnikiem proporcji (wymagane przycięcie) - jaki jest mój najlepszy wybór?

est
źródło
2
Ten adres URL - ImageMagick v6 Przykłady - zmiana rozmiaru lub skalowanie powinno Ci pomóc.
Harvey
Aby uzyskać jeszcze więcej informacji, zobacz imagemagick.org/Usage/filter i imagemagick.org/Usage/filter/nicolas
fmw42

Odpowiedzi:

136

Zmień rozmiar

-resize 400x300+20+30(jak w przykładach -scalei -sampleponiżej) konwertuje dane wejściowe na obraz wyjściowy, który ma wymiary w pikselach 400x300. Przesuwa również wynik o 20 pikseli w prawo i 30 pikseli w dół. Ponadto istnieje kilka dodatkowych różnic w -scale:

  • -resizeobsługuje dodatkowe ustawienie -filter(które powinno wystąpić w wierszu poleceń przed użyciem -resize!).

  • -filter określa dokładny algorytm, który ma być użyty dla kolorów dodanych pikseli w przypadku powiększenia lub dla kolorów, które zostaną użyte dla pozostałych pikseli, gdy część ich sąsiadów zostanie usunięta w przypadku minifikacji.

  • Aby wyświetlić listę obsługiwanych filtrów, po prostu uruchom convert -list filter.

  • -filter point -resize 400x300tworzy dokładnie taki sam wynik jak -sample 400x300robi, ale nadal działa trochę wolniej.

  • Jeśli nie zostanie ustawiona obok (przed) -resize, konwersja będzie cicho domyślna, -filter Lanczosktóra jest wolniejsza, ale generuje znacznie lepszą jakość (ponieważ bierze pod uwagę kolory wszystkich otaczających pikseli dla każdego nowo dodanego) niż -filter pointprodukuje (która używa najbliższej reguła sąsiada określająca kolor nowo dodanych pikseli).

próba

-sample 400x300konwertuje obraz wejściowy na obrazy wyjściowe o wymiarach w pikselach 400x300. Jest jednak kilka bardzo ważnych różnic w -resize:

  • -samplenie obsługuje dodatkowego ustawienia -filter; jeśli mimo to -filterjest ustawione, jest po prostu ignorowane.

  • Podczas powiększania (ponieważ rozmiar obrazu wejściowego może być mniejszy niż 400x300), piksele są replikowane w blokach.

  • Podczas kompresji (ponieważ rozmiar obrazu wejściowego może być większy niż 400x300) piksele są poddawane próbkowaniu za pomocą bardzo prostego algorytmu: niektóre wiersze i kolumny są po prostu pomijane.

  • Geometria argument -samplenie obsługuje żadnej przesunięcie części (w przeciwieństwie -resize, który szanuje przesunięcie wskazówki na wyjściu).

  • Wynik nigdy nie będzie miał więcej (różnych) kolorów niż miał obraz wejściowy; może mieć jednak mniej kolorów.

  • Dlatego -samplejest bardzo szybki (szybszy niż -resize) - ale jakość wyjściowa jest (zwykle) gorsza: można łatwo uzyskać ekstremalne efekty blokowania i aliasingu w wynikowym wyniku.

  • Jedną z ważnych cech programu -samplejest to, że nowy obraz nie będzie zawierał żadnych nowych kolorów, chociaż niektóre kolory z oryginalnego obrazu mogą zniknąć.

ponowne próbkowanie

-resampleużywa jako parametru pożądanej XxY rozdzielczości , a nie geometriiXxY pikseli obrazu docelowego. Celem tego operatora jest zachowanie renderowanego rozmiaru obrazu: Załóżmy, że obraz ma wymiary 4 cale na 3 cale na urządzeniu, które renderuje go w rozdzielczości 300 DPI. Następnie prosi o lub zmieni rozmiar obrazu, tak aby mierzył (ponownie) 4 cale na 3 cale na urządzeniu 72 DPI.-resample 72-resample 72x72

  • Ta operacja działa tylko dla takich obrazów, które mają już żądaną rozdzielczość zapisaną w swoich metadanych (nie wszystkie formaty obrazów obsługują koncepcję rozdzielczości obrazu - JPEG, PNG i TIFF).

  • Jeśli obraz źródłowy jest w formacie, w którym brakuje wewnętrznej obsługi rozdzielczości obrazu, to (zakładaną) oryginalną rozdzielczość obrazu należy określić -densityw wierszu poleceń przed określeniem -resamplerozdzielczości.

skala

-scale 400x300daje równoważny wynik (ale jest szybszy, ponieważ pozwala uniknąć przetwarzania wszystkich filtrów), podobnie jak using -filter box -resize 400x300. Całkowicie ignoruje również wszelkie bieżące -filterustawienia.

  • Podczas zmniejszania zmienia rozmiar obrazu, po prostu zastępując kolory pikseli, uśredniając razem odpowiednie wejściowe kolory pikseli.

  • Podczas powiększania po prostu replikuje odpowiednie piksele wejściowe dla wymaganych dodatkowych pikseli.

adaptacyjna zmiana rozmiaru

-adaptive-resize 400x300nie obsługuje (lub ignoruje, jeśli jest ustawiona) odsuniętej części parametru geometrii , a także ignoruje -gravityustawienie, jeśli jest obecne.

  • Domyślnie używa triangulacji zależnej od danych podczas zmiany rozmiaru (chyba że metoda zmiany rozmiaru zostanie zastąpiona przez dodatkowe określenie -filter [something]).

Miniaturka

-thumbnaildziała tak samo, jak -resizedziała, z kilkoma różnicami:

  • Jest zoptymalizowany pod kątem szybkości.

  • Usuwa również wszelkie osadzone profile kolorów, aby zmniejszyć rozmiar plików miniatur.


Poniższa odpowiedź przedstawia kilka (zilustrowanych!) Przykładów -resizedyrektywy. Każda ilustracja przedstawia inny wynik, w zależności od „drobnych szczegółów” dokładnej metody zmiany rozmiaru:

Kurt Pfeifle
źródło
4
Dzięki, to ma o wiele więcej sensu niż dokumentacja ImageMagick.
Paul Brannan,
Gdybyś miał przykładowe obrazy, byłoby to jeszcze doskonalsze :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@KurtPfeifle: Przede wszystkim dziękuję za bardzo pouczającą odpowiedź. Czy możesz zasugerować jakąkolwiek dobrą książkę lub plik PDF z dokumentacją dla Imagemagick. Najlepsze podejście, jakie mam teraz, to zeskrobanie wszystkich stron Imagemagick, aby skrócić czas czytania, ale jest to dużo informacji (które moim zdaniem nie zawsze są wystarczająco opisowe). Każda pomoc jest wysoko ceniona.
saurabheights
5

Jak powiedział Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:

Gdybyś miał przykładowe obrazy, byłoby to jeszcze doskonalsze :-)

-Zmień rozmiar

Google Play z -resize (8,0 kB)

-próba

-próba (2,2 KB)

-skala

-skala (7,0 kB)

-adaptive-resize

wprowadź opis obrazu tutaj (4,3 kB)

serv-inc
źródło