Dropbox baru-baru ini merilis Lepton ( GitHub ), sebuah metode yang tanpa kompres memadatkan gambar perjalanan JPEG, menghemat rata-rata 22%.
Karena prinsip pigeonhole , algoritma kompresi umum apa pun tidak dapat dijamin menghasilkan file yang lebih kecil ( umum karena tidak berlaku untuk input yang dibatasi ke format tertentu). Lepton mengeksploitasi karakteristik umum tentang JPEG, yang jika ditumbangkan, mungkin akan membuatnya jadi file yang lebih besar dari sumbernya.
Persyaratan
Tulis program yang menghasilkan:
- Gambar JPEG / JFIF yang valid,
- dengan ukuran antara 0,5 MB dan 1 MB,
- tidak lebih kecil dari 256 × 256 px,
- tidak lebih besar dari 4096 × 4096 px,
- dikenali oleh Lepton (berhasil dapat "kompres" ke
.lep
gambar), dan - mendekompresi menjadi identik
.jpg
(sebagai input). APPx
,,COM
dan metadata lainnya, bagian marker non-grafis dibatasi dalam JPEG (menyuntikkan jumlah acak byte ke dalam gambar untuk secara asimptotik mendekati kompresi 1: 1 lumpuh.)- sebuah
APP0
JFIF penanda diperbolehkan tetapi tidak ada thumbnail diperbolehkan (harus tepat 16 bytes) - tl; dr Jika Anda tidak sengaja mendorong metadata ke dalam segmen EXIF dan Anda menonaktifkan segala jenis thumbnail yang ingin dimasukkan ke dalam pustaka bahasa Anda ke dalam gambar, itu tidak masalah.
- sebuah
Posting kode dan gambar.
Jika Anda ingin menulis sebuah program yang menghasilkan gambar Lepton yang ketika dikonversi menghasilkan JPEG yang memenuhi kriteria, itu bagus. Itu harus tetap identik di banyak siklus JPEG → Lepton → JPEG → sewenang-wenang.
Mencetak gol
Ukuran byte dari gambar Lepton dibagi dengan gambar JPEG sumber. Lebih tinggi (kompresi Lepton yang lebih buruk) lebih baik. Jalankan Lepton dengan flag dan sakelar default.
Mendapatkan Lepton
Kursus kilat 5 detik untuk membangun Lepton:
git clone https://github.com/dropbox/lepton.git
cd lepton
./autogen.sh && ./configure && make
# fish shell: ./autogen.sh ;and ./configure ;and make
Maka ./lepton --help
harus memberi tahu Anda hal-hal.
Jawaban:
Python 3 + mozjpeg + / dev / urandom, 720 × 720: rata-rata skor 102%
Tergantung pada
mozjpeg
paket, kode menganggap itu diinstal ke dalam/usr/local/opt/mozjpeg
. (pada OS X itu sepele untuk menginstal, jalankan sajabrew install mozjpeg
)Juga tergantung pada
/dev/urandom
file khusus, ini digunakan untuk menghasilkan data acak.Kode ini hanya
mozjpeg
memasukkan data acak ke kompresor (dalam format TGA, karena cjpeg memahaminya dan memiliki header yang sangat sederhana), dan memungkinkannya membuat file jpeg yang dioptimalkan. Kualitas diatur ke maksimum karena membuat koefisien DCT yang paling tidak dapat dikompres, dan tidak masalah apa algoritma yang digunakan untuk kompres data yang tidak dapat dikompres.Saya memeriksa bahwa siklus jpeg-> lepton-> jpeg adalah lossless - itu benar.
Kode tidak golf, jelas.
Contoh gambar:
Fakta menyenangkan: file JPEG yang dihasilkan lebih besar dari sumber gambar TGA yang tidak terkompresi, meskipun JPEG menggunakan kompresi lossy.
Fakta menyenangkan 2: Imgur (hosting gambar default untuk SO) melakukan pekerjaan yang sangat buruk pada file ini - untuk beberapa alasan ia mengompresnya kembali ke kualitas yang lebih rendah, meskipun kurang dari 1MB. Jadi saya menggunakan Github untuk mengunggah contoh gambar.
Fakta menyenangkan 3: Secara umum, mozjpeg memang melakukan kompresi JPEG yang lebih baik sambil tetap kompatibel dengan decoder JPEG yang ada. Dan itu juga memiliki alat untuk mengoptimalkan file JPEG, juga -
jpegtran
.sumber
Noise Naif, 1024 × 1024: skor 85,55%
Contoh yang sesuai dalam Python untuk mendapatkan bola bergulir. Tidak dioptimalkan dengan cara apa pun; kemungkinan kekurangan:
Kemudian beberapa bash untuk melakukan hal itu:
sumber