Adakah Format PNG Tidak Rugi Kerana Mempunyai Parameter Mampatan?

Format PNG seharusnya berupa format tanpa kerugian, tetapi ketika anda menyimpan gambar sebagai fail PNG, anda diminta untuk memilih tahap pemampatan. Adakah ini bermaksud bahawa format PNG sebenarnya tidak rugi? Siaran Soal Jawab SuperUser hari ini membantu menghilangkan kekeliruan bagi pembaca yang ingin tahu.

Sesi Pertanyaan & Jawapan hari ini diberikan oleh SuperUser — subdivisi Stack Exchange, kumpulan laman web Soal Jawab yang didorong oleh komuniti.

Soalan

Pembaca SuperUser pkout ingin mengetahui apakah kualiti gambar PNG dipengaruhi oleh tahap mampatan yang dipilih:

Seperti yang saya faham, fail PNG menggunakan pemampatan tanpa kerugian. Namun, ketika saya menggunakan penyunting gambar seperti Gimp dan berusaha menyimpan gambar sebagai fail PNG, ia meminta tahap pemampatan antara 0 dan 9.

Sekiranya ia mempunyai parameter pemampatan yang mempengaruhi ketepatan visual gambar yang dimampatkan, bagaimana PNG hilang? Bolehkah seseorang menerangkan perkara ini kepada saya? Adakah saya mendapat tingkah laku tanpa kerugian hanya apabila saya menetapkan tahap pemampatan kepada 9?

Adakah terdapat perbezaan kualiti gambar bergantung pada tahap mampatan yang anda pilih?

Jawapan

Penyumbang SuperUser LordNeckbeard dan jjlin mempunyai jawapan untuk kami. Pertama, LordNeckbeard:

PNG Mampat, tetapi Tidak Rugi

Tahap pemampatan adalah pertukaran antara ukuran fail dan kelajuan pengekodan / penyahkodan. Untuk membuat generalisasi secara berlebihan, walaupun format bukan gambar seperti FLAC mempunyai konsep yang serupa.

Tahap Mampatan yang berbeza, Output yang Dikodekan Sama

Walaupun ukuran fail berbeza kerana tahap pemampatan yang berbeza, output yang disahkod sebenarnya akan sama. Anda boleh membandingkan hash MD5 output yang disahkod dengan ffmpeg menggunakan muxer MD5. Ini ditunjukkan paling baik dengan beberapa contoh.

Buat Fail PNG

  • Secara lalai, ffmpeg akan menggunakan -compression_level 100 untuk output PNG.
  • Ujian cepat dan ceroboh menunjukkan bahawa 100 (tahap mampatan tertinggi) mengambil masa kira-kira tiga kali lebih lama untuk dikod dan lima kali lebih lama untuk menyahkod daripada 0 (tahap mampatan terendah) dalam contoh ini.

Bandingkan Saiz Fail

Nyahkod Fail PNG dan Tunjukkan Pencucian MD5

Oleh kerana kedua-dua hash itu sama, anda boleh yakin bahawa output yang disahkod (fail mentah yang tidak dimampatkan) sama.

Diikuti dengan jawapan dari jjlin:

PNG tidak rugi. GIMP kemungkinan besar tidak menggunakan pilihan kata yang terbaik dalam kes ini.

Anggaplah ia sebagai kualiti mampatan atau tahap mampatan . Dengan pemampatan yang lebih rendah, anda mendapat fail yang lebih besar, tetapi memerlukan lebih sedikit masa untuk menghasilkan, sedangkan dengan pemampatan yang lebih tinggi, anda akan mendapat fail yang lebih kecil yang memerlukan waktu lebih lama untuk dihasilkan.

Biasanya anda mendapat pulangan yang berkurang, iaitu tidak banyak penurunan ukuran dibandingkan dengan peningkatan waktu yang diperlukan ketika naik ke tahap mampatan tertinggi, tetapi terserah kepada anda.

Ada yang perlu ditambah dengan penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan daripada pengguna Stack Exchange yang mahir berteknologi lain? Lihat utas perbincangan lengkap di sini.