Dlaczego powinieneś włączyć kompresję obrazków na swoim serwerze
“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 ;].