Zalecenie kompresji plików JPG za pomocą ImageMagick
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 ustawieniu jakości mogę uzyskać mniejszy rozmiar, ale nadal podobny do oryginału.
Obraz wejściowy to 255kb, przetworzony obraz to 264kb (używając +profile do usuwania profili i ustawiając jakość na 70%). Czy da się skompresować Ten obraz przynajmniej do 150kb? Czy to możliwe? Jakich opcji ImageMagick mogę użyć?
9 answers
Używam zawsze:
- jakość w 85
- progressive (kompresja)
- bardzo małe Rozmycie gaussowskie w celu optymalizacji rozmiaru (0,05 lub 0,5 promienia) zależy od jakości i rozmiaru obrazu, co szczególnie optymalizuje rozmiar jpeg.
- Usuń dowolny komentarz lub znacznik exif
W imagemagick powinno być
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 85% source.jpg result.jpg
Mam nadzieję, że się przyda.
Link źródłowy: http://www.yuiblog.com/blog/2008/12/05/imageopt-4/
Od @Fordi w komentarzach (nie zapomnij kciuka w jego komentarz, jeśli chcesz):
Jeśli nie lubisz rozmycia, użyj -sampling-factor 4:2:0
. Powoduje to zmniejszenie rozdzielczości kanału chroma do połowy, bez mieszania z rozdzielczością luminancji, którą przyciągają oczy. Jeśli chcesz uzyskać lepszą wierność konwersji, możesz uzyskać niewielką poprawę bez zwiększania rozmiaru pliku, podając -define jpeg:dct-method=float
- to znaczy, użyj dokładniejszej zmiennoprzecinkowej dyskretnej transformacji cosinusowej, zamiast domyślnej szybkiej wersja integer.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-06 19:13:19
Używam Google Pagespeed Insights wytyczne optymalizacji obrazu, a dla ImageMagick zalecają:
- współczynnik próbkowania 4:2:0
- pasek
- jakość 85 [może się różnić, używam zakresu 60-80]
- przeplot
-colorspace RGB
Polecenie w ImageMagick:
convert image.jpg -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB image_converted.jpg
Dzięki tym opcjom uzyskuję do 40% oszczędności w FORMACIE JPEG bez większych widocznych strat.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-26 19:09:35
Tylko dla tych, którzy używają klasy Imagick w PHP:
$im -> gaussianBlurImage(0.8, 10); //blur
$im -> setImageCompressionQuality(85); //set compress quality to 85
Kiedyś musiałem zmienić rozmiar zdjęć z aparatu do tworzenia:
- oryginalny Rozmiar pliku: 2800 kB
- rozdzielczość: 3264x2448
Polecenie:
mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05
- Result filesize 753 kB
- rozdzielczość 2048x2048
I nie widzę żadnych zmian w trybie pełnoekranowym z moim monitorem o Rozdzielczości 1920x1080. Rozdzielczość 2048 jest najlepsza do tworzenia zdjęć 10 cm przy maksymalnej jakości 360 dpi. Nie chcę go rozebrać.
Edit: zauważyłem, że nawet dostaję znacznie lepsze wyniki bez rozmycia. Bez rozmycia Rozmiar pliku jest 50% oryginału, ale jakość jest lepsza (przy powiększaniu).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-27 18:22:09
Dodałbym przydatną notatkę i ogólną sugestię, aby zminimalizować JPG i PNG.
Po pierwsze, ImageMagick czyta (lub lepiej "Zgadnij" ...) wejściowego poziomu kompresji jpeg, więc jeśli w ogóle nie dodasz -quality NN
, wyjście powinno używać tego samego poziomu co wejście. Czasami może być ważną cechą. W przeciwnym razie domyślnym poziomem jest -quality 92
(Zobacz www.imagemagick.org )
Sugestia dotyczy naprawdę niesamowitego darmowego narzędzia ImageOptim, również dla procesu wsadowego.
Możesz uzyskać mniejsze pliki JPG (i PNG, szczególnie po użyciu wolnego ImageAlpha [nie proces wsadowy] lub wolnego Pngyu jeśli potrzebujesz procesu wsadowego).
Nie tylko, te narzędzia są dla Mac i Win i jako wiersz poleceń(sugeruję zainstalowanie za pomocą Brew, a następnie wyszukiwanie w formułach Brew).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-07 05:37:32
Dodałem -adaptive-resize 60%
do sugerowanego polecenia, ale z -quality 60%
.
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 60% -adaptive-resize 60% img_original.jpg img_resize.jpg
To były moje wyniki
- img_original.jpg = 13 913 KB
- img_resized.jpg = 845KB
Nie jestem pewien, czy ta konwersja za bardzo niszczy mój obraz, ale szczerze mówiąc nie sądziłem, że moja konwersja wygląda jak gówno. To była Panorama szerokokątna i nie dbałem o drobiazgową przeszkodę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 00:36:59
Oto kompletne rozwiązanie dla osób korzystających z Imagick w PHP:
$im = new \Imagick($filePath);
$im->setImageCompression(\Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(85);
$im->stripImage();
$im->setInterlaceScheme(\Imagick::INTERLACE_PLANE);
// Try between 0 or 5 radius. If you find radius of 5
// produces too blurry pictures decrease to 0 until you
// find a good balance between size and quality.
$im->gaussianBlurImage(0.05, 5);
// Include this part if you also want to specify a maximum size for the images
$size = $im->getImageGeometry();
$maxWidth = 1920;
$maxHeight = 1080;
// ----------
// | |
// ----------
if($size['width'] >= $size['height']){
if($size['width'] > $maxWidth){
$im->resizeImage($maxWidth, 0, \Imagick::FILTER_LANCZOS, 1);
}
}
// ------
// | |
// | |
// | |
// | |
// ------
else{
if($size['height'] > $maxHeight){
$im->resizeImage(0, $maxHeight, \Imagick::FILTER_LANCZOS, 1);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 13:30:42
Czy trochę eksperymentować tutaj i boy robi, że Gausian rozmycie zrobić ładny inny. Ostatnią komendą, której użyłem było:
Mogrify * - sampling-factor 4:2: 0-strip-quality 88-interlace Plane-define jpeg:DCT-method=float-colorspace RGB-gaussian-blur 0.05
Bez rozmycia Gausiego przy 0.05 było to około 261kb, z nim było to około 171kb dla obrazu, na którym testowałem. Różnica wizualna na monitorze 1440p z dużym złożonym obrazem nie jest zauważalna, dopóki / align = "left" /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 12:02:00
@JavisPerez -- czy jest jakiś sposób, aby skompresować Ten obraz przynajmniej do 150KB? Czy to możliwe? Jakich opcji ImageMagick mogę użyć?
Zobacz następujące linki, gdzie istnieje opcja w ImageMagick, aby określić żądany rozmiar pliku wyjściowego do zapisu do plików 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".
convert image.jpg -define jpeg:extent=150kb result.jpg
You will lose some jakość poprzez dekompresję i rekompresję oprócz wszelkich strat spowodowanych obniżeniem wartości jakości z wejścia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 01:42:52