Meskipun jawaban Philip adalah cara terbaik untuk pergi, adalah mungkin untuk melakukan apa yang Anda inginkan sepenuhnya dalam lingkup JPEG.
JPEG bekerja dengan memecah gambar Anda menjadi blok-blok yang disebut Unit Pengodean Minimum (MCU), masing-masing 16x16, dan mengompresnya secara terpisah. Anda dapat melihat ini di gambar ketika Anda menghidupkan tingkat kompresi sangat tinggi. Pada tingkat kompresi yang lebih masuk akal, balok menyatu begitu lancar sehingga Anda tidak pernah melihat batas.
Kita bisa memanfaatkan fakta ini untuk menambahkan batas putih sederhana ke gambar. Kami hanya harus membuat array berongga blok putih yang sama dengan ukuran gambar output, lalu jatuhkan blok JPEG MCU asli ke tengah .¹
Ada kerugian untuk teknik itu: itu hanya bekerja ketika ukuran gambar input dan output keduanya kelipatan dari ukuran MCU. Ketika itu tidak terjadi, kita perlu mengkompres ulang beberapa blok di margin antara batas putih dan tepi gambar asli. Anda tidak akan melihat perbedaan ini dalam output jika Anda menjauh dari level kompresi JPEG yang terlalu tinggi, sehingga masih efektif lossless.
Saya tidak mengetahui adanya program yang hanya melakukan ini. Hal terdekat yang saya sadari adalah sesuatu yang melakukan operasi terbalik: jpegtran memiliki fungsi memotong yang tanpa kehilangan memotong bagian tepi gambar .² Ia melakukannya dengan membuang MCU yang terpotong di sepanjang tepi gambar, meninggalkan yang bagian tengah tidak tersentuh.
Solusi siap pakai yang paling sederhana yang saya ketahui adalah plugin Better JPEG Lossless Resave untuk Photoshop. Ini menggunakan teknik yang didasarkan pada ide-ide yang diberikan di atas untuk menyalin MCU dari gambar asli di mana pun ia bisa, untuk menghindari menciptakan kembali mereka dari versi yang tidak terkompresi, seperti yang biasanya dilakukan Photoshop.
Digesti:
Anda mungkin berpikir bahwa batas yang dihasilkan tidak akan terlalu putih , karena hilangnya JPEG akan menciptakan semacam perbedaan warna pada output. Saya melakukan beberapa pengujian, dan setidaknya di Photoshop, gambar yang benar-benar putih yang disimpan melalui Save For Web's JPEG level 10 (yaitu kualitas "rendah") menghasilkan gambar yang di-decode yang masih murni putih.
Saya menentukan ini dengan dua tes:
Pertama, saya memuat JPEG sebagai lapisan di atas yang asli, mengatur mode campuran lapisan atas ke Perbedaan, kemudian menambahkan lapisan penyesuaian Levels di atasnya untuk mencoba dan memperbesar perbedaan. Gambar yang dihasilkan tetap hitam, menunjukkan "tidak ada perbedaan."
Kedua, ketika saya gagal melihat perbedaan yang diharapkan, saya menjatuhkan lapisan penyesuaian dan mengembalikan lapisan JPEG ke mode campuran Normal, mengambil alat pipet, dan mencari di seluruh gambar untuk piksel yang tidak ditampilkan sebagai RGB (255.255.255 ) di panel Info. Saya tidak pernah menemukannya. Saya berharap melihat angka-angka berkedip sedikit ketika saya menggosok gambar, tetapi mereka tetap stabil.
Saya hanya dapat menyimpulkan bahwa ini adalah kasus yang merosot dari algoritma pengkodean: blok putih murni tetap putih melalui transformasi cosinus diskrit .
Menariknya, ini tidak terjadi dengan blok hitam murni. Setidaknya dengan implementasi Photoshop, mereka berubah menjadi RGB (1,1,1) ketika diterjemahkan, bukan RGB (0,0,0).
Intinya, Anda tidak perlu khawatir tentang titik-titik tergagap di daerah perbatasan ini saat mencetak gambar yang dihasilkan menggunakan teknik di atas.
jpegtran
adalah program baris perintah, tetapi ada juga program Windows GUI berdasarkan kode yang sama disebut jpegcrop
.
Sayangnya, plugin ini hanya untuk Windows.
jpegtran
fungsi krop sebenarnya juga dapat digunakan untuk memperpanjang. (Namun, tidak yakin apa warna perbatasan yang diperluas itu.)jpegtran
juga dapat memperluas gambar, tetapi selalu cocok dengan abu-abu tengah yang dikodekan dengan keras, RGB (128.128.128). Itu karena hanya itu satu-satunya pilihan mudah, karena di ruang koefisien DCT, Anda dapat melakukannya denganbzero()
panggilan sederhana . Saya mencoba hack liar untuk mengubah ini , yang tidak berhasil, tetapi harus memberi Anda rasa keburukan yang terlibat. mengangkat tangan dengan frustrasiPoin yang perlu diingat di sini adalah bahwa Anda kehilangan kualitas saat menyimpan foto ke dalam format kompresi yang hilang . Selama Anda menyimpan foto dalam format lossless (PSD, TIFF, dll) setelah menambahkan perbatasan, Anda tidak akan kehilangan lebih banyak data daripada yang telah hilang dengan menyimpan foto sebagai JPEG di tempat pertama.
sumber
Ini tidak terlalu lossless, tetapi Anda bisa cukup dekat menggunakan GIMP (atau editor lain dengan fitur serupa) dan dua trik berikut:
Pertama, pastikan batas yang Anda tambahkan memiliki kelipatan 8 piksel (dan lebih disukai kelipatan 16 piksel).
Ini penting karena algoritma kompresi JPEG memecah gambar menjadi blok 8 × 8 piksel *, mulai dari sudut kiri atas, dan menerapkan algoritma kompresi lossy secara independen untuk setiap blok. Dengan demikian, setidaknya pada prinsipnya, Anda dapat membuat gambar JPEG tanpa kehilangan dengan menambahkan blok 8 × 8 piksel penuh di sekitar yang sudah ada. Namun, jika Anda mencoba menambahkan batas yang tidak terlalu lebar, blok-blok di gambar yang empuk tidak akan sejajar dengan yang ada di aslinya, dan beberapa kehilangan kompresi tidak bisa dihindari.
*) Sebenarnya, sebagian besar gambar JPEG menggunakan subsampling kroma , yang berarti bahwa hanya bagian skala abu-abu dari gambar tersebut yang dikompres dalam 8 × 8 blok, sedangkan saluran chroma diperkecil 50% sebelum kompresi, menjadikan ukuran blok efektifnya 16 × 16 piksel. Jadi, untuk hasil terbaik, lebar perbatasan Anda harus benar-benar kelipatan 16 piksel. Namun, Anda biasanya dapat pergi dengan batas piksel 8 (atau 24 atau 40 dll), karena sedikit kehilangan kompresi di kroma tidak terlalu terlihat.
Bagian kedua dari trik ini adalah, ketika menyimpan gambar akhir, untuk memilih kotak centang "Gunakan pengaturan kualitas dari gambar asli" di dialog Ekspor Gambar sebagai JPEG (di bawah Pengaturan lanjutan). Lakukan ini bahkan jika sepertinya akan menghasilkan kualitas yang lebih rendah daripada biasanya Anda gunakan!
Pengaturan ini membuat GIMP menggunakan kembali pengaturan kompresi yang sama persis seperti yang digunakan untuk gambar asli, yang biasanya menghilangkan sekitar 99% dari kehilangan kompresi, asalkan Anda belum mengedit gambar terlalu banyak, dan khususnya, bahwa blok di gambar baru masih sejajar dengan yang asli. (Kadang-kadang masih ada beberapa kerugian karena kesalahan pembulatan, tetapi jauh lebih sedikit daripada yang akan terjadi.)
Sebagai demonstrasi cepat, saya mengambil gambar uji JPEG ini dari Wikimedia Commons , yang awalnya disimpan dengan pengaturan kualitas 50 yang cukup rendah, dan menambahkan perbatasan hitam-putih 8px (dan) hitam putih dengan menggunakan metode yang dijelaskan di atas:
Inilah perbedaan antara yang asli (15.1 kB) dan gambar yang diedit (16.7 kB), ditampilkan dengan menggunakan mode layer "Grain extract" GIMP:
Anda dapat melihat beberapa kesalahan kroma yang sangat kecil, yang disebabkan oleh lebar perbatasan tidak kelipatan 16, dan (jika Anda perhatikan dengan cermat) beberapa blok di mana ada juga kerugian kecil di saluran luma karena pembulatan. Namun, secara visual, gambar asli dan gambar empuk semuanya tidak dapat dibedakan, bahkan pada pembesaran 2x dan membalik secara bergantian di antara mereka.
Secara khusus, kontras ini dengan hasil menabrak kualitas JPEG sampai 50-60 sebelum menyimpan gambar empuk, yang menghasilkan gambar berikut 17,6 kB:
Pada perbesaran tinggi, Anda pasti dapat melihat bahwa gambar yang diedit terasa lebih kabur di beberapa tempat daripada yang asli, dan mengambil perbedaan dengan ekstrak Grain menegaskan ini:
sumber
Maaf jika ini bukan yang Anda inginkan tetapi ...
Sepertinya Anda menambahkan batas putih sebagai bantuan untuk memposisikan gambar Anda saat mencetak. Mengapa tidak fokus mempelajari antarmuka pencetakan dengan benar dan menghindari peretasan cerdik seperti ini? Masalah lain yang muncul adalah Anda mengizinkan program pencetakan untuk mengubah ukuran gambar 4680x3120 Anda agar sesuai dengan DPI / resolusi yang benar. Ini mungkin memiliki efek yang lebih parah daripada menyimpan ulang jpeg.
sumber
Jawaban sebelumnya sangat bagus.
Saya hanya akan menambahkan beberapa "aspek psikologis" dari format jpg.
Jika jpg dipersiapkan dengan baik, itu hanya kehilangan sekitar 0,5% informasi. Dalam sebagian besar kasus, sesuatu yang tidak bisa dilihat mata manusia. Anda memerlukan program untuk melakukan beberapa analisis dan melihat perbedaannya (seperti analisis yang baru saja dilakukan Ilmari).
"Kualitas Baik" adalah suatu proses, tidak hanya cara format file menyimpan gambar. Ya, Anda mengkompres ulang file dengan jpg sekali lagi karena Anda benar - benar membutuhkannya. Jika berada dalam situasi yang terkendali, boleh saja melakukannya.
Anda benar - benar membutuhkannya berarti Anda tidak dapat menggunakan format lossless lain, Anda memiliki kebutuhan penyimpanan atau perangkat lunak yang sangat spesifik, atau alur kerja yang sangat ketat.
Jika Anda benar-benar khawatir tentang kualitasnya, mungkin Anda tidak akan menggunakan Paint. Format JPG memiliki beberapa konfigurasi yang tidak dapat Anda kontrol di Paint sama sekali.
Berikut adalah daftar program gratis saya di mana Anda benar-benar dapat mengontrol kompresi jpg, dan opsi yang perlu Anda pilih. (Semua dari mereka dalam dialog simpan jpg)
Irfanview - Aktifkan Nonaktifkan subsampling warna chroma.
FastStone Image Viewer - Subsampling warna: Tidak ada.
Gimp - Subsampling 4: 4: 4
Kesimpulan. Jangan gunakan Paint.
Satu hal yang belum saya periksa. Jika semua program ini mempertahankan profil warna tertanam. Saya akan mengedit posting saya nanti.
sumber
IrfanView bekerja dengan baik untuk saya untuk set gambar. Berikut adalah beberapa cara
Ini adalah prosedur tersimpan saya untuk penyisipan perbatasan - Prosedur Infran untuk menambahkan perbatasan
sumber