Odpowiedzi:
Możesz, ale tylko wtedy, gdy przeglądarka JPEG obsługuje rozszerzenie JPEG SmartScale . jpegtran może to zrobić dla rozmiarów N / 8, przy N = 1..16. Zasadniczo rozmiar bloku DCT zmienia się z 8x8 na coś innego podczas rekompresji (np. 4x4), co skutecznie skaluje obraz.
Uwaga: SmartScale został wprowadzony w wersji 8 biblioteki libjpeg, ale nie jest szeroko obsługiwany przez przeglądających.
Dokument opisujący szczegółowe zmiany można znaleźć tutaj: Ewolucja JPEG .
EDYCJA: Wygląda na to, że większość widzów nie jest w stanie wyświetlić tych obrazów, ponieważ są one oparte na libjpeg-turbo. A libjpeg-turbo zdecydowało się nie implementować tej funkcji . W rzeczywistości wypróbowałem sporo programów (na Ubuntu 14.04 i Windows 8) i żaden nie był w stanie wyświetlić zmniejszonego obrazu utworzonego za pomocą jpegtrans. Nawet Photoshop, IrfanView i GIMP zawiodły.
EDYCJA 2: W rzeczywistości Ubuntu i Fedora nawet nie dostarczają biblioteki libjpeg8, ale całkowicie zastępują ją wersją libjpeg-turbo. Dlatego żaden z programów nie będzie w stanie odczytać plików JPEG SmartScale, z wyjątkiem kilku plików binarnych, które są statycznie powiązane z oryginalną biblioteką libjpeg8.
Krótka odpowiedź brzmi: nie. Obraz JPEG wykorzystuje kompresję, co oznacza, że każdy bajt wyjściowy zależy od wszystkich pozostałych. Jeśli zmienisz liczbę bajtów obrazu, musisz rozpakować i ponownie skompresować.
W wyniku rekompresji nastąpi utrata jakości, ponieważ JPEG stosuje kompresję stratną, ale i tak tracisz jakość, dzieląc rozdzielczość na ćwiartki. Możesz uzyskać najlepszą możliwą jakość obrazu o niskiej rozdzielczości, zwiększając poziom jakości JPEG podczas ponownej kompresji, choć oczywiście zwiększy to rozmiar pliku.
Jeśli dużo pracujesz z obrazami, najlepiej pracować w formacie bezstratnej kompresji, takim jak PNG, konwertując na JPEG tylko po sfinalizowaniu obrazów, oczywiście pod warunkiem, że masz dodatkowe miejsce na dysku.