Chcę skompresować plik obrazu JPG za pomocą ImageMagick, ale nie mogę uzyskać dużej różnicy w rozmiarze. Domyślnie rozmiar wyjściowy jest większy niż wejście. Nie wiem dlaczego, ale po dodaniu niektórych opcji + profilu i ustaleniu jakości mogę uzyskać mniejszy rozmiar, ale nadal podobny do oryginału.
Obraz wejściowy to 255 kb, przetworzony obraz to 264 kb (użycie + profilu do usunięcia profili i ustawienie jakości na 70%). Czy jest jakiś sposób na skompresowanie tego obrazu co najmniej do 150 KB? Czy to jest możliwe? Z jakich opcji ImageMagick mogę korzystać?
image-processing
imagemagick
Javis Perez
źródło
źródło
Odpowiedzi:
Używam zawsze:
w imagemagick powinno być
lub w nowszej wersji:
mam nadzieję, że to się przyda.
Link do źródła: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/
Od @Fordi w komentarzach (nie zapomnij pochwalić jego komentarza, jeśli chcesz): Jeśli nie lubisz rozmycia, użyj
-sampling-factor 4:2:0
zamiast tego. Powoduje to zmniejszenie rozdzielczości kanału chrominancji do połowy, bez pogarszania rozdzielczości luminancji, na którą zapadają się twoje oczy. Jeśli chcesz uzyskać lepszą wierność konwersji, możesz uzyskać niewielką poprawę bez zwiększania rozmiaru pliku, określając-define jpeg:dct-method=float
- to znaczy użyj dokładniejszej zmiennoprzecinkowej dyskretnej transformacji kosinusowej, a nie domyślnej wersji szybkiej liczby całkowitej.źródło
mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg
. Upewnij się, że masz kopię zapasową przed uruchomieniem tego polecenia. To napisze na miejscu.-strip
zrobił to dla mnie. Dziękimogrify -strip -quality 75% *.jpg
. Strip jest świetne. 0 utrata jakości i duże oszczędności miejsca. A jakość przy 75% jest ledwo odróżnialna od 100%, ale zajmuje połowę miejsca.Korzystam ze wskazówek dotyczących optymalizacji obrazu Google Pagespeed Insights , a dla ImageMagick zalecają:
-sampling-factor 4: 2: 0
-strip
-quality 85 [może się różnić, używam zakres 60-80, niższa liczba tutaj oznacza mniejszy plik]
-interlace
-colorspace RGB
Polecenie w ImageMagick:
Dzięki tym opcjom uzyskuję do 40% oszczędności rozmiaru JPEG bez widocznych strat.
źródło
Tylko dla tych, którzy używają klasy Imagick w PHP:
źródło
Kiedyś musiałem zmienić rozmiar zdjęć z aparatu w celu opracowania:
Komenda:
i nie widzę żadnych zmian na pełnym ekranie z moim monitorem o rozdzielczości 1920x1080. Rozdzielczość 2048 jest najlepsza do tworzenia zdjęć 10 cm przy maksymalnej jakości 360 dpi. Nie chcę tego rozbierać.
edycja: Zauważyłem, że uzyskuję nawet znacznie lepsze wyniki bez rozmycia. Bez rozmycia rozmiar pliku to 50% oryginału, ale jakość jest lepsza (podczas powiększania).
źródło
Dodałbym przydatną notatkę dodatkową i ogólną sugestię, aby zminimalizować JPG i PNG.
Przede wszystkim ImageMagick odczytuje (lub lepiej „zgadnij” ...) wejściowy poziom kompresji jpeg, więc jeśli w ogóle nie dodasz
-quality NN
, dane wyjściowe powinny używać tego samego poziomu co dane wejściowe. Czasami może być ważną funkcją. W przeciwnym razie domyślnym poziomem jest-quality 92
(patrz www.imagemagick.org )Sugestia dotyczy naprawdę niesamowitego bezpłatnego narzędzia ImageOptim , również do procesu wsadowego.
Możesz uzyskać mniejsze pliki jpg (i pngs, zwłaszcza po użyciu bezpłatnego ImageAlpha [nie proces wsadowy] lub darmowego Pngyu, jeśli potrzebujesz procesu wsadowego).
Nie tylko te narzędzia są przeznaczone dla komputerów Mac i Win oraz jako wiersz poleceń (sugeruję instalację przy użyciu Brew, a następnie wyszukiwanie w formułach Brew).
źródło
Dodałem
-adaptive-resize 60%
do sugerowanego polecenia, ale z-quality 60%
.To były moje wyniki
Nie jestem pewien, czy ta konwersja zbyt mocno niszczy mój obraz, ale szczerze mówiąc, nie sądziłem, że moja konwersja wyglądała jak gówno. To była panorama szerokokątna i nie dbałem o drobiazgową przeszkodę.
źródło
Zobacz poniższe łącza, w których w ImageMagick dostępna jest opcja określająca pożądany rozmiar pliku wyjściowego do zapisu w plikach JPG.
http://www.imagemagick.org/Usage/formats/#jpg_write http://www.imagemagick.org/script/command-line-options.php#define
-define jpeg:extent={size} As of IM v6.5.8-2 you can specify a maximum output filesize for the JPEG image. The size is specified with a suffix. For example "400kb".
Utracisz pewną jakość poprzez dekompresję i ponowną kompresję oprócz wszelkich strat spowodowanych obniżeniem wartości jakości na wejściu.
źródło
Czy trochę eksperymentowałem tutaj, a chłopak robi, że Gausowskie rozmycie robi coś całkiem innego. Ostatnim poleceniem, którego użyłem było:
mogrify * -sampling-factor 4: 2: 0 -strip -quality 88 -interlane Plane -define jpeg: dct-method = float -colorspace RGB -gaussian-blur 0,05
Bez rozmycia gausowskiego przy 0,05 było to około 261 kb, z tym było to około 171 kB dla obrazu, na którym testowałem. Różnica wizualna na monitorze 1440p z dużym złożonym obrazem jest zauważalna dopiero po przybliżeniu.
źródło
Oto kompletne rozwiązanie dla osób używających Imagick w PHP:
źródło
Jeśli obraz ma duże wymiary, trudno jest uzyskać dobre wyniki bez zmiany rozmiaru, poniżej znajduje się 60-procentowy rozmiar, który w większości przypadków nie niszczy zbyt dużej części obrazu.
Używam tego z dobrym wynikiem dla obrazów w skali szarości (konwertuję z PNG):
Używam tego do zeskanowanych stron czarno-białych, aby uzyskać obrazy w skali szarości (dodatkowe argumenty oczyszczają cienie z poprzednich stron):
Używam tego do kolorowych obrazów:
źródło