04.22
“Kompresowanie obrazków ? Przecież to bez sensu, obrazki już są kompresowane przez sam format jpg/gif/png, to nie ma sensu. No chyba że udostępniasz BMP/TIFFy ;>”. Cóż, też tak myślałem ;]
<- zgadnij ile zajmuje ten obrazek ? 30×30 px no ile może zajmować, 1-2kb ? Nie, 52 kB (kudos for aNeutrino za znalezienie tego :) ). Że niby co ?. Ano (niektóre) nowoczesne programy nie traktują już obrazków jako rzeczy gdzie przechowuje się piksele ;>
Proponuję popatrzeć w środek tego pliku. Po otworzeniu dowolnym edytorem tekstowym, oprócz binarnych krzaczków ukazuje nam się “dodatkowa” treść (wyciąłem co nieciekawe):
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2-c020 1.124078, Tue Sep 11 2007 23:21:40 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/" tiff:Make="Apple" tiff:Model="iPhone 3GS" ... exif:GPSLatitude=52,23.37N" exif:GPSLongitude="16,47.48E" exif:GPSAltitudeRef="0" exif:GPSAltitude="147/1" exif:GPSTimeStamp="2010-04-16T20:29:09.05Z" exif:GPSDOP="3/1" exif:GPSImgDirectionRef="T" exif:GPSImgDirection="12811/480" ....
“Aaaaa, no tak, EXIF i reszta tego crapu”, ale to jeszcze nie koniec, po przeszukaniu paru innych plików trafiłem na wpisy podobne do tych (dane zmienione z oczywistych powodów):
<Iptc4xmpCore:CreatorContactInfo Iptc4xmpCore:CiAdrCtry="Poland" xmpCore:CiEmailWork="chomik@chomikowicz.pl" Iptc4xmpCore:CiAdrCity="Gda\305\204sk" Iptc4xmpCore:CiUrlWork="chomikowicz.pl"/>
Oprócz tego często spotykałem się z “toną spacji”, prawdopodobnie jako sposób na zajęcie sobie miejsca na ew. dodatkowe metadane (żeby nie trzeba było rewritować pliku za każdym razem). Z innych ciekawszych rzeczy jakie znalazłem to kawałek Applowego crapu który wygląda jaby określał wielkości papieru i sposób drukowania (to co dodaje Adobe jeszcze można zrozumieć ale shit od appla to już przesada, w dodatku w najgorszym formacie w historii, plist), dla ciekawskich oto obrazek:
![]()
Oprócz tego że to oczywisty wyciek danych (ale to materiał raczej dla niebezpiecznika, w końcu jak głupi luzer wysłał w internet to jego wina ;] ) to takie miniaturki niepotrzebnie żrą pasmo, miejsce i co ważniejsze czas ładowania strony. Metadane “przeżywają” też resize i dzięki temu “miniaturka” obrazka potrafi zajmować 30-50k ( mirror głównej strony blip.pl daje zawsze parę takich). Niby “co tam, to tylko parę kb” i rzeczywiście w większości przypadków to “nie boli”, ale w przypadku rzeczy typu “galeria miniatur” okazuje się że nagle przeglądarka ściąga 2x więcej niż powinna. A teraz co można z tym zrobić ? Są dwa sposoby:
1. Kompresja obrazków – w domyślnym configu serwerów HTTP kompresja obrazków włączana jest dla tekstowych typow, takich jak css, html czy js, więc będziesz musiał dodać image/jpg(gif,png) do kompresowanych typów. Oczywiście wiąże się to z większym obciążeniem serwera przez kompresję
2. Wywalenie metacrapu przed zapisem – to tylko jak masz dostęp do kodu i/lub programistów appa pod ręką, w Imagemagick (chyba najczęściej używany program do wypluwania miniaturek) jest taka magiczna komenda strip która robi właśnie to. O ile dla dużych obrazków nie ma to aż takiego sensu (bo może ktoś chce sobie podejrzeć np. jakim aparatem/obiektywem było robione to zdjęcie), to dla miniaturek jak najbardziej. Przy czym jak dokładnie się będzie nazywać komenda to zależy już od liba jakiego używasz, w większości języków jest to po prostu strip, ale np. w phpie jest to “Imagick::stripImage“. Albo po prostu z shella mogrify -strip obrazek.jpg
Kiedyś, w dawnych czasach były uniwersalne prawdy, takie jak “jpgów się nie zipuje, bo to nic nie daje” albo “nie można zawirusować się obrazkiem, przecież nic się nie wykonuje”, ale w IT wszystko jest możliwe (były viry wykorzystujące luki w bibliotekach parsujących obrazki, ktoś tu czy tam nie sprawdził wielkości pola i voila, można dodawać wirusy do obrazka ;]), nic dziwnego że niektóry postrzegają komputery jako “czarną magię”. Dzisiejsze pisanie jednolinijkowców w shellu/perlu jest odpowiednikiem rzucania zaklęć, niektóre rzeczy powinny być oznaczane tabliczką “tu żyją smoki” a inne wygladają jaby były pisane przez bandę orków ;].


7 ResponsesLeave a comment ?
Cóż, najpopularniejsze explity konsolowe to te wykorzystujące TIFF ;)
Wiele programów graficznych pozwala zapisywać lub eksportować grafiki “do sieci”, w tym usuwać zbędne metadane, optymalizować paletę kolorów i kompresować obrazek.
W czym problem?
A co dokładnie doprowadziło Cię do wnoisku że typowy userek używa takich opcji do wrzucenia zdjęcia z wakacji albo “słitaśniej foty” ? Większość nie wie o isntnieniu opcji “Zapisz jako” a tym bardziej “Save to Web”, zakładając że wogóle używają programu który to umożliwia i że program którego używają rzeczywiście wycina tagi (nie każdy ma photoshopa)
I właśnie ci nie wiedzący i nie używających takich opcji w popularnych programach graficznych będą wiedzieć jak włączyć kompresję obrazków po stronie serwera?
Dobry żart, zawłaszcza w kontekście ostatniego akapitu o czarnej magii i smokach ;)
Eeeee ale kompresja obrazków po stronie serwera jest właczana po stronie serwera, przez admina, obrazki zawierające sporo metacrapu są wysyłane przez usera, nie przez admina.
Czy Ty wogóle rozumiesz o co chodzi ?
-User wysyła obrazek z metadanymi (np. zdjęcie)
-Serwer zapisuje ten obrazek + miniaturki
-Serwer serwuje zapisane obrazki innym userom.
Nie masz wpływy na to co user Ci wysyła, oraz userzy nie wysyłają zwykle zdjęć używając “save to web”, masz natomiast kontrolę nad tym co robi serwer więc możesz albo obcinać metadane przy odbieraniu, albo wysyłać je skompresowane (gdy np. nie możesz zmodyfikować aplikacji)
W przypadku obrazków normalnej wielkości nie daje to wiele, ale gdy wyświetlasz galerię miniaturek może to spodowować że strona będzie się ładowała 2x szybciej, zwłaszcza na wolniejszych łączach.
“Na swoim serwerze” to większość Twoich czytelników ma WordPressa, a nie portal typu Nasza-Klasa ;) więc nie przesadzałbym z tą sensownością kompresowania obrazków po stronie serwera.
jako tak jest wskazana i dobra, w tym konkretnym przypadku chyba mocna naciągana.
I tak i nie. Zależy jakie masz łącze (chociaż tego hostingi raczej nie limitują, tylko total bandwidth) i jeżeli na swoim “wordpressie” masz np. galerie fotograficzna + podgląd miniaturek, to 2-3 krotne zmniejszenie tych miniaturek przyśpieszy ładowanie strony.
Niby można polemizowac że nie każdy ma takie żałosne łącze jak moje (1 MBit), ale znowu coraz więcej ludzi używa internetu przez telefon.
Zresztą, jak się ma swój serwer z wordpressem to można po prostu przepuścic obrazki przez imagemagicka i obciąć metadane. Lub uzyć wspomnianego wcześniej “save to web”