Só para verificar, deixe-me testar a análise da ForeverWintr experimentalmente.
O pior tipo de imagem de entrada para compressão JPEG (ou qualquer compressão, na verdade) é o ruído RGB uniformemente aleatório, que é teoricamente incompressível. Então, deixe-me gerar algumas usando as ferramentas netpbm :
$ rawtoppm < /dev/urandom 640 480 > rnd.ppm
$ pnmtopng < rnd.ppm > rnd.png
$ du -b rnd.*
923772 rnd.png
921615 rnd.ppm
(RuídoRGBuniformementealeatório,formatoPNGsemperdas,903kb)
Note(March2017):I'mfairlysuretheimageabovewasinPNGformatwhenIfirstwrotethisansweranduploadeditbackin2013.(There'sevenacommentaboutcolormanagementbelowthatstronglyimpliesthis.)Unfortunately,itwouldseemthatithasbeensilentlyconvertedintoJPEGatsomepoint,makingthevisualcomparisonhereuseless.
I'vetriedtoreuploadanewPNGtestimage,butapparentlyithitssomekindofanarbitraryPNGfilesizelimitatimgurandgetsauto-convertedtoJPEG.I'mnotsureifthere'sanywayaroundthisissue,butatleastifyouhaveaccesstoaLinuxbox,youcanalwaysre-runthegivencommandstogenerateyourowntestimages.Inanycase,otherthanpreventingdirectvisualcomparisonofthecompressionquality,thisdoesnotinvalidatetheanalysisbelowinanyway.
OK,oarquivoPPMdescompactadotem640×480×3=921.600bytes,mais15bytesparaocabeçalhoPPMmínimo,exatamentecomoesperado.Tentarcompactá-losemperdasusandooformatoPNGacabaaumentandootamanhoem2157bytes,presumivelmenteabsorvidosporcabeçalhosemetadadosPNGe,possivelmente,porumapequenaineficiêncianoalgoritmodecompactaçãoquetentacompactardadosincompressíveis.
(Sim,são3bytesporpixel,não4;atéoformatoPPM,queétãosimplesquantoumformatodearquivográficopodeobter,nãoéburroosuficienteparaarmazenarumquartobyteporpixelnodisco.podeteralgumavantagememfazerissoporrazõesdealinhamento,especialmentesevocêtambémprecisararmazenarumcanalalfa,masessasrazõesnãoseaplicamaoescreveraimagemparaumarquivo.)
OK,eoJPEG?Vamostentarminimizarasperdasdecompressãoprimeiro(qualidade=100,semsubamostragemdecroma,DCTdepontoflutuante).Infelizmente,o pnmtojpeg
manual não explica claramente como definir todas as opções relevantes (especificamente, a% A opção-sample
está listada na seção "Opções para assistentes", que apenas faz referência a um arquivo na documentação do libjpeg), portanto, eu o converterei no GIMP. O arquivo resultante é assim:
897249 rnd.jpg
(ruídoRGBcompactadoemJPEG,qualidade=100,semsubamostragemdecroma,876kb)
Oque,comopodesermenor?Eunãoacabeidedizerqueoruídopuroeraincompressível?Bem,acoisaéque,mesmocomamáximaqualidade,acompressãoJPEGnormalnãoébastantesemperdas.ReabrindoaimagemnoGIMPecomparando-acomooriginal,pode-severquealgunspixelstiveramseusvaloresdecoralteradosporumoudoispassos(de256).EssessãoospixelsemqueoalgoritmodecompressãoJPEG"traiu" e jogou fora um pouco aqui, outro lá, onde estimou que a mudança não seria perceptível. De fato, para o olho humano sem ajuda, o resultado é indistinguível do original, mas esses bits descartados se somam a uma redução mensurável no tamanho do arquivo, mesmo depois de contabilizar o cabeçalho e a sobrecarga de codificação.
Então essa foi a qualidade máxima; E quanto às configurações mais comuns, como pnmtojpeg
defaults (qualidade = 75, subamostragem ativada)? Vamos tentar:
$ pnmtojpeg < rnd.ppm > rnd2.jpg
$ du -b rnd2.jpg
185128 rnd2.jpg
(ruído RGB compactado em JPEG, qualidade = 75, subamostragem de croma, 184 kb)
Uau, de 901 para 184 kb! Isso é uma compressão bastante agressiva, e você definitivamente pode dizer a diferença ao comparar as imagens de perto. A maioria é por causa da subamostragem de croma, que basicamente joga fora 75% dos dados de cor (matiz / saturação). Tentá-lo no GIMP com subamostragem desativada fornece um arquivo de 350.618 bytes que ainda parece (ao olho humano, pelo menos) muito próximo do original, mesmo quando ampliado.
De qualquer forma, o objetivo de tudo isso é demonstrar que, não importa quão barulhentas sejam suas fotos no céu noturno, e não importa quão alta seja a qualidade que você possa selecionar, não há nenhuma maneira a 640 × 480 arquivo JPEG pode obter significativamente maior que 900 kb. (Bem, a menos que sua câmera tenha anexado um perfil de cor Exif de vários megabytes a ele ou algo igualmente estúpido.) E se você estiver usando configurações de compactação JPEG mais típicas, o tamanho de arquivo máximo plausível diminui para cerca de 200 kb .