LeanImg

Penskala gambar: apakah Anda ingin pengubah ukuran atau peningkat?

Pengubah ukuran menginterpolasi piksel dan peningkat merekonstruksi mereka. Mana yang Anda butuhkan, dengan hasil terukur 2x dan 4x serta batasan nyata di browser.

"Penskala gambar" mencakup dua alat yang melakukan hal yang berlawanan pada sebuah file. Pengubah ukuran mengambil sampel piksel yang sudah Anda miliki, sehingga 4000 px lebar menjadi 1080 px lebar dan detailnya dirata-ratakan menjadi lebih sedikit sampel. Peningkat menjalankan gambar melalui model terlatih yang merekonstruksi tepi dan tekstur yang tidak disimpan oleh yang asli. Keduanya mengubah angka di kotak dimensi. Hanya satu dari mereka yang dapat menambahkan detail, dan itu hanya menawarkan 2x atau 4x.

Keduanya berjalan di dalam tab browser. Peningkat mengunduh modelnya ke mesin Anda sekali, kemudian setiap ubin setelah itu dihitung di GPU Anda sendiri. Tidak ada yang diposting ke mana pun, karena tidak ada rute API untuk diposting dan tidak ada tindakan server dalam basis kode (itulah seluruh arsitektur, dijelaskan di halaman privasi kami). Setiap penskala lain dalam kategori ini mengunggah file Anda dan kemudian berjanji untuk menghapusnya satu atau dua jam kemudian.

Apa perbedaan antara pengubahan ukuran dan peningkatan?

Pengubahan ukuran adalah interpolasi. Pengubah ukuran kami menyerahkan pekerjaan kepada browser, baik melalui createImageBitmap dengan `resizeQuality: "high"` atau melalui canvas `drawImage` dengan imageSmoothingQuality yang diatur ke tinggi. Dalam hal ini, piksel keluaran adalah rata-rata berbobot dari piksel masukan di sekitarnya. Rata-rata tidak dapat menghasilkan tepi yang tidak ada dalam data sumber, jadi memperbesar melalui interpolasi memberi Anda salinan yang lebih besar dan lebih lembut dari informasi yang sama.

Peningkatan adalah rekonstruksi. Kami menjalankan Real-ESRGAN realesr-general-x4v3, model generatif yang dilatih untuk menghaluskan detail yang mungkin pada 4x, dijelaskan dalam makalah 2021. Ini memproses gambar dalam ubin 256 px dengan tumpang tindih 16 px di setiap sisi, sehingga sebuah ubin selalu melihat konteks tetangganya sebelum wilayah inti ditulis. Model ini menebak. Tebakan tersebut biasanya benar pada wajah, kain, dan teks, dan mereka bisa sangat salah pada pola berulang yang halus.

Mana yang sebenarnya saya inginkan?

Jika ukuran target lebih kecil dari sumber, Anda ingin pengubah ukuran dan tidak ada yang perlu didiskusikan. Jika target lebih besar, pertanyaannya adalah apakah Anda dapat memenuhi batasan di bawah ini. Berikut adalah apa yang sebenarnya dilakukan kedua alat dalam build kami, diambil dari kode daripada salinan pemasaran.

Pengubah UkuranPeningkat
ArahUkuran target apa pun, naik atau turunHanya 2x atau 4x
MetodeInterpolasi canvas browserReal-ESRGAN realesr-general-x4v3
Format keluaranFormat sumber dipertahankan (GIF dan AVIF keluar sebagai PNG)Selalu PNG
Kontrol kualitasPNG lossless, semuanya lainnya dikode ulang pada kualitas 90Tidak ada, PNG tidak memiliki pengatur kualitas
Batas batch10 file, total 50 MB1 file
Langit-langit inputHanya batas batchSekitar 32 MP dengan WebGPU, sekitar 1,1 MP tanpa
Preset15 ukuran sosial ditambah 25/50/75 persenTidak ada, hanya tombol 2x dan 4x

Satu baris layak mendapat peringatan. Pengubah ukuran secara default mengatur "jangan perbesar" dicentang, yang membatasi target yang diketik ke dimensi asli. Sebuah preset sosial bernama dengan sengaja mengabaikan batasan itu, karena bingkai cerita 1080x1920 yang dibatasi tidak sesuai dengan spesifikasi platform mana pun.

Seberapa besar file tumbuh ketika saya meningkatkan?

Banyak, dan PNG adalah alasannya. Kami menjalankan small.png, 400x269 dan 177,1 KB, melalui kedua pengaturan. Pada 2x, hasilnya 800x538 dan 782,8 KB. Pada 4x, hasilnya 1600x1076 dan 2,7 MB. Itu kira-kira 15x byte masukan untuk 16x piksel, yang merupakan apa yang terlihat seperti keluaran lossless ketika model baru saja mengisi setiap area datar dengan mikrotekstur baru. Peningkat menulis PNG dalam setiap kasus, jadi tidak ada penggeser kualitas untuk diperdagangkan.

Tampilan terpisah dari gambar sumber 400x269 dan hasil peningkatan 800x538
small.png pada 2x: 400x269 dan 177,1 KB masuk, 800x538 dan 782,8 KB keluar. Proses 4x dari file yang sama mencapai 1600x1076 dan 2,7 MB.

Kirim hasilnya ke kompresor sebelum Anda menggunakannya di mana pun. Mode "tanpa kompresi" PNG kami adalah oxipng level 3, benar-benar lossless, dan itu mengurangi alpha.png 942,4 KB menjadi 383,9 KB. Mode palet (imagequant) membawa file yang sama menjadi 98,3 KB, yang baik untuk grafik datar dan salah untuk peningkatan fotografis.

Mengapa opsi 2x terlihat lebih lembut daripada 4x?

Karena 2x bukan model terpisah. realesr-general-x4v3 memiliki tepat satu skala keluaran, dan itu 4x. Ketika Anda memilih 2x, kami menjalankan inferensi yang identik dan kemudian mengurangi ukuran setiap ubin kembali ke setengah ukuran dengan interpolator kanvas pada kualitas penghalusan tinggi. Jadi pekerjaan GPU adalah sama untuk kedua tombol, dan 2x adalah rekonstruksi diikuti oleh pengambilan sampel dalam urutan itu. Pengurangan ukuran terjadi per ubin, yang berarti gambar 4x penuh tidak pernah ada dalam memori selama pekerjaan 2x. Jika Anda ingin keluaran mentah model, pilih 4x dan perkecil sendiri di pengubah ukuran setelahnya. Lebar sumber yang dibutuhkan setiap pengali untuk mencapai 3840 px dihitung secara terpisah.

Mengapa peningkat tidak menerima foto 24 MP saya?

Itu tergantung sepenuhnya pada apakah browser Anda memulai WebGPU. Dengan WebGPU berjalan, pekerjaan 4x menerima sekitar 32 megapiksel input. Tanpa itu, onnxruntime-web kembali ke WASM satu utas dan langit-langit input turun menjadi sekitar 1,1 megapiksel, lebih kecil dari hampir semua foto ponsel. Itu bukan batasan sewenang-wenang. Inferensi CPU pada model ini berjalan menit per megapiksel, dan pekerjaan 24 MP akan menggantung tab selama sisa sore. Satu file pada satu waktu, selalu.

Apa lagi yang diubah oleh pengubah ukuran selain jumlah piksel?

Lebih dari yang diharapkan orang. Sumber PNG tetap PNG dan tetap lossless. Segala sesuatu yang lain dikode ulang, pada kualitas 90 secara default, jadi mengubah ukuran JPEG juga merupakan kompresi ulang apakah Anda menginginkannya atau tidak. Sumber GIF keluar sebagai PNG, dan jika GIF tersebut dianimasikan, Anda kehilangan setiap bingkai kecuali yang pertama. Sumber AVIF juga keluar sebagai PNG. Tiga mode fit penting ketika rasio aspek sumber dan target tidak cocok: cover center-crops, stretch distorts dan contain mengecilkan kanvas ke area yang sesuai daripada menambahkannya dengan bilah. Jika Anda memerlukan wilayah tertentu daripada ukuran tertentu, pemotong adalah alat yang tepat, meskipun itu mengambil satu file pada satu waktu dan mengkode ulang format lossy pada kualitas hardcoded 92.

Jadi apa yang harus saya lakukan dengan file saya sekarang?

Periksa tepi panjang terlebih dahulu. Di bawah sekitar 1600 px dan Anda membutuhkannya lebih besar, buka peningkat, jalankan 2x, lalu dorong PNG melalui kompresor dalam mode lossless. Di atas itu, atau sudah pada resolusi yang Anda butuhkan, gunakan pengubah ukuran dan pilih preset sosial agar Anda tidak perlu mencari dimensi. Jika targetnya adalah feed, empat bentuk yang diterima Instagram dan langit-langit 1080 px di belakangnya adalah daftar yang harus diacu.