Bagaimana cara mengubah ukuran JPG menjadi di bawah 100 KB?
Tangga kualitas yang diukur untuk satu foto 538,6 KB, mengapa penggeser terhenti di 131 KB dan mengapa memotong piksel adalah tuas yang benar-benar mencapai anggaran byte.
· Updated
Formulir unggahan mengatakan maksimum 100 KB. Foto Anda adalah 538,6 KB. Refleksnya adalah mengambil penggeser kualitas dan menyeretnya ke kiri, dan untuk foto besar, refleks itu tidak akan membawa Anda ke sana. Kami mengambil satu file dan menjalankan seluruh tangga: texture.jpg pada 3840x2160, 538,6 KB di disk. Bahkan pada kualitas 30, itu mencapai 131 KB, dan gambar terlihat jelas rusak pada saat itu.
Angka yang sebenarnya mengontrol ukuran JPEG adalah jumlah piksel. Baseline JPEG mengkodekan gambar dalam blok 8x8, jadi membagi kedua dimensi menjadi setengah meninggalkan seperempat blok untuk disimpan. Jika Anda hanya memiliki penggeser, Anda akan terhenti sekitar 131 KB pada file sebesar ini. Setiap angka di bawah ini berasal dari kompresor dan pengubah ukuran kami sendiri, yang berjalan di tab browser. Tidak ada langkah unggah yang perlu ditunggu.
Mengapa penggeser kualitas tidak membawa saya ke 100 KB?
Berikut adalah tangga, file sumber yang sama setiap kali, dijalankan di kompresor gambar dalam mode manual. Mode pintar memilih default masing-masing encoder, yang adalah 80 untuk JPEG dan WebP, 63 untuk AVIF dan lossless untuk PNG.
| Pengaturan | Keluaran | Perubahan |
|---|---|---|
| Penggeser 90 | 347,8 KB | -35% |
| Pintar (penggeser 80) | 286,1 KB | -47% |
| Penggeser 60 | 212,4 KB | -61% |
| Penggeser 30 | 131 KB | -76% |
Enam puluh poin penggeser membeli 216,8 KB. Jarak terakhir, dari 60 turun ke 30, mengorbankan banyak detail yang terlihat untuk 81,4 KB. Foto 3840x2160 memiliki 8,3 juta piksel untuk dijelaskan, dan ada batasan di bawah seberapa sedikit byte yang akan menjelaskan mereka pada ukuran itu. Batasan itu nyata.

Mengapa kualitas 30 tidak benar-benar 30?
Ini satu hal yang membingungkan orang, dan kami harus menjelaskan. Ketika sumbernya adalah JPEG, kompresor kami membaca tabel kuantisasi dari 64 KB pertama file dan memperkirakan kualitas di mana ia disimpan. Penggeser Anda kemudian menskalakan perkiraan itu. Foto yang disimpan pada kualitas 60, dengan penggeser di 80, mengkodekan pada 48. Rescaling menghentikan pass kedua dari mengklaim kualitas yang tidak dapat diberikan oleh piksel, karena mengkode ulang file kualitas-60 pada 90 hanya menghabiskan byte untuk menjelaskan kerusakan yang sudah ada. Encoder di bawahnya adalah MozJPEG. Satu hal lagi yang perlu diketahui: kompresi menghapus setiap scrap metadata, EXIF, GPS, profil ICC, dan thumbnail yang disematkan. Orientasi bertahan.
Mengapa perkiraan di sebelah penggeser tidak cocok dengan hasilnya?
Karena ini adalah kurva, bukan pengkodean. Panel mencetak angka itu sebelum apa pun dijalankan, hanya dari dua hal: ukuran file Anda dan posisi penggeser. Ini adalah byte asli dikalikan dengan penggeser dibagi 100, dipangkatkan dengan 1,8. Ini tidak pernah melihat piksel gambar Anda, dan juga tidak tahu tentang rescaling di atas, jadi dalam contoh kualitas-60, itu mencetak angka untuk 80 sementara encoder akan menggunakan 48.
Pada file uji 538,6 KB yang sama, celahnya lebar, dan arahnya berubah di seluruh rentang. Pada penggeser 90, panel memprediksi 445,5 KB terhadap 347,8 KB yang sebenarnya, 28% tinggi. Pada penggeser 30, itu memprediksi 61,7 KB terhadap 131 KB yang sebenarnya, 53% rendah. Bacalah yang kedua itu lagi jika Anda mengincar batas 100 KB: perkiraan mengatakan Anda melewatinya sebesar 38 KB pada saat encoder akan melewatkannya sebesar 31. KB pada kartu hasil adalah satu-satunya angka yang layak untuk ditindaklanjuti. Dalam mode PNG palet, tidak ada perkiraan sama sekali, dan panel mencetak peringatan sebagai gantinya.
Bagaimana cara saya benar-benar mendapatkan JPG di bawah 100 KB?
Potong piksel terlebih dahulu, lalu kompres. Buka pengubah ukuran dan gunakan preset persentase, yang adalah 25, 50, dan 75. Lima puluh persen mengubah 3840x2160 menjadi 1920x1080, seperempat dari piksel. Dua puluh lima persen mengubahnya menjadi 960x540, satu enam belas. Ada juga 15 preset sosial pada dimensi tetap, dari kotak Instagram 1080x1080 hingga spanduk YouTube 2560x1440, ditambah mode piksel tepat dengan mode cover, contain, dan stretch fit. Mode piksel tepat itulah yang kotak paspor 600 x 600 diketik tanpa merusak wajah. Jika Anda mengincar 100 KB dari foto 4K, mulai dari 25% dan tingkatkan.
Dua hal tentang pengubah ukuran yang perlu diketahui terlebih dahulu. Keluaran PNG tetap lossless, dan setiap format lain dikode ulang pada kualitas 90 secara default, jadi JPEG yang melewati kedua alat ini dikode ulang dua kali. Sumber animasi keluar sebagai satu bingkai diam. Dan ketika keluaran kompresor lebih besar dari file yang Anda berikan, ia mengembalikan asli Anda tanpa sentuhan.
Apakah WebP atau AVIF akan membawa saya ke sana lebih cepat?
| Encoder | Penggeser 80 | Penggeser 63 |
|---|---|---|
| JPEG | 286,1 KB | tidak diukur |
| WebP | 290,3 KB | 200,6 KB |
| AVIF | 312,7 KB | 186,9 KB |
Baca tabel itu dua kali. Pada posisi penggeser yang sama yaitu 80, JPEG menghasilkan file terkecil dan AVIF yang terbesar, yang terlihat terbalik sampai Anda ingat rescaling di atas. 80 JPEG diperkecil berdasarkan kualitas yang diperkirakan dari sumber, jadi itu sebenarnya bukan 80, sementara WebP dan AVIF mengambil angka itu secara harfiah. Turunkan mereka ke default pintar AVIF yaitu 63 dan codec modern menarik ke depan: 200,6 KB untuk WebP, 186,9 KB untuk AVIF. Keduanya masih jauh dari 100 KB pada 3840x2160, yang merupakan inti dari masalah ini. AVIF juga memakan waktu sekitar 10 hingga 11 detik per pengkodean di mesin ini, sementara JPEG dan WebP kembali dengan segera, dan dukungan browser masih baru. Jalur JPG ke WebP kami terkunci pada 4:2:0 chroma, jadi tepi merah yang keras sedikit melunak.
Apa yang terjadi jika file saya adalah PNG dengan transparansi?
Tuas yang sama sekali berbeda. Kami menjalankan alpha.png, 900x606 dan 942,4 KB dengan saluran alpha yang nyata, melalui kedua mode PNG. Opsi "Tanpa kompresi" adalah oxipng pada level 3, sepenuhnya lossless, dan mengembalikan 383,9 KB, pemotongan 59% dengan setiap piksel utuh. Opsi "Ukuran file lebih kecil" menjalankan libimagequant, yang mengurangi gambar menjadi palet, dan mengembalikan 98,3 KB. Itu 90% lebih sedikit, dan melewati anggaran 100 KB tanpa menyentuh dimensi. Palet dapat membandingkan gradien halus, jadi periksa langit atau bayangan lembut sebelum Anda mengirimkannya. Transparansi bertahan di kedua mode. Minta keluaran JPEG dan saluran alpha akan hilang, dipadukan dengan putih.
Bisakah saya memotong untuk mencapai 100 KB?
Sebagian. Memotong menghapus piksel, jadi itu menghapus byte. Pemotong kami mengambil satu file pada satu waktu hingga 10 MB dan menawarkan delapan preset aspek ditambah rasio W:H kustom. Tidak ada bidang untuk mengetik lebar target dalam piksel, jadi Anda tidak dapat mengincar ukuran keluaran yang tepat, dan setiap pemotongan dari format lossy dikode ulang pada kualitas hardcoded 92. GIF kembali sebagai PNG bingkai tunggal. Untuk mencapai anggaran byte, preset persentase pengubah ukuran memberi Anda pegangan yang lebih langsung.
Apakah ada dari ini yang mengunggah foto saya?
Tidak. Aplikasi ini tidak memiliki rute API dan tidak ada tindakan server, dan satu-satunya permintaan jaringan yang dilakukannya adalah pengambilan same-origin untuk aset dan codec WASM-nya sendiri. File Anda didekodekan ke kanvas dan dikodekan lagi oleh WASM di tab yang sama. Sebagian besar alat lain dalam kategori ini bekerja sebaliknya: gambar Anda pergi ke server mereka dan berada di penyimpanan mereka sampai timer retensi aktif. Itulah perbedaan yang dijelaskan di halaman privasi. Itu juga mengapa batch di sini dibatasi pada 10 file dan 50 MB, karena CPU Anda sendiri yang melakukan pekerjaan. Batasan yang sama adalah mengapa folder dengan 300 file di dalamnya bukan pekerjaan browser.