Saya berencana untuk menulis skrip yang akan memindai 100.000+ gambar JPEG dan mengompres ulang mereka jika mereka "terlalu besar" dalam hal ukuran file. Scripting adalah bagian yang mudah, tetapi saya tidak yakin bagaimana mengkategorikan gambar sebagai "terlalu besar".
Misalnya ada gambar 2400x600px dengan ukuran file 1,81 MB. Perintah save for web Photoshop membuat file 540KB dengan kualitas dan dimensi yang sama. Ini sekitar 29% dari ukuran aslinya.
Sekarang saya berpikir tentang menggunakan angka-angka ini sebagai pedoman. Sesuatu seperti 540KB / (2.400 * 600 / 1.000.000) = 375KB per megapiksel. Gambar apa pun yang lebih besar dari ini dianggap besar. Apakah ini pendekatan yang benar atau ada yang lebih baik?
Sunting 1: gambar perlu dioptimalkan untuk ditampilkan di situs web.
Sunting 2: Saya dapat menentukan kualitas keluaran yang diinginkan dengan bereksperimen, saya perlu tahu apakah gambarnya besar dalam hal ukuran file wrt dan perlu disimpan dalam kualitas yang lebih rendah.
sumber
Jawaban:
Pada rata-rata , sweet spot JPEG adalah sekitar satu bit per pixel .
Ini tentu saja akan bervariasi tergantung pada konten gambar, karena jenis grafik tertentu (misalnya bidang datar dan gradien halus) dikompresi lebih baik daripada yang lain (noise, teks), jadi itu bukan metode yang kuat untuk diterapkan secara membabi buta ke setiap gambar.
Anda juga memiliki masalah karena tidak memiliki gambar referensi yang tidak terkompresi untuk dibandingkan, sehingga Anda tidak benar-benar tahu pasti apa kualitas gambar yang Anda miliki saat ini, dan berapa banyak lagi Anda dapat menurunkan kualitas agar tetap dapat diterima. Kualitasnya dapat ditebak sampai batas tertentu dari tabel kuantisasi dalam JPEG, tetapi juga bukan metode yang dapat diandalkan (khususnya, penilaian kualitas ImageMagick sangat tidak tepat untuk JPEG dengan kustom, tabel kuantisasi yang dioptimalkan).
Karena itu, ada pendekatan praktis yang masuk akal:
Penting untuk tidak hanya memilih ukuran file yang lebih kecil, dan memerlukan penurunan ukuran file yang signifikan. Itu karena kompresi ulang JPEG cenderung selalu menurunkan ukuran file secara perlahan karena hilangnya detail yang disebabkan oleh hilangnya sifat JPEG dan konversi ke 8-bit RGB, sehingga penurunan kecil dalam ukuran file dapat memiliki penurunan kualitas yang tidak proporsional dalam kualitas yang tidak layak Itu.
sumber
Ukuran file yang dikompresi dengan JPEG bervariasi tergantung pada kompleksitas gambar. Mencoba mengontrol ukuran file dengan cara yang Anda gambarkan akan menghasilkan kualitas gambar yang dirasa sangat bervariasi.
Pertimbangkan opsi berikut sebagai gantinya:
Pendekatan yang cukup baik. Gunakan pengaturan kualitas yang menurut Anda dapat diterima, seperti 75. Bandingkan ukuran hasilnya dengan gambar asli, dan simpan file yang lebih kecil. Lihat Kualitas apa yang harus dipilih ketika mengkonversi ke JPG?
Gunakan minimizer JPEG , seperti JPEGmini atau
jpeg-recompress
dari jpeg-arsip . Mereka pada dasarnya dirancang untuk melakukan apa yang tampaknya Anda coba lakukan, tetapi dengan lebih banyak kesadaran internal algoritma JPEG.Buat thumbnail dengan berbagai ukuran , seperti yang disarankan Nathancahill , dari perspektif pengembang web.
sumber
Tidak. Ini pendekatan yang salah.
Ukuran file dalam piksel, ya, ada hubungannya dengan bobot akhir, tetapi itu bukan satu-satunya faktor.
Lakukan tes. Ambil file yang sepenuhnya putih dari 2400x600px yang sama, dan simpan sebagai JPG.
Sekarang ambil foto hutan (sama dengan 2400x600px) dengan banyak detail dan simpan. File ini akan lebih besar menggunakan pengaturan kompresi yang sama.
Ukuran akhir tergantung pada 3 faktor ini:
Jadi Anda tidak bisa dan tidak harus mendefinisikan bobot berdasarkan ukuran piksel.
Tapi saya mengerti masalah Anda.
Tanpa menganalisis kompresi gambar saat ini, sulit untuk menentukan berat "optimal" (yang relatif terhadap pengamat, atau penggunaan gambar)
Anda mungkin dapat menetapkan pengaturan kompresi dan mengkompres ulang "semuanya". Saya tidak tahu apakah Anda ingin melakukan itu sebelum "mengunggah", yang mungkin akan menghemat lebih banyak waktu daripada yang dihemat, melewatkan beberapa di antaranya.
Ada beberapa alat yang menganalisis gambar dan menghitung rasio kompresi saat ini. Tapi saya ragu itu yang penting.
sumber
jpeg size / raw size
danraw size = pixel size * number of pixel
,pixel size
menjadi 3 oktet untuk ruang warna RGB 24bit. Dan seperti yang Anda katakan sendiri, metrik ini tidak cukup untuk menentukan apakah gambar dikompresi dengan cukup.Pengembang web di sini. Inilah cara saya mendekati ini:
1. Tentukan dimensi gambar yang ditampilkan dan resolusi layar yang diperlukan.
Tugas pertama Anda adalah menentukan ukuran piksel gambar yang akan ditampilkan. Apakah itu foto produk di toko online? Galeri foto? Foto profil pengguna? Berbagai ukuran berbeda? Buat daftar dimensi piksel yang Anda butuhkan. Periksa apakah Anda memerlukan @ 2x gambar untuk layar resolusi tinggi seperti ponsel dan tablet terbaru.
2. Gunakan skrip thumbnail untuk membuat file gambar baru.
Ini disebut skrip thumbnail tetapi dapat digunakan untuk lebih dari sekadar thumbnail. Ada banyak skrip di luar sana atau Anda dapat menulis sendiri. Dengan tidak mengubah ukuran file asli, Anda dapat melakukannya jika Anda membuat kesalahan dalam skrip atau menyadari bahwa Anda memerlukan gambar beresolusi lebih tinggi. Praktik yang umum adalah menentukan akhiran dalam nama file keluaran. Sebagai contoh:
3. Kompres.
Script thumbnail harus menentukan kompresi jpg ketika Anda memotong file gambar baru. Namun, ada minifiers lain di luar sana yang mungkin mengurangi ukuran file lebih jauh.
sumber
Sementara jawaban @ Rafael telah menjelaskan tentang kompresi JPEG masuk dan keluar, saya akan mencoba menjawab web Anda dan mengunggah yang bermasalah.
Menggunakan gambar di situs web (untuk desain atau konten) akan menentukan beberapa keharusan: untuk apa gambar saya akan digunakan? Logo, foto sampul, gambar kecil, foto dalam posting blog, foto layar penuh untuk galeri ... Juga, jika Anda menggunakannya untuk berbagai keperluan (misalnya foto dan gambar mini galeri), Anda ingin menolaknya dalam semua ukuran yang diperlukan. Namun, kecuali Anda membangun situs web Anda sendiri, sebagian besar layanan web saat ini akan menghasilkan gambar berukuran lebih kecil dari gambar Anda yang lebih besar untuk digunakan di tempat.
Sekarang setelah Anda mengetahui tujuan gambar Anda, situs web (atau CMS atau front-end Framework) akan selalu membutuhkan ukuran maksimum piksel untuk dipatuhi gambar Anda. Logo mungkin max 600x600px, penutup latar belakang mungkin 1280x720px maks, foto konten untuk tampilan layar penuh 1920x1080 atau resolusi asli kamera untuk konservasi detail mutlak. Periksa ukuran yang benar dari situs web yang ingin Anda unggah. Anda ingin mencocokkan setidaknya pada ukuran piksel maksimum yang diperlukan, tergantung pada rasio yang ingin Anda capai. Hati-hati, beberapa layanan akan memotong dan meregangkan gambar Anda jika rasio aspeknya tidak sama. Dalam hal ini, Anda harus mengubah gambar Anda agar sesuai dengan ukuran dan rasio maks yang diperlukan.
Kemudian, situs web dapat menetapkan batas ukuran file (atau mungkin tidak, tergantung pada tujuan gambar). Mengenai waktu pemuatan halaman, semakin ringan semakin baik. Dalam contoh Anda dari gambar resolusi tinggi pada 2400x600px, 300 hingga 500kB adalah ukuran yang sepenuhnya baik untuk waktu memuat. Gambar konten (seperti foto) dapat lebih berat jika keperluan gambar mengharuskannya (mis. Tampilan layar penuh), hingga resolusi asli kamera Anda jika perlu. Jika tidak ada indikasi yang diberikan, batas ukuran file mungkin sulit ditebak, karena dapat bergantung pada peralatan pemirsa (ponsel, desktop ...), kualitas jaringan negara pemirsa ... Untuk kualitas dan layanan maksimal, perlakukan foto satu per satu hingga dapatkan ukuran file minimum tanpa artefak yang terlihat. Untuk memudahkan atau mempercepat pemrosesan, skrip diubah ukurannya dengan menggunakan tingkat kompresi yang memuaskan secara keseluruhan (sekitar 70 seharusnya baik-baik saja).Jawaban @ xiota mungkin juga alat yang Anda butuhkan. Tetapkan standar Anda sendiri di sini.
TL; DR tujuan gambar pada situs web adalah kunci untuk ukuran / jumlah kompresi.
sumber
Apa yang Anda hitung adalah ukuran rata-rata terkompresi dari piksel gambar, jika Anda membaginya dengan ukuran piksel mentah (biasanya 3 oktet untuk 24bit RGB), Anda mendapatkan rasio kompresi.
Ini adalah metrik yang baik yang memberi Anda informasi tentang kondisi kompresi gambar, tetapi tidak cukup untuk menilai apakah gambar tersebut cukup dikompresi atau tidak karena rasio kompresi tidak hanya bergantung pada profil kompresi (algoritma = JPEG, kualitas = 60/100) tetapi juga pada potensi kompresi gambar: gambar yang berbeda dengan ukuran mentah yang sama dan profil kompresi yang sama akan menghasilkan ukuran jpeg yang berbeda karena gambar lebih atau kurang mudah dikompres (gambar kosong sangat mudah dikompres, putih kebisingan tidak).
Karena ini dan karena profil kualitas "terakhir digunakan" tidak disimpan dalam gambar ini (baik dalam struktur header metadata atau jpeg), pendekatan yang paling sering digunakan ketika menerbitkan ulang gambar dengan profil ukuran / kualitas target sebenarnya adalah hanya mengkompres ulang (dan berpotensi mengubah ukuran) semuanya (secara otomatis) terlepas dari keadaan awal gambar.
Ya, Anda dapat melakukan kompresi ulang saat tidak diperlukan, ya Anda bahkan dapat kehilangan ruang jika melakukan kompresi ulang dengan profil kualitas yang lebih tinggi tetapi itu adalah kasus tepi dan dalam skala besar itu adalah hal termudah untuk dilakukan untuk memastikan profil kualitas target. Tentu saja, Anda hanya ingin melakukannya sekali agar tidak secara bertahap menurunkan gambar, dan Anda mungkin harus menyimpan dua perpustakaan gambar: yang pertama "tidak tersentuh" dan yang "akan diterbitkan / dikompresi ulang".
Ada banyak alat yang ada untuk mengkompres ulang banyak file, Anda juga dapat membuat skrip sendiri dan menggunakan tumpukan teknis yang tepat (kebanyakan C ++ dan libjpeg) itu bisa sangat cepat bahkan untuk file> 100k.
Jika Anda ingin menerapkan proses yang lebih cerdas / lebih rumit, Anda dapat mencoba bereksperimen dengan berulang-ulang kompres / membandingkan logika ukuran untuk memperkirakan profil kualitas asli (mengompres ulang dengan kualitas yang sama akan menghasilkan kira-kira ukuran yang sama, dengan tinggi kualitas harus sedikit meningkatkan ukuran dan dengan kualitas yang lebih rendah harus secara signifikan mengurangi ukuran). Ini tentu saja akan menghabiskan lebih banyak daya CPU.
sumber
Ukuran asli terkompresi adalah 2400 x 600 x 3 = 4.320.000 byte (4,1 MB), karena warna 24 bit selalu tiga byte data RGB per piksel . Tidak ada jalan lain dalam kebenaran absolut ini.
Namun, ukuran JPG juga tergantung pada detail gambar. Area halus yang besar (seperti langit atau dinding yang dicat) kompres lebih baik, tetapi area yang lebih detail (seperti pohon penuh daun) tidak kompres juga. Jadi tidak ada indikator numerik absolut.
Tetapi 540 KB adalah 0,540 / 4,1 = 13% dari ukuran aslinya 4,1 MB . Mungkin 29% dari ukuran JPG sebelumnya, tetapi 13% dari ukuran asli yang tidak terkompresi. Jadi itu 1/8 dari ukuran asli yang tidak terkompresi, yang biasanya dianggap kualitas yang "layak". Tidak optimal, tidak berkualitas maksimal, tetapi secara umum layak, mungkin cukup baik untuk beberapa penggunaan. Hanya mengatakan, ini sudah kecil.
File JPG yang lebih besar adalah kualitas gambar yang lebih baik, dan lebih kecil adalah kualitas gambar yang lebih kecil. Anda harus memutuskan apa yang cukup baik, tetapi JPG tidak pernah "terlalu besar", karena kualitas gambar menurun dengan kompresi JPG. Warna 24 bit memiliki tiga byte per piksel yang tidak terkompresi.
Jadi keputusannya adalah apakah Anda menginginkannya kecil atau jika Anda menginginkannya baik.
Tetapi membuat JPG yang ada menjadi lebih besar masih lebih buruk, karena lebih banyak artefak JPG ditambahkan, dan sekali kecil, datanya diubah, dan itu tidak akan pernah menjadi lebih baik.
Artefak JPG biasanya menunjukkan dua cara, seperti blok 8x8 piksel terlihat dari satu warna di area halus tanpa detail, atau sebagai tepi kasar yang terlihat di sekitar tepi detail.
Jika mengedit dan menyimpan kembali JPG, artefak JPG tambahan ditambahkan. Jika itu diperlukan, praktik yang baik untuk selalu menyimpan ulang agar sesuai dengan pengaturan kompresi asli.
sumber
"Save for Web" Photoshop sebenarnya adalah kompromi yang cukup bagus antara ukuran dan kualitas file, jadi kecuali Anda memiliki persyaratan yang lebih spesifik, Anda harus melakukannya. Saran khas untuk pengembang web adalah tetap pada kisaran kualitas 50-70%. Tentu saja, ada pengecualian: Anda ingin kualitas 90-95% pada logo perusahaan yang harus tampak hebat setiap saat (atau bahkan mengubahnya menjadi format lossless), dan turun hingga 30% pada yang besar tetapi nyaris tidak latar belakang halaman yang terlihat.
Juga jangan lupa untuk mengubah skala gambar Anda. Gambar 2400x600 akan terlihat bagus di layar 4K, tetapi akan diubah pada layar yang lebih kecil, membuang-buang bandwidth data tanpa perbaikan visual bagi pengguna. Periksa templat situs web yang akan Anda gunakan untuk mengetahui lebar optimal untuk gambar. Biasanya, pada saat penulisan ini akan berada di suatu tempat sekitar 1200-1300 piksel (lihat resolusi paling populer di sini ).
Ingatlah untuk menyimpan aslinya gambar yang Anda konversi ke kualitas Web. Jika Anda perlu mengerjakan ulang atau mencetak materi ini, Anda akan menyesal hanya memilikinya dalam kualitas 60% dan resolusi 1 Mpix.
sumber