Narzędzia do optymalizacji JPEG? [Zamknięte]

114

Czy znasz jakieś narzędzia (najlepiej wiersz poleceń) do automatycznej i bezstratnej optymalizacji plików JPEG, które mógłbym zintegrować z naszym środowiskiem kompilacji? W przypadku plików PNG używam obecnie PNGOUT i generalnie oszczędza około 40% przepustowości / rozmiaru obrazu.

Przynajmniej chciałbym mieć narzędzie, które potrafi usunąć metadane z plików JPG - zauważyłem dziwny przypadek, w którym próbowałem zrobić miniaturę ze zdjęcia i nie mogłem uzyskać mniej niż 34 kB. Po dokładniejszym zbadaniu stwierdziłem, że dane EXIF ​​nadal były częścią obrazu, a miniatura miała 3 kB po usunięciu metadanych.

A poza tym - czy można bezstratnie dalej optymalizować pliki JPG? Optymalizator PNG próbuje różnych strategii kompresji, losowej inicjalizacji kodowania Huffmanna itp.

Zdaję sobie sprawę, że większość oszczędności pochodzi z parametru jakości JPEG i że jest to raczej subiektywna miara. Szukam tylko narzędzia, które można uruchomić jako krok kompilacji i które bezstratnie wyciska kilka bajtów z obrazów.

chris166
źródło
Mówisz, że w zoptymalizowanym pliku JPG było około 10 KB EXIF ​​przed usunięciem EXIF?!?!?! Ciekawe, co w tym jest!
netrox
To był cały blok EXIF ​​z aparatu cyfrowego, w tym każdy najdrobniejszy szczegół tego zdjęcia (ekspozycja, czas migawki itp.)
chris166
@netrox chris166 Te szczegóły nie zajmują dużo miejsca, dużo miejsca zajmują podglądy (dane binarne).
Ariel
1
Dwa interesujące artykuły porównawcze, w których wymieniono narzędzia wymienione poniżej: Porównanie narzędzi do bezstratnej kompresji plików JPEG, czerwiec 2014 ; Test porównawczy narzędzi optymalizacji JPEG, luty 2013 .
dma_k
@Ariel: Profil ICC również zajmuje dużo miejsca. Widziałem ponad 500 KB danych binarnych profilu ICC.
saurabheights

Odpowiedzi:

68

Używam libjpeg do operacji bezstratnych. Zawiera narzędzie wiersza poleceń jpegtran, które może zrobić wszystko, co chcesz. Dzięki opcji wiersza poleceń -copy nonewszystkie metadane są usuwane i -optimizedokonuje bezstratnej optymalizacji kompresji Huffmanna. Możesz także konwertować obrazy do trybu progresywnego -progressive, ale może to powodować problemy ze zgodnością (czy ktoś wie o tym więcej?)

OutOfMemory
źródło
5
Wow, to brzmi obiecująco. Jeśli ktoś jest zainteresowany, pobieranie dla Windows jest na gnuwin32.sourceforge.net/packages/jpeg.htm
chris166
Idę po ten. Zmniejsza mój obraz tła z 62 kB do 49 kB w trybie progresywnym. Kolejny obraz (27 kB) został zredukowany do 23 kB. To 15-20% oszczędności bez utraty jakości!
chris166
2
Progresywny działa dobrze w zasadzie we wszystkim, jedyną wadą jest to, że używa więcej procesora do dekodowania (za mało, aby mieć znaczenie).
Ariel
1
progresywny często może być większy niż wartość bazowa dla plików mniejszych niż 9k
Collin Anderson,
3
Progresywny potrzebuje dużo więcej pamięci do dekodowania. Zwykłe pliki JPEG można przesyłać strumieniowo: wystarczy dekodować w małych sekcjach. Aby zdekodować progresywny plik JPG, musisz jednocześnie przechowywać w pamięci cały rozpakowany obraz.
jcupitt,
72

Napisałem GUI dla wszystkich narzędzi do optymalizacji obrazu, jakie mogłem znaleźć , w tym MozJPEG i jpegoptimktóre optymalizują tabele Huffmana, skanowanie progresywne i (opcjonalnie) usuwają niewidoczne metadane.

ImageOptim miażdży to

Jeśli nie masz Maca, mam również podstawowy interfejs internetowy, który działa na każdej platformie.

Kornel
źródło
5
Doskonały! Ty, sir, potrzebujesz przycisku Flattr. Lub dołącz do Gittip.
Thilo,
2
ImageOptim i ImageAlpha są świetne!
Jon z
Świetne narzędzie - drobna sugestia. Po co ograniczać JPEGoptim do jakości 80% - duże obrazy tła często chcesz osiągnąć 60% lub nawet niżej. thx
niico
po co usuwać dane EXIF? : /
Adrien Be
@AdrienBe 1. Prywatność. Możesz nie chcieć, aby wszyscy w sieci znali Twoją lokalizację GPS. 2. ponieważ w plikach zapisanych z Photoshopa mogą być osadzone megabajty śmieci XML.
Kornel,
12

[TYLKO WINDOWS]

RIOT (Radical Image Optimization Tool) To najlepsze narzędzie do optymalizacji obrazu, jakie znalazłem!

http://luci.criosweb.ro/riot/

Możesz łatwo uzyskać obraz o wielkości 10 MB do 800 KB poprzez podpróbkowanie. Obsługuje formaty PNG, GIF i JPEG. Integruje się nawet z menu kontekstowymi, dzięki czemu możesz bezpośrednio wysyłać zdjęcia. Umożliwia obracanie, zmianę rozmiaru, kompresję do określonych KB i nie tylko. Ma również wtyczki do GIMP i IrfanView i innych rzeczy.

Dostępna jest również biblioteka DLL, jeśli chcesz ją włączyć do własnych programów lub skryptu Java / programu C ++.

Inną alternatywą jest http://pnggauntlet.com/ PNGGAUNTLET trwa wieczność, ale robi całkiem niezłą robotę.

[TYLKO WINDOWS]

Ben
źródło
7
Ostrzeżenie: RIOT wygląda dobrze, ale instaluje TuneUp i gówno bez pytania, .. sklasyfikowałbym to jako złośliwe oprogramowanie.
Daniel W.,
1
@DanFromGermany ma rację. Zobacz recenzje tutaj: download.cnet.com/RIOT/3000-12511_4-10911908.html#summaryList
RNickMcCandless
1
Nigdy tak nie było, aż do niedawna.
Ben
Ostrzeżenie o złośliwym oprogramowaniu! Menedżer pobierania Chrome ostrzega, że ​​RIOT to złośliwe oprogramowanie
ruhong
8
FYI: Istnieje przenośny plik .zip dla RIOT, który nie zawiera żadnego złośliwego oprogramowania ani żadnego instalatora. Po prostu przewiń w dół na ich stronie pobierania. luci.criosweb.ro/riot/download
Goyuix
12

Nowa usługa o nazwie JPEGmini daje niesamowite rezultaty. Szkoda, że ​​jest tylko online. Edycja : jest teraz dostępna dla systemów Windows i Mac

Eduardo Molteni
źródło
Mamy teraz dostępną aplikację na Maca (ujawnienie: jestem w zespole programistów)
DanJ,
4
Nie wiem, czy jesteś autorem, czy nie, ale ta aplikacja wprowadza użytkowników w błąd. Jeśli uruchomisz jpegquality.c na ich „mini” obrazach, aby wykryć stopień kompresji, a następnie skompresujesz oryginały za pomocą imagemagick z tą samą jakością => otrzymasz te same wyniki, te same artefakty JPEG na obu obrazach. ImageMagick może być open source, ale to nie czyni to z niego korzystać ok a potem twierdzisz, opracowała nową technologię kompresji
nice ass
@onetrickpony: Nie jestem z nimi w żaden sposób powiązany.
Eduardo Molteni
@niceass Skąd wiesz, że JPEGmini używa kodu ImageMagick? Znajomość współczynnika jakości jest taka sama, jak wynik z komunikatora internetowego nie jest dowodem. Domyślam się, że ponownie kompresują obraz, zmniejszając czynniki jakościowe, być może przy odrobinie filtrowania, i używają pewnych mierników jakości, aby zdecydować, kiedy przestać.
koan
Uruchomiłem najnowszą JPEGmini na obrazie, który wcześniej wyeksportowałem z ImageMagick i zgłoszono, że JPEGmini był już na nim uruchomiony - czego nie pamiętam. Uruchomienie jpegtran -optimize -copy none na tym samym obrazie zmniejszyło rozmiar o 12 KB.
koan
10

Wypróbowałem szereg sugestii powyżej - osobiście byłem po bezstratnej kompresji.

Mój przykładowy obraz miał oryginalny rozmiar 67 737 bajtów.

Korzystając z kraken.io, spadł do 64 718 Używając jpegtran, spadł do 64 718 Używając yahoo smush-it, spadł do 61 746 Używając imagemagick (-strip), spadł do 65 312

Opcja smush.py wygląda obiecująco, ale instalacja była dla mnie zbyt skomplikowana, aby wykonać ją szybko

jpegrescan też wygląda obiecująco, ale wygląda na to, że jest to unix i używam okien

jpegmini NIE jest bezstratne, ale nie potrafię odróżnić (do 22172)

Aplikacja jpegstripper Altrasoft cokołu nie działa w moim systemie Windows 7

jpegoptim to nie okna - nie jest dla mnie dobre

Riot (utrzymując jakość na 100%) obniżył to do 63416, a przy podpróbkowaniu barwy ustawionym na wysokim poziomie, spadło do 61 912 - nie wiem, czy to jest bezstratne, czy nie, i myślę, że wygląda jaśniej niż oryginał .

Więc mój werdykt jest bzdurny, jeśli musi być bezstratny

Graham Butcher
źródło
jpegrescan działa w systemie Windows, jeśli jesteś uparty. Obniża rozmiar jak magia (5-15% bez utraty jakości), co jest niesamowite, ponieważ po prostu zmienia kolejność skanowania progresywnego w kolejności AFAIK (możesz zauważyć to samo w innych programach, pliki czasami stają się nieznacznie mniejsze w Photoshopie jeśli wybierzesz inną liczbę skanów, bez wyraźnego powodu). Został również wykonany przez jednego z facetów, który stworzył x264, jest cudownym dzieckiem w dziedzinie kompresji.
Camilo Martin
7

ImageOptim jest naprawdę zgrabny. Opcja wiersza poleceń opublikowana przez autora wypełni GUI i pokaże postęp. Użyłem jpegtran do optymalizacji i konwersji na progresywny, a następnie ImageOptim do dalszej progresywnej optymalizacji i do innych typów plików.

Ponowne użycie kodu skryptu również można znaleźć na tym forum (wszystkie pliki zastąpione na miejscu):

jpegtran

for file in $(find $DIR -type f \( -name "*.jpg" -or -name "*.jpeg" -or -name "*.JPG" \)); do
    echo found $file for optimizing...
    jpegtran -copy comments -optimize -progressive -outfile $file $file
done

ImageOptim

for file in $(find $DIR -type f \( -name "*.jpg" -or -name "*.png" -or -name "*.gif" \)); do
do
    echo found $file for optimizing...
    open -a ImageOptim.app $file
done
bsy-web
źródło
4

Na wypadek, gdyby ktoś szukał, napisałem wersję offline Yahoo's Smush.it. Bezstratnie zoptymalizuje png, jpg i gify (animowane i statyczne):

http://github.com/thebeansgroup/smush.py

Timmy
źródło
Działa dobrze, ale jest problem z kompresją png :(
4

Możesz użyć jpegoptim, który domyślnie bezstratnie optymalizuje pliki jpeg. --strip-allOpcja usuwa wszystkie dodatkowo wbudowany info. Za pomocą --maxprzełącznika można również określić tryb stratny, co jest przydatne, gdy mamy zapisane obrazy z ustawieniem bardzo wysokiej jakości, co nie jest konieczne np. zawartość sieci.

Otrzymujesz podobną optymalizację jak w przypadku jpegtran (patrz odpowiedź OutOfMemory), ale jpegoptim nie może zapisywać do progresywnych jpegów.

niebiesko szary
źródło
4

Napisałem narzędzie wiersza poleceń o nazwie „picopt” (podobne do ImageOptim), które wykorzystuje zewnętrzne programy do optymalizacji plików JPEG, PNG, GIFS, animowanych GIFS, a nawet zawartości archiwum komiksów (CBR / CBZ).

Jest to odpowiednie do użytku z homebrew w systemach OS X lub Linux, w których zainstalowałeś narzędzia takie jak jpegrescan, jpegtran, optipng, gifsicle itp.

https://github.com/ajslater/picopt

AJ Slater
źródło
Czy jest to wersja dla systemu Windows?
starbeamrainbowlabs
jeśli możesz zainstalować jego zależności posix w środowisku Windows, takim jak cygwin, może. Byłbyś jednak pierwszym, który to przetestował.
AJ Slater
3

Ja też poleciłbym ImageMagick . Posiada opcję wiersza poleceń do usuwania metadanych EXIF

mogrify -strip image.jpg

Istnieje wiele innych narzędzi, które robią to samo.

Jeśli chodzi o rekompresję plików JPEG, nie rób tego. Pliki JPEG są stratne na początku, więc każda forma rekompresji może tylko pogorszyć jakość obrazu. Jeśli jednak masz bezstratnie zakodowane obrazy, niektóre kodery działają lepiej niż inne. Zauważyłem, że pliki JPEG wykonane w Photoshopie konsekwentnie wyglądają lepiej niż po zakodowaniu w ImageMagick (pomimo tego samego rozmiaru pliku) ze skomplikowanych powodów . Co więcej (i to jest dla ciebie istotne), wiem, że przynajmniej Photoshop może zapisywać pliki JPEG jako zoptymalizowane, co oznacza, że ​​tracą kompatybilność z niektórymi rzeczami, o których prawdopodobnie nie dbasz, aby zaoszczędzić kilka KB. Upewnij się również, że nie masz osadzonych żadnych profili kolorów i być może uda Ci się zapisać kolejne kilka KB.

David Johnstone
źródło
Ciekawy. Zawsze myślałem, że jakość 90% jest taka sama we wszystkich narzędziach graficznych. Czy Photoshop jest jedynym narzędziem używającym zoptymalizowanych współczynników DCT?
chris166
1
Myślałem, że 90% będzie takie samo w różnych narzędziach, dopóki nie spróbowałem zapisać tych samych obrazów w Photoshopie i Imagemagick. Zauważyłem, że około 70% w Save for Web w Photoshopie tworzyło pliki o rozmiarze mniej więcej 92% w Imagemagick, ale pliki Photoshopa były zauważalnie lepszej jakości. Nie mam pojęcia, jak robią to inne narzędzia.
David Johnstone,
Czy wiesz, jak wykonać usuwanie metadanych EXIF ​​przy użyciu wersji PHP ImageMagick?
Sonny
@Sonny Niezupełnie, ale możesz być zainteresowany tą funkcją: php.net/manual/en/function.imagick-stripimage.php
David Johnstone
Dzięki David, właśnie to znalazłem. Oto mój wątek: stackoverflow.com/questions/2540068
Sonny
2

Poleciłbym użycie http://kraken.io Jest to ultraszybka aplikacja internetowa, która zoptymalizuje pliki PNG i JPEG znacznie lepiej niż smush.it.

Pono
źródło
2

Polecam użyć JpegOptim, jest darmowy i naprawdę fajny, możesz określić jakość, żądany rozmiar ... I łatwy w użyciu w linii poleceń.

JpegOptim

agonista_
źródło
1

Mogę polecić to dla prawie przejrzystości:

convert 'yourfile.png' ppm:- | jpeg-recompress -t 97 -q veryhigh -a -m smallfry -s -r -S disable - yourfile.jpg

Wykorzystuje ImageMagick „s converti jpeg-recompressz JPEG archiwum .

Oba są typu open source i działają w systemach Windows, Mac i Linux. Możesz dostosować powyższe opcje dla różnych oczekiwań dotyczących jakości.

Camilo Martin
źródło