O Dropbox lançou recentemente o Lepton ( GitHub ), um método que comprime sem perdas imagens JPEG de ida e volta, economizando uma média de 22%.
Por causa do princípio pigeonhole , não é possível garantir que qualquer algoritmo de compactação geral resulte em um arquivo menor ( geral porque não se aplica a entradas restritas a um formato específico). O Lepton explora características comuns sobre os JPEGs que, se subvertidos, podem criar um arquivo maior que a fonte.
Exigências
Escreva um programa que gere:
- Uma imagem JPEG / JFIF válida,
- com um tamanho entre 0,5 MB e 1 MB,
- não menor que 256 × 256 px,
- não maior que 4096 × 4096 px,
- reconhecível por Lepton (pode "compactar" com êxito uma
.lep
imagem) e - descompacta para um idêntico
.jpg
(como a entrada). APPx
,COM
, E outros metadados, secções marcadores não-gráficos são restritas nas JPEG (quantidades arbitrárias injectáveis de bytes aleatórios na imagem para aproximar assimptoticamente 1:. Uma compressão é coxo)- um
APP0
marcador JFIF é permitido, mas nenhuma miniatura é permitida (deve ter exatamente 16 bytes) - tl; dr Se você não estiver intencionalmente inserindo metadados em um segmento EXIF e desabilitar qualquer tipo de miniatura que sua biblioteca de idiomas preferida queira colocar na imagem, tudo bem.
- um
Publique o código e a imagem.
Se você deseja escrever um programa que produz uma imagem Lepton que, quando convertida, produz um JPEG que atenda aos critérios, tudo bem. Ele deve permanecer idêntico entre vários ciclos JPEG → Lepton → JPEG → ... arbitrariamente.
Pontuação
O tamanho de byte da imagem Lepton dividido pela imagem JPEG de origem. Maior (pior compressão de Lepton) é melhor. Execute o Lepton com sinalizadores e comutadores padrão.
Obtendo Lepton
Um curso intensivo de 5 segundos para construir o Lepton:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Então ./lepton --help
deveria lhe contar as coisas.