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?
Odpowiedzi:
Zmień rozmiar
-resize
obsł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 400x300
tworzy dokładnie taki sam wynik jak-sample 400x300
robi, ale nadal działa trochę wolniej.Jeśli nie zostanie ustawiona obok (przed)
-resize
, konwersja będzie cicho domyślna,-filter Lanczos
która jest wolniejsza, ale generuje znacznie lepszą jakość (ponieważ bierze pod uwagę kolory wszystkich otaczających pikseli dla każdego nowo dodanego) niż-filter point
produkuje (która używa najbliższej reguła sąsiada określająca kolor nowo dodanych pikseli).próba
-sample
nie obsługuje dodatkowego ustawienia-filter
; jeśli mimo to-filter
jest 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
-sample
nie 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
-sample
jest 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
-sample
jest to, że nowy obraz nie będzie zawierał żadnych nowych kolorów, chociaż niektóre kolory z oryginalnego obrazu mogą zniknąć.ponowne próbkowanie
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ć
-density
w wierszu poleceń przed określeniem-resample
rozdzielczości.skala
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
-filter [something]
).Miniaturka
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
-resize
dyrektywy. Każda ilustracja przedstawia inny wynik, w zależności od „drobnych szczegółów” dokładnej metody zmiany rozmiaru:źródło
Jak powiedział Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:
-Zmień rozmiar
(8,0 kB)
-próba
(2,2 KB)
-skala
(7,0 kB)
-adaptive-resize
(4,3 kB)
źródło