“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 ;].