Contoh penggunaan ImageMagick -- format gambar yang umum
- Kata pengantar dan indeks contoh penggunaan ImageMagick
- Ringkasan singkat format file gambar yang umum
- Format file gambar GIF
- Tabel warna GIF yang terbatas
- Warna transparan GIF
- Transparansi boolean GIF
- GIF di atas latar belakang warna polos
- GIF di atas pola latar belakang
- GIF untuk latar belakang yang tidak spesifik (dithering transparansi)
- Pemrosesan GIF di luar ImageMagick
- Penanganan offset GIF
- Transparansi JPEG - TIDAK ADA
- Distorsi warna JPEG
- Membaca gambar JPEG
- Menulis gambar JPEG
- Format keluaran JPEG terkait (ringkasan singkat)
- Pemrosesan JPEG di luar ImageMagick (ringkasan singkat)
- Kompresi PNG yang lebih baik
- PNG, peramban web, dan transparansi
- PNG dan kanvas virtual
- Resolusi, densitas, dan satuan PNG
- Subformat PNG
- Kontrol penulisan gambar PNG
-
Mengubah ruang warna gambar -- konversi RGB <=> CMYK
-
Sepatah kata tentang format gambar vektor Format file gambar lainnya
Postscript (PS), Encapsulated PS (EPS), PDF,
PbmPlus/NetPBM (PBM, PGM, PPM, PNM, PAM),
TIFF, BMP, ICO, Gambar digital RAW (CRW,CR2,dll),
MPEG, M2V dan AVI, MNG, Digital Picture Exchange (DPX),
PSD, WMF, MacroMedia Flash (SWF),
Konversi HTML halaman web, Format pencetakan PCL,
Format Kodak PhotoCD (PCD), Data RGB mentah, Banyak format file gambar punya keunikan yang perlu diingat ketika format itu dipakai. Halaman ini membahas kebutuhan khusus tersebut, sekaligus cara memperbaiki hasil pada format-format itu.
Ringkasan singkat format file gambar yang umum
Untuk pengantar tentang membaca dan menulis format gambar, lihat Format file gambar. Sedangkan daftar seluruh format file ImageMagick ada di halaman format gambar IM. Berikut ringkasan yang sangat singkat tentang format file gambar 'biasa' yang paling umum, beserta kelebihan dan kekurangannya secara umum...
- GIF
- Format ini sangat umum, dan sudah ada begitu lama sehingga semua program pengolah gambar memahaminya. Namun jumlah warnanya terbatas (tabel 256 warna) dan penyimpanannya hanya berkualitas 8 bit. Meski begitu, run-length encoding bawaannya membuat gambar yang hanya memakai sedikit warna tersimpan dengan sangat efisien. Formatnya memang punya transparansi, tetapi hanya memahami transparansi boolean (hidup/mati) sehingga menderita 'aliasing' atau 'jaggies'. Teks polos bergaris tipis rusak parah bila disimpan sebagai gambar GIF transparan. Satu-satunya solusi untuk masalah ini adalah mengikat gambar GIF pada latar belakang tertentu dari halaman web tempat gambar itu dipakai. Format GIF dapat menyimpan banyak gambar untuk membentuk urutan animasi, dan untuk keperluan itu ia juga menyimpan informasi ukuran kanvas gambar dan offset (page). Perhatikan bahwa offset negatif tidak didukung, dan usaha memakainya akan mengembalikan offset itu ke nol. Format ini paling cocok untuk gambar kecil berupa kartun, gambar garis, dan ikon kecil, yang semuanya berwarna terbatas sehingga terkompresi dengan baik. Namun penggunaannya sebaiknya dihindari bila format yang lebih baru seperti PNG tersedia.
- JPEG
- Sama sekali tidak menangani transparansi. Gambarnya setara dengan hasil operasi "
-alpha off" yang membuang kanal alpha, sehingga transparansi latar belakang umumnya menjadi hitam, tergantung pemrosesan gambar yang dipakai untuk menghasilkan gambar itu. Format ini juga 'lossy', menimbulkan efek tepi pada garis dan batas yang tajam, sehingga sebaiknya tidak dipakai untuk pemrosesan gambar antara, atau untuk menyimpan gambar asli (kecuali gambar itu memang sudah dalam format ini). Format ini sangat cocok untuk penyimpanan jangka panjang foto dunia nyata, tetapi hindari bila gambar masih akan diproses lebih lanjut, atau bila gambar memuat area luas berwarna polos. - PNG
- Format ini dimaksudkan untuk pada akhirnya menggantikan format lama seperti GIF dan TIFF. Ini format modern yang mampu menangani kualitas 16 bit dengan empat kanal warna sehingga warna semitransparan bisa dipakai sepenuhnya. Ia juga menyertakan sangat banyak pilihan kompresi gambar lossless. Kekurangan terbesarnya adalah format ini masih relatif baru, sehingga peramban web Microsoft IE (v6) tidak otomatis menanganinya dengan benar. Untungnya tersedia perbaikan untuk masalah itu. Format ini tidak menyimpan informasi ukuran kanvas (yang disimpan GIF), tetapi menyimpan offset kanvas bahkan offset negatif (yang tidak dilakukan GIF), meski sebagian peramban web bermasalah bila offset negatif dipakai, jadi ini tidak disarankan untuk gambar akhir yang akan ditampilkan di peramban. Untuk menyimpan gambar 'berlapis' antara, kemampuan menyimpan offset negatif bisa sangat penting dan sering jauh lebih penting daripada ketidakmampuannya menyimpan informasi ukuran kanvas.
- MNG
- Ini format multi-gambar untuk PNG, dan memungkinkan animasi sampai tingkat kualitas dan kecepatan film. Saya ingin sebuah contoh sederhana penggunaan MNG, jadi kalau Anda punya, kirimkan kepada saya. Format animasi MNG tampaknya mulai usang dan sudah ditinggalkan sebagian peramban web seperti FireFox.
- TIFF
- Ini format pertukaran gambar yang dikembangkan untuk memindahkan gambar berkualitas tinggi antarprogram, pada masa belum ada format gambar yang serius. Sayangnya, karena awal mula itu, format ini terus diubah dengan deretan fitur dan gaya kompresi yang serampangan, dan tidak ada program yang memahami semuanya. Kini format ini praktis hanya dipakai "
Photoshop" di platform Windows, dan itulah satu-satunya sumber yang menyediakan semacam acuan standar bagi format gambar TIFF. File TIFF bisa menampung banyak gambar, meski sedikit aplikasi selain IM yang menangani TIFF multi-gambar. Umumnya, kecuali format internal gambar TIFF dijaga tetap sederhana, tidak ada jaminan bahwa file TIFF yang dihasilkan satu program dapat dipakai program lain, termasuk IM atau bahkan "Photoshop" itu sendiri. Karena itu saya sama sekali tidak menyarankan format ini! Saya sarankan pakai format lain selain TIFF (atau JPEG), terutama untuk menyimpan gambar dalam jangka panjang. Beberapa catatan yang saya punya tentang format ini dan masalahnya ada di bawah, pada bagian Format lain-lain, TIFF. Catatan penggunaan ini saya temukan di milis dan forum IM, karena saya sendiri tidak memakai dan tidak perlu memakai TIFF. - Format video
- Format animasi berkualitas film lainnya, yang umumnya memakai kompresi lossy untuk mengurangi ukuran (dan kualitas) film. Kedua format terus berubah, dengan perbaikan dan fitur pembatas keamanan, sehingga segala bentuk pemrosesan menjadi sulit. Pada hitungan terakhir ada lebih dari 200 'codec' format video yang umum dipakai untuk satu keperluan atau keperluan lain. Karena itu IM tidak menangani format ini secara langsung, melainkan bersandar pada paket perangkat lunak lain untuk memproses tiap frame ke dalam dan ke luar animasi. Program 'delegate' tersebut antara lain "
mpeg2decode", "mpeg2encode", dan "mplayer". Lihat MPEG, M2V, dan AVI di bawah).
| Sebagian sistem (seperti Ubuntu) menonaktifkan penggunaan format file gambar tertentu lewat kebijakan keamanan. Ketikmagick -list policy untuk melihat kebijakan apa saja yang ada di sistem Anda dan dari mana kebijakan itu ditetapkan.
Format file gambar GIF
Format GIF adalah format file gambar yang sangat dikenal luas, karena sudah ada sejak sangat sangat sangat lama (sejak akhir 1980-an). Format ini sering dipilih untuk gambar yang akan ditampilkan di halaman web yang melibatkan transparansi atau animasi gambar. Ia juga boleh dibilang satu-satunya format yang benar-benar dipahami semua peramban web. Sayangnya format ini tidak begitu baik untuk apa pun selain gambar garis, bagan, diagram, dan kartun. Sebabnya, format ini terbatas pada maksimal 256 warna, salah satunya biasanya ditandai sebagai transparan. Menandai satu warna tertentu dalam gambar sebagai transparan punya beberapa kelemahan. Bila warna yang dijadikan transparan salah pilih, bagian lain gambar bisa ikut menjadi transparan padahal tidak dimaksudkan begitu. Berhati-hatilah agar itu tidak terjadi. Lebih jauh lagi, kemampuan transparansinya bersifat 'boolean', yang pada dasarnya berarti sepenuhnya hidup atau sepenuhnya mati. Warna semitransparan sama sekali tidak mungkin, dan bila ada harus dijadikan transparan atau opak. Artinya format ini tidak bisa memberikan anti-aliasing apa pun pada tepi gambar, dan hasilnya biasanya 'jaggies' yang parah. (Lihat Anti-aliasing) Karena keterbatasan warna format gambar "GIF" menimbulkan begitu banyak masalah, terutama pada paket pemrosesan gambar berkualitas tinggi seperti ImageMagick, saya ingin mengatakannya di muka...
Hindari format GIF bila memungkinkan.
Kalau memang harus memakainya, lakukan hanya pada langkah terakhir.
Terakhir, dalam waktu yang lama algoritme kompresi yang dipakai GIF dipatenkan. Akibatnya banyak program pemrosesan gambar, seperti ImageMagick, tidak boleh memakainya. Karena itu program IM yang sangat tua mengeluarkan gambar format GIF tanpa kompresi, sehingga memakan ruang disk lebih besar dari semestinya. Hal ini bisa diperbaiki dengan program kompresi GIF secara batch seperti "**Gifsicle**" atau "**InterGIF**". Namun karena patennya habis sepenuhnya pada pertengahan 2004, rilis IM sekarang sudah mengaktifkan kembali kompresi gambar GIF. Kompresi gambarnya juga cukup sederhana, dan bekerja paling baik pada gambar dengan area luas berwarna polos yang tidak berubah. Atau pada pola berulang sederhana dari kumpulan warna yang sama, seperti yang dihasilkan ordered dithering (bukan dither bawaan IM). Terakhir, gambar GIF bisa menyimpan banyak gambar dalam satu file. Kemampuan inilah yang dipakai untuk menghasilkan animasi GIF yang dipahami praktis semua peramban web, sejak teknik itu pertama kali diperkenalkan peramban "Netscape" yang sangat tua. Ringkasnya format file gambar GIF dengan tabel warnanya yang terbatas, transparansi boolean, dan kompresi yang sederhana (bila diaktifkan), cocok sekali untuk gambar kecil seperti thumbnail, dan terutama ikon, logo, serta simbol "bergaya kartun" dengan area luas berwarna polos. Kemampuan animasinya juga menjadikannya cara ideal untuk membuat logo dan iklan mencolok penarik perhatian yang bertebaran di World Wide Web. Untuk keperluan lain, keterbatasannya membuat GIF menjadi format file gambar yang buruk, dan lebih baik beralih ke JPEG, PNG, atau format gambar video sesuai kebutuhan.
Tabel warna GIF yang terbatas
FUTURE: color reduction examples -- reference basic color dithering
Ensuring that a specific color is present in the final GIF image
Map color tables to color reduce.
See [Color Quantization](quantize.html#colors).
Lihat Scripting bullet 3-D lanjutan untuk contoh pembuatan banyak gambar dalam suatu rentang warna. Teknik ini juga bisa dipakai untuk secara auto-magick mengubah gambar Anda menjadi banyak gambar bagi berbagai warna dan pola latar belakang.
Warna transparan GIF
Sebagai contoh, di sini kita memakai identify untuk mengambil warna transparan dan tabel warna yang dipakai suatu file gambar GIF untuk merepresentasikan transparansi. Skrip perl itu hanya mengambil bidang tertentu yang menarik (yang bisa terdiri atas banyak baris). | |
magick identify -verbose hand_point.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
![[IM Output]](../static/img/images/hand_point.gif)
| ![[IM Output]](../static/img/formats/hand_point.txt.gif)
Seperti terlihat, warna abu-abu transparan ('#CCCCCC00') dipakai untuk gambar ini dan warna tersebut punya entri tersendiri di tabel warna. Terlihat pula bahwa meski gambar ini hanya memakai 5 warna (satu di antaranya transparan), tabel warna yang dipakai berukuran 8 warna. Itu karena format file GIF hanya bisa memakai tabel warna yang ukurannya pangkat 2. Artinya tabel warna selalu berukuran 2, 4, 8, 16, 32, 64, 128, atau 256 entri warna. Karena itu 3 entri terakhir tabel warna tidak terpakai. Sebenarnya entri itu hanya tidak diacu. Dalam beberapa kasus entri yang tidak terpakai ini bukan tiga entri terakhir di tabel warna, dan bisa saja memuat nilai warna apa pun. Nilai warna kembar juga sebenarnya bisa ada, meski IM biasanya membuang entri warna kembar semacam itu bila gambarnya diproses dengan cara tertentu. Sejak IM versi 6.2.9-2 (dan pada beberapa versi lebih lama), IM mempertahankan tabel warna, lebih khusus lagi nilai warna transparan, setiap kali membaca, memproses, dan menulis gambar GIF. | |
magick hand_point.gif -fill white -opaque wheat hand_white.gif
magick identify -verbose hand_white.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
![[IM Output]](../static/img/formats/hand_white.gif)
| ![[IM Output]](../static/img/formats/hand_white.txt.gif)
Seperti terlihat, meski gambar diubah (semua piksel berwarna 'wheat' diganti warna 'white'), warna transparan yang dipakai tetap dipertahankan. Namun bila gambar akhirnya tidak punya transparansi, entri warna transparansi ('Alpha:') di tabel warna dibuang sama sekali. | |
magick hand_point.gif -background white -flatten hand_flatten.gif
magick identify -verbose hand_flatten.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
![[IM Output]](../static/img/formats/hand_flatten.gif)
| ![[IM Output]](../static/img/formats/hand_flatten.txt.gif)
Untuk mengubah warna transparan yang dipakai format file GIF, gunakan pengaturan (setting) keluaran "-transparent-color" (ditambahkan pada IM v6.2.9-2). Sebagai contoh... | |
magick hand_point.gif -transparent-color wheat hand_wheat.gif
magick identify -verbose hand_wheat.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Seperti terlihat, meski hasilnya tidak tampak berbeda dari aslinya, warna transparan diubah menjadi versi sepenuhnya transparan dari warna 'wheat'. Bila diperhatikan lebih teliti, tabel warna gambar itu kini memuat dua warna 'wheat' alias '#F5DEB3'. Yakni satu wheat transparan dan satu wheat opak. Sejak IM versi 6.2.9-2, hal ini tidak menimbulkan masalah. Walaupun format file gambar GIF hanya bisa mendefinisikan satu warna transparan. Untuk apa melakukannya? Karena sebagian peramban web dan program grafis yang sangat tua tidak memahami transparansi GIF. Jadi opsi ini memungkinkan penetapan warna apa yang semestinya dipakai area transparan dalam situasi itu. Pilihan lazim untuk warna transparan adalah 'white' bagi peramban modern, ATAU yang lebih lazim 'grey75' ('#BFBFBF'), yaitu warna halaman peramban web "mosaic" yang asli. Pilihan warna transparan populer lainnya adalah 'grey' ('#BEBEBE') dan 'silver' ('#C0C0C0'), yang dipakai gambar 'tangan' di atas. Ini menunjukkan betapa populernya bagian tertentu dari rentang warna grayscale itu sebagai warna transparan. FUTURE: add link to color selection. |
Sebelum IM v6.2.9-2 dan dibuatnya pengaturan keluaran "-transparent-color", IM biasanya menyimpan transparansi gambar sebagai warna khusus 'none' (hitam sepenuhnya transparan), yang kurang enak dilihat saat transparansi gagal bekerja. |
|---|---|
Perhatikan bahwa menyetel "-transparent-color" TIDAK menambahkan transparansi apa pun ke gambar GIF, dan tidak pula mengubah warna yang disebutkan menjadi transparan. Yang dilakukan opsi ini hanyalah menentukan warna apa yang ditempatkan di tabel warna bagi indeks warna yang dipakai untuk merepresentasikan warna transparan dalam gambar GIF. Untuk mengubah satu warna tertentu (persis) menjadi transparan, gunakan "-transparent" operator penggantian warna. |
Transparansi boolean GIF
Karena format GIF TIDAK memahami warna semitransparan, sementara ImageMagick secara bawaan menghasilkan warna semitransparan sebagai bagian biasa dari metode anti-aliasing, gambar yang disimpan ke format ini sering kali tampak buruk. Sebagai contoh, di sini saya menggambar lingkaran hitam sederhana di atas latar belakang transparan. Saya juga akan membuat tampilan yang diperbesar dari tepi gambar itu, supaya jelas apa yang terjadi. Pertama saya keluarkan dalam format PNG... |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.png
magick circle.png -crop 10x10+40+3 +repage -scale 600% circle_mag.png
![[IM Output]](../static/img/formats/circle_mag.png)
Seperti terlihat, tepi lingkaran di sebelah kiri (dalam format PNG) tampak sangat bersih, meski sedikit kabur. Piksel semitransparannya terlihat pada perbesarannya. Sekarang mari kita keluarkan gambar yang sama memakai format gambar "GIF"... |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.gif
magick circle.gif -crop 10x10+40+3 +repage -scale 600% circle_mag.gif
![[IM Output]](../static/img/formats/circle_mag.gif)
Hasilnya, lingkaran itu punya efek tangga yang sangat tajam di sepanjang tepi luarnya, sementara bagian dalamnya tetap ter-anti-alias dengan baik. Pada dasarnya format PNG bisa menyimpan informasi piksel semitransparan, sedangkan GIF tidak. Format gambar GIF hanya bisa menyimpan satu warna transparan murni. Dengan kata lain...
Format GIF punya transparansi hidup/mati alias boolean
Bila GIF hasilnya diperhatikan lebih teliti, piksel semitransparan ternyata bisa menjadi sepenuhnya transparan atau sepenuhnya opak. | _Apa yang sebenarnya dilakukan ImageMagick terhadap piksel semitransparan bergantung pada versi IM yang dipakai. Untuk waktu yang lama hal ini tidak didefinisikan dengan benar, dan perilaku suatu versi sering bergantung pada 'perbaikan bug' terakhir yang diterapkan akibat laporan bug dari pengguna.
Sejak v6.2.9-6 ImageMagick secara bawaan seharusnya men-threshold gambar pada tingkat 50% baik untuk format gambar GIF maupun XPM. Cara ini sudah menjadi standar yang diterima para penangan gambar, sambil tetap membuka peluang untuk menetapkan metode sendiri dalam menghadapi masalah transparansi format file GIF.
| _Karena keterbatasan GIF, IM menjalankan rangkaian operasi berikut sebelum menyimpan ke format file GIF...
_-channel A -threshold 50%
bila ada piksel (sepenuhnya) transparan, maka...
-quantize transparent -colors 255
selain itu, bila tidak ada piksel transparan...
-colors 256_
_Proses kuantisasi -colors otomatis tidak melakukan apa pun bila warna dalam gambar lebih sedikit dari jumlah itu. Ia juga tidak melakukan apa pun bila gambar punya colormap yang sah (yang ditetapkan lewat "+/-map").
Ia juga tidak berusaha memakai peta warna bersama untuk file GIF multi-gambar. Karena itu bila warna sangat berbeda dari satu frame ke frame berikutnya, tabel warna lokal bisa ditambahkan ke tiap gambar yang disimpan ke format file GIF.
Selain itu pengaturan yang dipakai di atas tidak permanen, hanya sementara untuk gambar yang sedang disimpan. Artinya, bila "-write image.gif" dipakai, pengaturan yang berlaku selama proses itu tidak memengaruhi operasi berikutnya._
Thresholding bisa juga dilakukan sendiri, dan itu disarankan bila Anda tidak yakin versi IM (terutama versi lama) mana yang dipakai. |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' \
-channel A -threshold 50% circle_threshold.gif
magick circle_threshold.gif -crop 10x10+40+3 +repage \
-scale 600% circle_threshold_mag.gif
![[IM Output]](../static/img/formats/circle_threshold_mag.gif)
Contoh di atas menjalankan "-threshold 50%" yang sama pada kanal alpha seperti yang kini dilakukan IM secara otomatis, yaitu bila sebuah piksel lebih dari 50% transparan, piksel itu dijadikan sepenuhnya transparan (memakai warna yang diberikan pengaturan "-transparent-color" bila didefinisikan. Namun kini tingkat threshold-nya bisa diatur sesuka hati. Men-threshold kanal alpha pada 50% bekerja baik untuk sebagian besar jenis gambar. Terutama yang tepinya sederhana, tetapi teknik ini rontok cukup parah ketika harus menghadapi area luas berisi piksel semitransparan. Inilah yang akan dibahas sebagian besar contoh penanganan GIF berikutnya. Misalnya kita ingin menyimpan gambar dengan bayangan semitransparan yang kabur dan luas seperti gambar ini (dalam format PNG)... |
magick -size 70x60 xc:none -font Candice -pointsize 50 \
-fill black -annotate +10+45 'A' -channel RGBA -blur 0x5 \
-fill white -stroke black -draw "text 5,40 'A'" a.png
![[IM Output]](../static/img/formats/a.png)
Kalau huruf ini langsung di-magick ke format GIF, atau bahkan memakai operasi "-threshold" untuk mengendalikan transparansi boolean, hasilnya sungguh mengecewakan. |
magick a.png a.gif
magick a.png -channel A -threshold 75% a_threshold.gif
![[IM Output]](../static/img/formats/a_threshold.gif)
Gambar pertama adalah penyimpanan biasa ke format GIF, yang seperti terlihat men-threshold piksel semitransparan pada '50%'; gambar kedua di-threshold pada '75%' sehingga lebih banyak piksel semitransparan menjadi sepenuhnya opak (alias terlihat). Bila yang diinginkan hanyalah membuang semua piksel semitransparan (misalnya bayangannya), cobalah sesuatu seperti "-threshold 15%", untuk membuang hampir semua piksel semitransparan. |
magick a.png -channel A -threshold 15% a_no_shadow.gif
![[IM Output]](../static/img/formats/a_no_shadow.gif)
Sebagian besar solusi lain untuk masalah transparansi boolean GIF adalah mengikat gambar erat-erat pada warna latar belakang halaman web tempatnya berada. Caranya rumit dan berliku, dan itulah yang akan kita lihat sekarang. GIF di atas latar belakang warna polos Yang sebenarnya kita inginkan adalah entah bagaimana mempertahankan gradasi piksel semitransparan dan yang ter-anti-alias, dan tetap menampilkannya dengan rapi di WWW. Untuk itu kita harus sedikit memutar otak. Solusi yang lazim adalah mencocokkan gambar dengan latar belakang tempat gambar itu akan ditampilkan. Ini mudah dilakukan: cukup timpakan gambar ke latar belakang berwarna yang sesuai sebelum disimpan ke format GIF. Dengan begitu transparansi dalam bentuk apa pun tidak diperlukan lagi dan persoalannya lenyap. Tentu saja jumlah warna yang terbatas tetap menjadi persoalan, tetapi sering kali bukan masalah besar. |
magick a.png -background LightSteelBlue -flatten a_overlay.gif
![[IM Output]](../static/img/formats/a_overlay.gif)
Nah, nyaris sempurna! Tentu saja agar metode ini bekerja benar, Anda perlu tahu persis warna latar belakang tempat gambar akan dipakai. Selain itu, setelah selesai, gambar itu tidak akan bagus di latar belakang lain mana pun. Pengorbanan yang besar. GIF di atas pola latar belakang Tetapi bagaimana kalau latar belakangnya berupa pola, bukan sekadar warna polos? Bisa saja timpaan itu ditempatkan di atas salinan pola latar belakang supaya pola pada gambar hasilnya cocok dengan pola halaman web. Namun cara itu butuh banyak coba-coba agar latar belakang di dalam gambar sejajar dengan halaman web. Lagi pula hasilnya hanya bisa dijamin untuk satu peramban tertentu, dan hanya untuk versi peramban itu saja. Bukan ide bagus untuk halaman web, jadi jangan repot-repot mencoba. Saya jelas tidak akan mencobanya. Alih-alih mencocokkan pola latar belakang secara sempurna, mari kita timpakan saja ke warna yang setidaknya cocok dengan latar belakang yang hendak dipakai. Sebagai contoh, mari kita timpakan gambar kita ke pola latar belakang 'khas' bergaya gelembung. Tetapi pertama-tama kita perlu tahu warna rata-rata latar belakang ini. Cara sederhana untuk menemukan warna itu adalah cukup me-scale gambar menjadi satu piksel, lalu membaca warna hasilnya.
magick bg.gif -scale 1x1\! -depth 8 txt:-
[![\[IM Text\]](../static/img/formats/bg_color_avg.txt.gif)](../static/img/formats/bg_color_avg.txt)
Lihat format teks enumerasi piksel IM untuk keterangan lebih lanjut tentang format keluaran khusus "txt:" yang dipakai. Sekarang mari kita setel transparansi latar belakang gambar memakai "-flatten". |
magick a.png -background '#BABBD7' -flatten a_bg.gif
| | ![[IM Output]](../static/img/formats/a_bg.gif)
Saya sudah menyiapkan halaman web ini agar gambar kita ditimpakan pada latar belakang tersebut, walaupun latar belakang itu BUKAN bagian dari gambarnya sendiri. Meski warna latar belakang yang dipakai cocok dengan warna umum pola latar belakang, di sekelilingnya tetap tampak persegi panjang warna polos yang sangat mencolok dan tanpa pola latar belakang. Satu solusi praktis adalah mendeklarasikan warna yang kita timpakan itu sebagai warna "-transparent" pada keluaran GIF. Dengan begitu 'kekotakan' gambar hilang. Menambahkan sedikit faktor fuzz juga memperbaiki hasilnya dan mengatur seberapa luas ruang yang dipakai warna transparan, sama seperti threshold di atas. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 5% -transparent '#B9BBD6' a_bg_trans.gif
| | ![[IM Output]](../static/img/formats/a_bg_trans.gif)
Ini biasanya sudah cukup untuk menangani transparansi pada sebagian besar gambar GIF, walau memang mengikat gambar pada satu warna latar belakang tertentu. Pada dasarnya kita memakai transparansi untuk menetapkan bentuk garis luar gambar, bukan transparansi yang sesungguhnya. Dengan memakai satu warna untuk timpaan sekaligus transparansi GIF sehingga cocok dengan pola latar belakang, batas tempat gambar berakhir dan pola latar belakang dimulai jadi tidak lagi kentara.
Namun berhati-hatilah dengan pengaturan "-fuzz", sebab kalau berlebihan bukan cuma bagian luar gambar yang berakhir menjadi transparan! |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -transparent '#B9BBD6' a_bg_overfuzz.gif
| | ![[IM Output]](../static/img/formats/a_bg_overfuzz.gif)
Cara ini juga gagal bila di dalam gambar itu sendiri dipakai warna yang mirip warna latar belakang. Karena itu teknik ini tidak disarankan untuk gambar umum, hanya untuk kasus tertentu. Untuk mengatasi masalah ini kita memakai '-alpha floodfill' guna menetapkan area yang ingin kita buat transparan. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -draw 'fill none alpha 0,0 floodfill' a_bg_none.gif
| | ![[IM Output]](../static/img/formats/a_bg_none.gif)
Sekarang, selama batas gambar kita tidak 'bocor', kita boleh memakai warna yang mirip latar belakang di dalam gambar tanpa membuatnya ikut transparan gara-gara 'fuzz berlebih'. Tentu saja bila gambar kita punya 'lubang', lubang itu pun harus diurus. Dalam kasus itu 'transparansi ber-fuzz' yang sebelumnya mungkin bekerja lebih baik. Tadi saya bilang menangani warna transparan GIF itu mudah! TIDAK!
Teknik alternatif, terutama untuk gambar dengan tepi ter-anti-alias yang tajam, adalah cukup menambahkan garis luar minimum berwarna latar belakang. Lihat Transparansi garis luar atau halo.
Menghapus warna latar belakang... Mencoba menghapus warna latar belakang tertentu dari gambar GIF yang sudah jadi tidaklah mudah. Ini sangat sulit bila gambar yang ditimpakan juga memuat warna latar belakang itu, karena mana yang latar belakang dan mana yang bukan jadi tidak jelas. Solusi terbaik adalah memperoleh salinan timpaan GIF yang sama di atas dua warna latar belakang berbeda yang diketahui pasti. Dengan dua gambar semacam itu, timpaan aslinya beserta seluruh piksel semitransparannya bisa dipulihkan dengan sempurna. Lihat Penghapusan latar belakang dengan dua latar. Bila dua gambar itu tidak tersedia, semitransparansi gambar tidak bisa dipulihkan sempurna, tetapi ada teknik yang hasilnya lumayan meski tidak sempurna. Untuk itu lihat bagian lain dari Penghapusan latar belakang.
GIF untuk latar belakang yang tidak spesifik (atau melakukan dithering pada transparansi)
FUTURE: This will move into a more generalise (non-GIF specific), alpha
dithering section.
Masalah terbesar cara di atas adalah ia hanya bekerja bila kebetulan Anda tahu persis warna latar belakang, atau pola latar belakang, tempat gambar akan dipakai. Kalau tidak tahu pun, belum semuanya hilang. Seperti terlihat di atas, threshold tidak bekerja baik pada gambar dengan area transparansi yang sangat luas, seperti bayangan kabur. Tetapi ada teknik lain bernama dithering yang bisa, dan TIDAK menuntut pengetahuan tentang latar belakang tempat gambar akan dipakai. Pada dasarnya dithering membatasi transparansi ke nilai hidup/mati, lalu menciptakan kesan semitransparansi pada area yang lebih luas lewat pola piksel. Dengan kata lain, ia memalsukan semitransparansi. Metode ini dicontohkan pada apa yang kini dikenal sebagai "Opossum Examples". Sayangnya contoh-contoh itu tidak memberikan perintah yang dipakai untuk menghasilkannya. Demi kelengkapan, saya akan mencoba memperagakannya lagi di sini. Operator "-monochrome" mengubah semua warna dalam gambar menjadi "dither koreksi error Floyd-Steinberg" hitam putih murni. Namun karena ia mengubah gambar grayscale menjadi hanya warna hitam dan putih murni, kita perlu mengambil mask kanal alpha dari gambar, men-dither mask itu, lalu mengembalikannya ke dalam gambar. |
magick a.png \( +clone -fx a -alpha off -monochrome \) \
-compose CopyOpacity -composite a_dither.gif
![[IM Output]](../static/img/formats/a_dither.gif)
Dengan cara serupa, ada beberapa operator dither lain yang bisa dibatasi hanya pada kanal alpha memakai pengaturan "-channel" (tidak seperti "-monochrome").
magick a.png -channel A -ordered-dither o2x2 a_ordered_2x2.gif
magick a.png -channel A -ordered-dither o3x3 a_ordered_3x3.gif
magick a.png -channel A -ordered-dither o4x4 a_ordered_4x4.gif
magick a.png -channel A -ordered-dither checks a_halftone_2.gif
magick a.png -channel A -ordered-dither h4x4a a_halftone_4.gif
magick a.png -channel A -ordered-dither h6x6a a_halftone_6.gif
magick a.png -channel A -ordered-dither h8x8a a_halftone_8.gif
magick a.png -channel A -random-threshold 5x95% a_random_5x95.gif
magick a.png -channel A -random-threshold 5x70% a_random_5x60.gif
magick a.png -channel A -random-threshold 50x95% a_random_50x95.gif
magick a.png -channel A -random-threshold 45x55% a_random_45x55.gif
magick a.png -channel A -random-threshold 50x50% a_random_50x50.gif
Seperti terlihat, "-ordered-dither" menghasilkan pola warna transparan dan opak untuk mewakili transparansi keseluruhan. Namun cara ini memunculkan pola beraturan yang sangat kentara. Meski begitu, dengan memakai warna bayangan yang mirip tetapi lebih gelap daripada latar belakang biasa, pola itu bisa dibuat nyaris tak terlihat sama sekali. Pola 'checks' (gambar pertama di baris kedua) cukup menarik karena merupakan pola 3 tingkat yang sangat sederhana, bersih, dan rapi. | _"-ordered-dither" diperluas pada IM v6.2.8-6 dengan pola dither 'half-tone'. Operator ini kemudian direvisi total pada IM v6.3.0 dengan pola dither bernama (pakai "-list threshold" untuk melihat daftar lengkapnya). Anda bahkan bisa membuat pola dithering sendiri untuk menghasilkan efek khusus lain. Lihat Contoh ordered dithering dan catatan pemutakhiran Ordered Dither untuk keterangan lebih lanjut.
Sebelum pengembangan ulang itu, argumennya hanya boleh berupa string geometry '2x2', '3x3', dan '4x4' (yang sampai sekarang masih bekerja). Namun apa pun selain ketiganya dianggap sebagai argumen "-random-threshold", biasanya dengan hasil yang kacau. Berhati-hatilah saat memakai opsi ini pada versi IM yang sangat lama.
Sebaliknya "-random-threshold" menghasilkan dither acak yang sangat bervariasi dan berbeda setiap kali dijalankan. Namun sifat yang murni acak dari algoritme dither ini cenderung menghasilkan 'gumpalan' piksel yang besar, bukan dithering yang lebih halus dan ditempatkan secara algoritmis seperti yang dihasilkan operator "-monochrome" "Floyd-Steinberg". Keunggulan besar "-random-threshold" adalah kendali batas yang disediakannya. Dengan membuat parameternya sangat ketat (misalnya '50x50%'), "-random-threshold" di-magick menjadi operator "-threshold" biasa. Dengan sedikit melonggarkannya, hanya bagian paling tepi dari batas threshold yang diacak (misalnya memakai '45x55%'). | _Argumen "-random-threshold" adalah 'PxQ', dengan P sebagai threshold minimum dan Q maksimumnya (simbol '%' wajib ada). Jadi "5x95%" berarti apa pun di bawah 5% dari MaxRGB disetel ke 0, apa pun di atas 95% disetel ke MaxRGB, selebihnya kita pilih nilai acak antara 5% dan 95% dari MaxRGB sebagai tingkat threshold untuk piksel itu. Argumen bernilai "5x95%" agaknya nilai terbaik untuk sebagian besar situasi.
Tampilan akhirnya bisa diperbaiki dengan memakai warna mid-tone yang lebih gelap (misalnya abu-abu tua) alih-alih hitam sebagai warna bayangan. Dengan begitu warnanya cenderung lebih membaur ke latar belakang sehingga dither-nya tidak semencolok contoh di atas. Kalau warna latar belakang kira-kira sudah diketahui, warna yang lebih gelap dari corak itu bahkan bisa dipakai supaya bayangannya menyatu lebih baik tanpa terikat pada corak latar belakang yang persis. Semacam mencampur sedikit kedua metode untuk memperbaiki hasil keseluruhan. Pada dasarnya, makin banyak usaha yang dicurahkan, makin baik hasilnya.
FUTURE: dither example with a dither color matching the light blue background
of this web page.
| Pemrosesan GIF di luar ImageMagick giftrans | Menampilkan semua atribut dan tabel warna gambar GIF. Program ini juga bisa menetapkan indeks warna tertentu sebagai warna transparan tanpa mengubah urutan tabel warna gambar, atau menggabungkan indeks warna yang memuat warna sama (situasi yang tidak disarankan). Menurut saya perintah IM "magick identify" lebih baik dalam menampilkan atribut gambar, termasuk 'loop repeat limit' pada "Mosaic Application Extension" yang dipakai animasi gambar. Lihat juga skrip "gif2anim" (di bawah), yang dulu memakai program ini untuk mengambil metadata gambar GIF yang diperlukan untuk membangun ulang GIF dari tiap 'frame' yang diekstrak. Kini skrip itu hanya memakai "magick identify" untuk mengambil metadata tersebut. |
|---|---|
| GIFsicle | Ini program pengoptimal gambar serbaguna, yang tujuan awalnya adalah menambahkan kembali kompresi pada gambar GIF saat algoritmenya masih terlindungi hak cipta. Program ini juga bisa dipakai untuk menambahkan komentar, membuat animasi GIF, dan mengoptimalkan animasi seperti yang dilakukan operator IM "-deconstruct", tetapi dengan optimisasi transparansi lebih jauh seperti Optimisasi kompresi LZW. |
| InterGIF | Program yang mirip GIFsicle, dirancang untuk memproses GIF beranimasi. Namun ia hanya menyediakan Optimisasi kompresi transparansi. Meski begitu fitur lainnya bisa saja berguna. Kirimkan pendapat Anda kepada saya. |
| gif2anim | Skrip shell yang menerima file animasi GIF, lalu mengekstrak seluruh gambar frame satu per satu, sekaligus sebuah file ".anim" yang memuat semua pengaturan IM "magick yang diperlukan untuk membangun ulang animasi dari gambar frame yang diekstrak. |
| anim2gif | Kebalikan skrip di atas: menerima file ".anim" yang memuat semua pengaturan IM "magick lalu membangun ulang gambar animasi GIF. Skrip ini sangat berguna untuk mempelajari, menyunting, menyesuaikan, dan menggabungkan file animasi GIF. Untuk penggunaan dasarnya lihat Informasi daftar animasi. Lihat juga Penyambungan animasi (tersinkron waktu) untuk contoh praktis penggunaannya. |
Penanganan offset gambar GIF
Format GIF memang menyimpan gambar beserta offset sebagai bagian dari penanganan animasi gambarnya, tetapi ia tidak menyimpan offset negatif. Setiap usaha menyimpan offset negatif ke gambar GIF berakhir dengan offset itu dikembalikan ke nol. Ini bisa sangat menjengkelkan saat merancang animasi gambar GIF. Bila peramban web Internet Explorer diberi gambar GIF yang 'page offset'-nya menempatkan gambar di luar 'page canvas size', peramban itu mengabaikan ukuran dan offset page lalu menampilkannya seolah-olah tanpa offset. Sebaliknya peramban web Mozilla yang kuno hanya menampilkan kanvas gambar dan menerapkan offset pada gambarnya. Akibatnya bisa muncul kanvas kosong tanpa data gambar sama sekali, yang meski benar, bisa mengejutkan. Keduanya menampilkan gambar dengan ukuran kanvas page, beserta offset page yang sesuai, bila gambarnya termuat seluruhnya pada kanvas page itu.
Format keluaran GIF terkait
GIF87: Mengeluarkan gambar dalam format GIF 87a yang lebih lama.
Bila peramban web "Mozilla" melihat format lama ini, ia akan mengabaikan sepenuhnya geometry page gambar, dan tidak memakai frame 'page' yang lebih besar maupun offset gambar. IM versi 6.0.4 dan sebelumnya biasanya menghasilkan format GIF89a. Tetapi bila gambarnya berupa animasi GIF dan dipecah menjadi gambar terpisah memakai +adjoin, IM memakai GIF87a, sehingga hasilnya tidak konsisten saat ditampilkan di peramban web. IM setelah v6.0.4 selalu menghasilkan file format gambar GIF 89a, kecuali pengguna secara khusus meminta format keluaran "`GIF87:`" yang lebih lama.
Format file gambar JPEG
Format ini kira-kira sama umumnya dengan format GIF di atas. Tetapi bila GIF dirancang untuk gambar kecil sederhana "bergaya kartun", JPEG dirancang untuk gambar besar dunia nyata dengan banyak warna berbeda dan gradasi warna, seperti foto. Ciri utama format file JPEG adalah kompresinya, yang mengecilkan ukuran gambar sambil menjaga gambar tetap enak dipandang mata manusia. Prosesnya sangat rumit dan di luar cakupan pembahasan ini. Untuk keterangan lebih lanjut tentang proses itu dan efeknya lihat Pengantar kompresi JPEG. Dan penjelasan yang sangat mendetail ada di video You Tube JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile Sayangnya, demi mengompres gambar dengan baik, algoritmenya sengaja membuang informasi. Yang disimpan BUKAN gambar yang sama dengan yang ada di memori; warna suatu piksel atau area gambar umumnya TIDAK akan persis sama dengan warna yang disimpan. Ini terutama berlaku di dekat tepi objek dalam gambar. Jadi sebagai peringatan singkat...
IM adalah pemroses gambar raster umum, untuk mengubah gambar.
IM tidak melakukan modifikasi JPEG secara lossless.
Kalau Anda tertarik pada penanganan lossless, lihat Penanganan JPEG di luar IM.
Perilaku lossy ini makin kentara bila gambar JPEG diubah sedemikian rupa sehingga besar perubahan pada batas atas atau kiri bukan kelipatan 8. Saat itu terjadi, 'blok' atau 'sel' kompresi JPEG menjadi sama sekali berbeda, dan itu bisa membuat ukuran simpan gambar akhir melonjak. Yang dimaksud adalah operasi seperti chop, trim, shave, border, frame, extent, dan lain-lain. (Lihat Memotong dan memberi border yang dapat menggeser data gambar sejauh offset piksel yang bukan kelipatan 8. Lihat diskusi Forum IM Cropping an image result in an unexpected increased file untuk keterangan lebih lanjut.
Biasanya sifat lossy data JPEG ini tidak begitu terasa. Namun ia bisa terasa bila gambar JPEG dimuat dan disimpan berulang kali, atau bila kualitas yang sangat rendah dipakai pada diagram dengan perubahan warna yang tajam. Meski begitu, selama gambar JPEG tidak dimuat dan dipakai ulang berkali-kali (simpan sumber aslinya dan terapkan operasi dari situ), JPEG tetap format file yang baik bahkan untuk jenis gambar yang sebenarnya kurang cocok baginya. Sebagai contoh sifat lossy JPEG ini, di sini saya membuat gambar sederhana berupa dua gradien yang disambung. Gradien memberi perubahan warna halus yang ditangani JPEG dengan sangat baik, sedangkan perubahan warna tajam di antara kedua gradien itu tidak ditangani dengan baik.
magick -size 5x10 gradient: gradient:blue-navy +append jpg_lossy.gif
magick jpg_lossy.gif jpg_lossy.jpg
Gambar pertama adalah tampilan yang diperbesar dari versi format GIF gambar itu yang tidak terdistorsi (klik gambarnya untuk melihat atau mengunduh tampilan tanpa perbesaran). Gambar itu hanya memuat 20 warna, jadi dalam kasus ini format GIF bisa menangani gambar dengan sempurna dan malah menghasilkan ukuran file yang sangat kecil (lihat tabel di bawah). Sebaliknya versi JPEG gambar itu menunjukkan distorsi warna yang jelas, yang ditambahkan kompresi JPEG ke gambar tersimpan agar bisa dikompres lebih baik. Distorsinya paling besar pada kanal warna biru, yang tidak mengherankan karena biru tidak terurai dengan baik oleh mata manusia. Artinya, mata manusia cenderung 'menyebarkan' warna biru secara alami, sehingga algoritme JPEG memanfaatkan hal itu (dengan memakai ruang warna YCbCr di dalamnya). Nyatanya, tanpa perbesaran seperti di atas, efek itu sulit sekali terlihat. Mari kita lihat pengaruh kualitas terhadap gambar.
magick jpg_lossy.gif -quality 100% jpg_lossy_100.jpg
magick jpg_lossy.gif -quality 80% jpg_lossy_80.jpg
magick jpg_lossy.gif -quality 50% jpg_lossy_50.jpg
magick jpg_lossy.gif -quality 20% jpg_lossy_20.jpg
magick jpg_lossy.gif -quality 5% jpg_lossy_5.jpg
Bila hasil gambar pertama di atas diperhatikan dengan teliti, yaitu gambar uji yang kita simpan pada '100%' alias kualitas maksimum, masih ada sedikit distorsi warna. Sangat sulit dilihat, tetapi ada. Sebaliknya, memakai pengaturan "-quality" yang makin rendah untuk gambar JPEG membuat distorsi warna ini makin besar dan makin kentara. Bukan hanya itu, ia juga memunculkan semacam 'bayangan' di tepi yang menghasilkan 'gelombang' perubahan warna menyebar dari tepi yang tajam. Efek ini biasa disebut artefak ringing. Namun alasan memakai kompresi adalah ukuran gambar hasilnya jauh lebih kecil secara dramatis, setidaknya pada awalnya. Berikut daftar file hasilnya beserta ukurannya dalam byte.
Perhatikan bahwa gambar GIF dalam kasus ini sangat kecil, karena 'blok' warna yang luas terkompresi sangat baik di GIF. Makin rendah kualitas JPEG, makin kecil pula ukuran gambarnya. Pengaturan kualitas bawaan, bila kualitas JPEG tidak disetel pengguna maupun diwarisi dari file format gambar sumber, adalah sekitar 92%, yang tergolong kualitas sangat tinggi. Namun dengan pengaturan kualitas di bawah '50%', ukuran file tidak banyak berkurang lagi, yang bertambah hanyalah kerusakan gambar. Ini proses dengan hasil yang kian menyusut. Ringkasnya...
JPEG membuang informasi dan merusak gambar saat disimpan.
Pakailah format lain untuk gambar antara selama pemrosesan.
Pakai format JPEG hanya untuk gambar akhir, bukan untuk pemrosesan lanjutan.
JPEG juga tidak baik untuk gambar buatan dengan perubahan warna tajam, seperti gambar garis, diagram, atau ikon bergaya kartun, teks, dan simbol. Gambar semacam itu, yang warnanya sedikit, lebih baik disimpan memakai format gambar berpalet seperti GIF atau PNG8. Format gambar JPEG baru, Jpeg2000, mulai tersedia dan memang memungkinkan kompresi JPEG lossless. Namun format itu menuntut pustaka 'JasPer' ikut terpasang. Untuk memakai format khusus ini, opsi "-compress jpeg2000" juga perlu dipakai atau gambar disimpan ke format file JP2, supaya IM memanggil pustaka yang tepat.
Transparansi JPEG - TIDAK ADA
Selain kompresi, masalah besar lain yang dihadapi pengguna JPEG adalah
JPEG tidak menyimpan transparansi
Jadi meski gambar bisa ditimpakan ke warna atau pola latar belakang lalu disimpan ke JPEG, gambar JPEG tidak bisa diberi batas berbentuk bebas atau lubang tembus pandang. Karena JPEG dirancang untuk menyimpan gambar dunia nyata, bukan potongan gambar, transparansi bukanlah persoalan yang dipikirkan saat format ini dibuat. Akibatnya para perancangnya tidak pernah repot menyertakan kanal alpha atau informasi transparansi lain di dalam format file itu. Sebagai contoh, mari kita ambil PNG bertransparansi yang kita pakai di atas lalu di-magick langsung ke JPEG.
magick a.png a.jpg
Seperti terlihat, semua bagian transparan langsung menjadi hitam. Tetapi tergantung sumber gambarnya (terutama gambar GIF), area transparan itu bisa saja menjadi warna acak atau warna lain yang tidak pantas. Bila hal itu bisa menjadi masalah, sebaiknya minta IM menghapus transparansi alpha sebelum gambar disimpan ke format file gambar JPEG.
Distorsi warna JPEG (pengujian)
Seperti disebut di atas, algoritme kompresi yang dipakai JPEG bersifat lossy. Gambarnya akan diubah supaya bisa dikompres lebih baik, dan mudah-mudahan menghemat ruang file. Seberapa besar distorsi warna yang terjadi bergantung pada pengaturan kualitas yang dipakai. Sebagai contoh, mari kita lihat berapa banyak warna dalam gambar bawaan IM "netscape:"... | |
magick identify -format "Colors: %k" netscape:
| ![[IM Text]](../static/img/formats/jpg_colors_none.txt.gif)
Seperti terlihat, secara bawaan gambar ini punya 216 warna dalam larik persegi panjang yang besar. Jenis gambar semacam ini BUKAN gambar yang baik untuk disimpan ke format JPEG, dan justru itu yang ideal bagi keperluan kita. Jadi mari kita lihat berapa jumlah warna yang dihasilkan bila gambar ini disimpan sebagai JPEG... | |
magick netscape: JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_def.txt.gif)
Artinya, secara bawaan, file JPEG yang tersimpan punya warna hampir 9 kali lebih banyak! Meski hasilnya tetap terlihat seperti gambar aslinya, di sekitar tepi area persegi panjang itu ada warna-warna yang ditambahkan. Menyimpan pada pengaturan kualitas tertinggi pun tidak menyimpan gambar tanpa distorsi warna... | |
magick netscape: -quality 100 JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_100.txt.gif)
Seperti terlihat, pengaturan kualitas yang sangat tinggi hanya menambahkan sedikit warna ekstra, tetapi gambarnya tetap sedikit (minimal) terdistorsi warnanya. Terlihat pula bahwa ukuran filenya lebih besar, karena kompresi yang bisa dicapai sangat sedikit. Sekarang mari kita coba "Lossless"... | |
magick netscape: -quality 100 -compress Lossless JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_lless.txt.gif)
Masih ada distorsi warna! Jelas pustaka JPEG saya TIDAK di-patch untuk enkode lossless. Namun ingat, hanya pustaka lain yang sudah di-patch yang bisa membaca gambar JPG lossless semacam itu. Sebagai alternatif, saya sarankan mengompilasi IM Anda agar memakai pustaka JasPer dan format file gambar JP2 yang lebih baru. | |
magick netscape: JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_lless.txt.gif)
Seperti terlihat, format Jpeg2000 beralih ke metode kompresi gambar lain yang tidak lossy, dan secara bawaan tidak mendistorsi warna gambar. Ia juga menerapkan metode kompresi yang sangat tinggi pada gambar. Namun memakai kualitas yang lebih rendah dengan format JP2 baru itu akan kembali memunculkan distorsi warna, demi menghasilkan gambar yang lebih kecil, persis seperti format file gambar JPEG biasa... | |
magick netscape: -quality 50% JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_50.txt.gif)
Untuk keterangan lebih lanjut tentang penggunaan coder JPEG2000, lihat dokumentasi parameter enkode JPEG2000.
Opsi kontrol pembacaan JPEG
-define jpeg:size={width}x{height} Pengaturan ini adalah petunjuk bagi pustaka gambar JPEG untuk membaca file gambar (JPEG) masukan secukupnya saja, sehingga tercipta gambar yang setidaknya seukuran yang diminta (lebar × tinggi) atau lebih besar. Bila gambar masukannya raksasa, cara ini bisa sangat mengurangi memori yang dibutuhkan IM untuk membaca gambar, karena IM lalu menangani gambar yang lebih kecil. Hal itu pada gilirannya bisa mempercepat keseluruhan operasi secara dramatis. Ingat, ini hanya petunjuk tentang ukuran gambar yang diinginkan; ukuran itu tidak dijamin diperoleh, hanya sesuatu yang mendekati tetapi lebih besar dari ukuran tersebut. Biasanya yang didapat adalah ukuran antara ukuran ini dan dua kali lipatnya, dengan rasio aspek gambar tetap terjaga. Umumnya setelah gambar JPEG dibaca dengan petunjuk ukuran, gambar itu langsung diubah ukurannya ke ukuran 'persis' yang final. Biasanya memakai "
-thumbnail" sekalian untuk membuang profil gambar. Sebagai contoh...magick -define jpeg:size=64x64 jpeg_large.jpg jpeg_size_hint.jpg magick -define jpeg:size=128x128 jpeg_large.jpg \ -thumbnail 64x64 jpeg_thumbnail.jpg| _Sebelum IM v6.5.6-0, pengaturan coder ini diambil dari pengaturan "
-size". Hal itu menimbulkan masalah ketika pengguna memakai "-size" untuk membuat gambar tetapi kemudian pembacaan JPEG memberi hasil tak terduga. Karena itu pengaturan tersebut diubah menjadi pengaturan coder tersendiri.Pada versi lama Anda mungkin perlu mengembalikan pengaturan "
-size" memakai "+sizesebelum membaca gambar JPEG, atau IM bisa jadi tidak membaca gambar JPEG secara utuh.
Perhatikan bahwa pengubah ini membuat pustaka JPEG melewatkan pembacaan seluruh kolom dan baris piksel. Karena itu efeknya mirip Operator Sampling Resize, termasuk artefak aliasing yang kuat. Karena itu disarankan menyebutkan setidaknya dua kali lipat ukuran 'resize' akhir gambar untuk menghindari masalah ini, persis seperti contoh di atas. | _Perhatikan bahwaOperator Thumbnail Resize juga memakai teknik sampling yang sama untuk operasi pengubahan ukuran berskala sangat besar guna mengecilkan gambar dengan cepat sebelum operasi resize biasa, hanya saja sampai 5 kali, bukan dua kali, ukuran gambar akhir. Selisih ukuran itu soal kualitas gambar akhir.
+profile '*' -strip Gambar JPEG yang disimpan kamera digital, perangkat lunak pemindai, dan perangkat lunak pemrosesan gambar lain seperti "photoshop" sering menambahkan profil besar berisi "komentar program " ke gambar JPEG. Salah satu dari kedua opsi ini akan membuang profil tersebut dari gambar, setelah gambar itu dibaca. Operator "+profile" membuang semua profil warna dari gambar, sedangkan "-strip" membuang semua profil dan metadata yang mungkin dimiliki gambar. Perhatikan juga bahwa "-thumbnail" adalah opsi "-resize" yang sekaligus melakukan "-strip". Lihat juga Membuat thumbnail. -type TrueColorMatte Karena JPEG tidak menyimpan transparansi dalam bentuk apa pun, saat dibaca gambarnya selalu sepenuhnya opak dan tidak punya kanal 'alpha' di memori. Pengaturan ini memaksa setiap gambar JPEG yang dibaca setelah opsi tersebut untuk mendapat kanal 'alpha' yang sepenuhnya opak di memori. Namun cara yang lebih baik adalah memakai "-alpha set" atau "-alpha set" setelah gambar dibaca, karena dampaknya lebih kecil terhadap pembacaan dan penulisan format gambar lain. Lihat Jenis gambar saat membaca dan menulis dan Alpha Set untuk keterangan lebih lanjut.
Opsi kontrol penulisan JPEG
Secara bawaan, "-quality" dan "-sampling-factor" yang ditemukan saat membaca gambar JPEG dipakai kembali saat menulis ke gambar JPEG. Namun hal itu belum tentu menghasilkan ukuran file yang sama di disk, dan kualitas gambar tetap akan berkurang lagi akibat membaca dan menyimpan ulang gambar JPEG. Tabel kuantisasi JPEG sendiri tidak dipertahankan.
-quality {percent} Barangkali opsi yang lebih penting saat menyimpan gambar JPEG, karena opsi ini mengendalikan seberapa besar gambar dikompres ketika disimpan ke disk. Nilainya bukan persentase ukuran, melainkan sekadar nilai kualitas. Makin rendah nilainya, makin kecil gambarnya dan makin banyak informasi gambar yang hilang, sehingga artefaknya bertambah dan gambar makin rusak.
FUTURE: VERY low quality example of a photoCATATAN: pengaturan kualitas '
100%' tidak menjamin gambar tersimpan tanpa kehilangan kualitas sama sekali, hanya kehilangannya minimal. (Lihat opsi berikutnya) CATATAN: kualitas untuk mendapat ukuran file tertentu tidak bisa ditentukan kecuali lewat coba-coba. Mulailah dengan "-quality" 75% lalu periksa ukuran file hasilnya. Bila terlalu besar, turunkan kualitasnya 10%; bila terlalu kecil, naikkan. Setelah batas bawah dan batas atas kualitas didapat, lakukan pencarian biner untuk menemukan kualitas yang paling mendekati ukuran file yang diinginkan. Lima atau enam percobaan semestinya cukup. -define jpeg:extent={size} Sejak IM v6.5.8-2, ukuran file keluaran maksimum untuk gambar JPEG bisa ditentukan. Ukurannya ditulis dengan sufiks, misalnya "400kb". Cara kerjanya dengan menghasilkan banyak versi gambar JPEG sambil melakukan pencarian biner atas pengaturan kualitas keluaran "-quality", sampai sedekat mungkin dengan ukuran file yang diberikan tanpa melampauinya. IM melakukannya dengan menulis gambar berulang kali ke file sementara, dan begitu ukuran kualitas yang pas didapat, gambar akhir ditulis satu kali ke nama file keluaran yang diberikan. Dengan begitu keluarannya tetap bekerja bila gambar akhir dikirim ke pipeline atau langsung ke jaringan, bukan hanya ke file sungguhan. Namun jangan berharap proses ini cepat, karena kebutuhan I/O-nya. Mungkin 4 sampai 8 kali lebih lambat. Kirimkan hasilnya kepada saya kalau Anda benar-benar melakukan perbandingan waktu. -compress LossLess Meski pengaturan "-quality" '100%' masih bisa menghasilkan warna yang sedikit berbeda (ia tetap 'lossy'), opsi "-compress LossLess" meminta pustaka JPEG menyimpan gambar tanpa kehilangan data sama sekali. Dengan begitu, membaca ulang gambar itu semestinya memulihkannya persis seperti saat disimpan. PERINGATAN: ini hanya bekerja bila pustaka JPEG Anda sudah di-patch untuk enkode 'LossLess JPEG', tetapi penggunaan format file JP2 sudah menggantikannya sehingga opsi ini jarang berpengaruh nyata lagi. Selain itu "-quality 100%" WAJIB disetel juga agar ini bekerja. Secara intuitif orang mengira menyimpan dengan 'LossLess' otomatis berarti memakai kualitas 100%, padahal tidak begitu. Ini akibat ditempelkannya patch yang tidak lazim pada penulisan gambar JPEG, yang menurut definisinya adalah format lossy. Tentu saja file yang dihasilkan kemungkinan jauh lebih besar daripada gambar JPEG biasa. Hasilnya juga berupa JPEG terkompresi lossless yang tidak bisa dibaca di mana pun kecuali dengan pustaka JPEG yang di-patch serupa. Karena itu 'lossless JPEG' TIDAK disarankan dan sebaiknya format lain (seperti PNG atau JP2) yang dipakai. -interlace Line Memakai gaya 'Progressive JPEG' yang memungkinkan gambar jpeg besar terlihat selagi masih dimuat. Lihat juga solusi di luar IM untuk mengenkode ulang JPEG yang sudah ada tanpa kehilangan lebih jauh, di bawah. -sampling-factor {horizontal}x{vertical} Menyesuaikan faktor sampling yang dipakai pustaka JPEG untuk down sampling kroma. Nilainya bisa disetel '2x1' untuk membuat file animasi MPEG-2. "2x2, 1x1, 1x1" adalah metode sub-sampling standar IM dan setara dengan 4:2:0, lihat Wikipedia, Chroma Sub-Sampling. Namun bila "quality" bernilai 90 atau lebih, kanalnya tidak di-sub-sampling. Pada dasarnya pengaturan ini menentukan apakah ukuran 'blok' atau 'sel' pemrosesan 8 piksel atau 16 piksel. -density {Xdpi}x{Ydpi} Densitas memang tidak berpengaruh pada ukuran piksel keluaran gambar hasilnya. Namun pengaturan di atas disimpan dalam header JFIF format file gambar JPEG. Sayangnya sebagian program seperti Photoshop mengabaikan pengaturan ini bila densitas juga ada di dalam profil khusus photoshop ('8BIM') yang tersimpan dalam gambar. Densitas benar-benar penting hanya ketika perangkat keluaran dipakai, seperti printer atau monitor, sehingga perangkat itu bisa menampilkan gambar dengan skala ukuran dunia nyata. Misalnya memastikan foto atau halaman yang dipindai tercetak pada ukuran yang benar. Untuk keterangan lebih lanjut tentang densitas lihat Metadata densitas gambar dan Pengubahan ukuran dengan Resample. -type TrueColor IM otomatis memakai format internal grayscale untuk gambar yang hanya memuat nilai grayscale. Pengaturan ini menimpa perilaku tersebut dan memaksa IM selalu menghasilkan gambar JPEG berwarna, bukan grayscale. Lihat Jenis gambar saat membaca dan menulis untuk keterangan lebih lanjut. -define jpeg:optimize-coding=false Mematikan penghitungan tabel pengodean Huffman yang optimal untuk gambar ini. Secara bawaan penghitungan ini hidup. Ia memang menuntut satu lintasan tambahan atas gambar untuk melakukan perhitungan yang diperlukan, tetapi biayanya minimal. -define jpeg:q-table={path} Menentukan file yang memuat tabel kuantisasi JPEG kustom dalam XML. Contoh tabelnya biasanya terpasang di "/etc/ImageMagick/quantization-table.xml" tetapi sudah tertanam di ImageMagick sehingga biasanya tidak dipakai. Sejumlah diskusi tentang pembuatan tabel bisa ditemukan di Digital Image Processing Forum, dengan diskusi khusus (saat tulisan ini dibuat) di JPEG Quantization Tables, Better JPEG quantization tables?, Stupid PET Trick qtable of one, JPEG luma quantization table. Opsi ini ditambahkan pada IM v6.5.7-8.
Kualitas JPEG vs ukuran file
Ukuran file akhir sebuah file JPEG untuk kualitas tertentu tidak dapat ditentukan. Seluruh proses kompresinya begitu rumit sehingga perubahan kecil menghasilkan perubahan kompresi yang liar. Semacam 'efek kupu-kupu'. Bahkan dengan gambar sumber yang sama dan kualitas yang sama, tetapi dengan versi IM, pustaka JPEG, atau program pemrosesan gambar lain yang berbeda, ukuran file dan kualitas yang teramati bisa berbeda sangat jauh. Pengaturan kualitas sebaiknya diperlakukan sebagai sekadar 'terkaan' tentang seberapa besar kompresi atau kualitas visual yang mesti diterapkan pada gambar tertentu. Pada dasarnya, menentukan ukuran file akhir untuk gambar dan pengaturan kualitas tertentu secara praktis mustahil... Kecuali dengan benar-benar melakukannya. Namun IM bisa melakukan 'uji coba' untuk menemukan kualitas terbaik bagi ukuran file tertentu lewat define khusus 'jpeg:extent'. Lihat Kontrol penulisan JPEG di atas. Cara itu sangat lambat, tetapi lebih cepat daripada solusi buatan sendiri yang serupa. Melakukannya tidak disarankan, dan bukan hanya karena lambat. Dengan metode ukuran file tetap itu, gambar sederhana bisa keluar pada kualitas 90% tetapi memuat 50k data yang tidak perlu, sementara gambar rumit harus turun ke kualitas 30% dan memperlihatkan artefak JPEG (atau dengan bahasa yang kurang teknis, kelihatan jelek) karena datanya kurang untuk detail yang ada. Ide yang lebih baik adalah menemukan satu pengaturan kualitas yang menghasilkan ukuran file rata-rata 100KB untuk sekumpulan gambar Anda yang cukup mewakili. Bahkan dengan itu, gambar yang detailnya sedikit mungkin hanya keluar 50k. Sementara gambar dengan detail rumit bisa keluar 150k, dan keduanya tetap enak dilihat. Untuk panduan praktis tentang kompresi dan kualitas JPEG, lihat Optimization of JPEG compression settings. Lihat juga JPEG Compression, Quality and File Size untuk melihat detail internal JPEG. Tip Photoshop : Photoshop menambahkan sekitar 4 Kbyte informasi ekstra ke gambar JPEG untuk menyimpan pratinjau dan info manajemen warna (profil '8BIM'). Bila informasi itu tidak diinginkan, pakai fungsi 'Save for Web'. Tip ini ditemukan dalam makalah tentang kompresi JPEG oleh Gernot Hoffmann.
Format keluaran JPEG terkait
- PJEG: Menulis gambar JPEG dengan pemuatan progresif.
- Cara ini jarang dipakai di masa unduhan jaringan yang cepat sekarang, tetapi dulu sangat umum ketika modem dial-up masih lazim. Pada dasarnya, tiap N baris ditulis lebih dulu, lalu satu baris di antaranya, dan seterusnya, sehingga gambar sudah bisa terlihat walau baru sebagian kecil dari gambar utuhnya yang terunduh.
- JPEG2000: Format JPEG terbaru dengan sejumlah tambahan baru.
- Format ini menuntut pustaka 'JasPer jp2' terpasang, kalau tidak akan muncul error..
"no encode delegate for this image format"
Format ini memakai kompresi wavelet untuk mengompres gambar, bukan metode DCT JPEG yang standar. Hasilnya rasio kompresi yang jauh lebih baik untuk kualitas gambar yang sama, sehingga ruang disk lebih hemat lagi. Sayangnya format ini belum diadopsi luas, jadi belum bisa dipakai untuk keperluan ke luar, setidaknya sampai peramban web serta penampil dan penyunting gambar lain ikut memakainya. Gambar yang disimpan dengan format ini hanya terbaca oleh pengguna yang punya pustaka tersebut, dan mungkin butuh waktu lama sampai sebagian besar pengguna memakai pustaka itu. Terutama pengguna Windows, karena Microsoft agaknya tidak akan menyertakannya kecuali cukup banyak orang menuntutnya. Tip Quicktime : Quicktime memakai format jp2 tetapi keluarannya harus pada "-depth 8".
Pemrosesan JPEG di luar ImageMagick (ringkasan singkat)
| jpegtran | Perkakas standar yang terpasang bersama pustaka JPEG. Dengan ini berbagai transformasi bisa diterapkan pada gambar format JPEG tanpa mendekode dan mengenkode ulang data gambarnya, sehingga data JPEG tidak rusak. (lihat di bawah) |
|---|---|
| jpegtrans | Versi yang lebih baru dari program "jpegtran" sebelumnya, meski banyak fitur tambahannya (seperti pemangkasan lossless) kini sudah tertanam pada versi pustaka yang didistribusikan (di atas). |
| jhead | Penangan JPEG lossless yang lebih ramah pengguna, terutama untuk profil EXIF kamera digital. Yaitu penanganan komentar, penyesuaian tanggal, ekstraksi thumbnail, penghapusan atau penggantian, pembuangan profil, dan sebagainya. Ia juga berusaha memastikan profil lain tidak dirusak, sesuatu yang cenderung dilakukan "jpegtran". Ada pula program serupa lain seperti "ExifTool" dan "Exifer". Banyak program album foto web dari JPEG juga melakukan hal ini. |
| _Pemutaran JPEG secara lossless (yang disediakan semua program di atas) hanya bekerja benar untuk gambar yang ukurannya habis dibagi 8 atau 16. Hal ini berlaku untuk sebagian besar (tetapi tidak semua) foto kamera digital. Bila dicoba pada gambar berukuran ganjil, blok tepi kanan atau bawah (yang memuat ukuran sebagian) tidak akan diposisikan dengan benar pada gambar akhir, karena blok semacam itu hanya bisa berada di tepi kanan atau bawah. |
Untuk contohnya lihat diskusi khusus ini_
Seperti terlihat, sebagian besar program ini dirancang untuk memproses metadata gambar JPEG tanpa memproses ulang gambar JPEG yang terkompresi. (lihat berikutnya)
Pemrosesan JPEG lossless
Karena mendekode dan mengenkode ulang gambar JPEG menurunkan kualitas gambar (kecuali kompresi lossless dipakai), pustaka gambar JPEG menyediakan sejumlah program khusus yang bisa memanipulasi gambar tanpa kehilangan kualitas. Perintah-perintah ini umumnya juga jauh lebih cepat daripada padanannya di IM, karena tidak perlu memproses gambar sebanyak itu. Untuk mengubah komentar dalam gambar JPEG, program pustaka JPEG tingkat rendah "rdjpgcom", "wrjpgcom", dan "jpegtran" bisa dipakai. Namun saya menyarankan program "jhead", karena ia mempertahankan profil atau informasi lain yang juga ada dalam gambar. "jpegtran" memungkinkan langkah lebih jauh, yaitu memanipulasi data gambar secara lossless, termasuk pemutaran 90 derajat, pemangkasan, dan penyisipan. Ia bahkan memungkinkan pembuatan gambar JPEG dengan kualitas campuran. Untuk peragaannya lihat halaman JPEGhack oleh Nemo Thorx. (Lihat catatan di bawah) Namun perintah-perintah ini TIDAK disarankan untuk penggunaan umum, karena terbatas pada batas blok (8 atau 16 bit) gambar JPEG. Artinya, pemangkasan, pemutaran, atau penyisipan hanya bisa dilakukan pada tingkat sel kompresi JPEG, bukan pada tingkat piksel yang sebenarnya.Komentar... Kalau Anda membuat halaman indeks web thumbnail montage dari foto JPEG sendiri dan ingin memakai komentar yang ditambahkan ke file JPEG lewat program di atas, pakailah "-label '%c'" untuk memberi tahu montage agar memakai bidang 'comment', sebelum membaca nama file pada baris perintah "magick montage". Komentar itu juga bisa dipakai dalam transformasi polaroid kompleks, atau montage polaroid, atau semacam Annotate gambar. Program "jhead" bisa dipakai untuk menambah atau mengubah komentar dalam file gambar JPEG. Namun saya mendapati opsi "edit comments" ("-ce") bukan cara yang baik untuk itu, karena ia menambahkan satu baris baru ekstra di akhir komentar. Baris baru ekstra ini mengacaukan penggunaan perintah (escape pemformatan label '%c') di IM. Cara yang lebih baik adalah memakai "comment input" ("-ci") untuk memasukkan komentar (tanpa baris baru di akhir), atau opsi "comment literal" ("-cl")...
jhead -cl 'Photo of some stuff, by Joe Citizen' image_of_stuff.jpg
Thumbnail... Brian Jackson brian@brianjacksonphoto.com juga melaporkan bahwa sebagian besar kamera digital (misalnya Cannon 1D miliknya) menyematkan thumbnail berukuran sekitar 12kb-25kb (160x120 piksel) di dalam gambar JPEG yang dihasilkannya. IM bisa mengekstrak thumbnail itu dengan...
magick image.jpg thumbnail:thumb.jpg
Namun program "jhead" juga bisa mengekstrak thumbnail ini...
mkdir thumbs
jhead -st "thumbs/&i" *jpg
Cara ini super cepat dibanding IM karena tidak menyunting gambarnya, hanya memindahkan data yang sudah ada. Namun kualitas thumbnail-nya jauh di bawah thumbnail yang bisa dihasilkan IM dari gambar sungguhan, orientasinya pun bisa saja tidak diputar dengan benar, dan ukurannya jelas bukan ukuran yang Anda inginkan. Memakai ExifTool... Dari Rob: kalau Anda ingin menyunting profil yang tersimpan dalam file gambar JPEG lebih rinci daripada yang disediakan "jhead", lihatlah aplikasi yang lebih berpusat pada EXIF berbasis perl, "ExifTool", versi terkompilasi alternatifnya "ExifTool", dan GUI Windows "Exifer", untuk menyebut beberapa saja. Dengan modul Perl Image::ExifTool terpasang, kode berikut membuang seluruh metadata JPEG secara lossless. Saya mendapati kode berikut setara dengan metode baris perintah untuk membuang data EXIF. Kalau-kalau ada yang tertarik di kemudian hari:
use Image::ExifTool;
$exifTool = new Image::ExifTool;
$exifTool->SetNewValue('*'); # delete all...
$exifTool->WriteInfo('original_image.jpg','modified_image.jpg');
$errorMessage = $exifTool->GetValue('Error');
print $errorMessage; # (if has value an error occurred)
Butuh usaha untuk memahaminya, karena ternyata pengaturannya perlu ditetapkan lebih dulu memakai SetNewValue, lalu dimuat dan disimpan sekaligus memakai WriteInfo. Gambar JPEG dengan kualitas campuran, memakai JpegTrans... Wolfgang Hugemann {[email protected]} ingin tepi gambar JPEG sama sekali tidak dikompres, karena hal itu mengacaukan penanganan foto. Lihat situs ini. Solusi dari Yuval Levy jpegtran" untuk menyisipkan JPG berkualitas rendah ke dalam JPEG berkualitas tinggi...
Solusinya: * hasilkan dua versi gambar yang sama dengan ImageMagick, satu pada kualitas tinggi 100 dan satu lagi pada kualitas rendah 60 (untuk memperkecil ukuran). * pakai jpegtran untuk memangkas versi q60, mengikis 8 piksel di tiap sisi * pakai jpegtran untuk menggabungkan q60 di atas q100 * pakai jpegtran untuk menggabungkannya menjadi sebuah stripe
Nemo Thorx jpeghack@nemo.house.cx membaca uraian di atas dan mencoba menerapkan kualitas JPEG campuran. Ia berhasil dan memperagakan hasilnya di halaman Wiki-nya di JPEGhack. Pada dasarnya pemrosesan JPEG secara lossless sangat mungkin dilakukan, misalnya 'memangkas' dan 'menyisipkan' bagian baru berupa blok JPEG ke dalam gambar yang sudah ada.
Format file gambar PNG
Ini salah satu format gambar terbaru dan paling modern, mendukung warna 32 bit termasuk transparansi kanal alpha, tetapi juga bisa dioptimalkan menjadi skema warna indeks 8 bit seperti GIF (batas 256 warna). Karena itu PNG menjadi format antara yang sangat baik untuk pemrosesan gambar tanpa kehilangan informasi gambar.
Kompresi PNG
Bila dipakai dengan keluaran PNG, kualitas dipandang sebagai dua digit desimal. Digit pertama (puluhan) adalah tingkat kompresi zlib, 1-9. Namun bila dipakai nilai '0', yang didapat adalah kompresi Huffman, bukan kompresi 'zlib', dan sering kali itu lebih baik! Aneh tapi nyata! Digit kedua adalah jenis penyaringan pengodean data PNG (sebelum dikompres): 0 berarti tidak ada, 1 "sub", 2 "up", 3 "average", 4 "Paeth", dan 5 "adaptive". Jadi untuk gambar dengan rentetan warna polos, filter "none" (-quality 00) biasanya lebih baik. Untuk gambar lanskap alam, penyaringan "adaptive" (-quality 05) umumnya lebih baik. | _Coder PNG sudah banyak dikerjakan ulang, dan metode yang lebih baik untuk mengendalikan pengaturan pengodean dan kompresi secara persis biasanya ditetapkan lewatOperator Define.
Lihat Kontrol penulisan gambar PNG di bawah untuk rincian define tersebut, atau lihat komentar dalam file coder PNG, kode sumber "coder/png.c.
_
Bila Anda punya gambar ImageMagick dengan transparansi biner (hidup/mati), encoder PNG akan menuliskannya secara efisien memakai chunk tRNS alih-alih kanal alpha penuh. Tetapi bila ada nilai opasitas selain 0 atau MaxRGB, ia menulis PNG dengan kanal alpha. Perilaku ini bisa dipaksakan lewat pengaturan pembacaan gambar "-type TruecolorMatte", atau gambar disimpan memakai file format "PNG32:". Program eksternal "pngcrush" atau versi yang lebih baru "OptiPNG" akan mencoba mengompres ulang suatu PNG demi kompresi terbaik yang bisa dicapai, dan disarankan untuk gambar yang hendak dipasang di situs web. Program lain, "pngnq", melakukan kuantisasi warna menjadi PNG 8bit 256 warna, meski belum diketahui apakah program itu mendukung warna semitransparan pada format tersebut.
Kompresi PNG yang lebih baik
Satu hal tentang gambar PNG: PNG mempertahankan warna piksel yang sepenuhnya transparan. Artinya, meski tak terlihat, transparansi tetap punya warna, dan PNG menyimpan data itu. Karena itu dalam banyak kasus PNG bisa dibuat terkompresi lebih baik dengan mengganti 'warna tak terlihat' tersebut dengan warna polos yang tetap, bukan warna sampah yang mungkin tersisa dari pemrosesan gambar sebelumnya. Ada dua metode utama untuk ini: memakai Operator Alpha Background yang hanya menangani piksel sepenuhnya transparan, atau memakai operasi semacam Faktor fuzz dengan transparansi yang juga memetakan warna yang nyaris semitransparan menjadi hitam sepenuhnya transparan. Sebagai contoh, di sini saya mengambil gambar "a.png" berbayang kabur yang kita buat di atas lalu mengganti semua piksel yang berada dalam jarak 20% dari transparansi penuh.
magick a.png -fuzz 10% -transparent none a_compress.png
Seperti terlihat, ukuran gambar membaik cukup banyak (sekitar 50%). Tetapi bayangan gambarnya terpotong tajam. Alternatif lain adalah sekadar memperkecil efek bayangannya, dengan menyesuaikan Level kanal transparansi.
magick a.png -channel A -level 20,100%,0.85 +channel \
-background black -alpha background a_compress2.png
Hasil algoritme kompresi, dan dengan begitu ukuran akhir gambar PNG Anda, juga bisa diperbaiki dengan memakai jumlah warna yang lebih sedikit.
magick image.jpg -thumbnail 200x90 -colors 256 \
-quality 90 -depth 8 thumbnail.png
Namun cara ini hanya disarankan untuk gambar thumbnail kecil yang tidak melibatkan transparansi, dan hanya sebagai langkah terakhir karena tekniknya sangat 'lossy'.
PNG, peramban web, dan transparansi
Microsoft Internet Explorer (IE versi 6 dan sebelumnya) tidak menampilkan PNG dengan benar bila ada transparansi dalam bentuk apa pun. Meski itu peramban yang paling terkenal tidak mendukung PNG sepenuhnya, ia bukan satu-satunya. Halaman PNG transparency test dan Another PNG test bisa dipakai untuk menguji peramban Anda. Keduanya juga mendaftar peramban dan versi yang menghasilkan hasil yang ditampilkan. Namun karena IE (setidaknya saat tulisan ini dibuat) barangkali peramban yang paling umum, halaman web Anda bisa dilengkapi sejumlah siasat untuk masalah ini. Untuk keterangannya lihat halaman WWW Laboratory saya, PNG with Transparency and IE, tempat saya menguji dan memperagakan solusi "PNG di IE" yang saya pakai. Solusi lain adalah meng-magick PNG itu ke JPEG (dengan warna latar belakang yang tepat), atau ke format GIF. Metode ini sudah dibahas tuntas di GIF di atas latar belakang. Solusi lainnya adalah menetapkan warna semua warna yang sepenuhnya transparan dalam gambar sebelum disimpan ke PNG. PNG akan menyimpan warna sepenuhnya transparan itu, tetapi ingat bahwa hampir semua operasi IM lain akan mengembalikan warna sepenuhnya transparan menjadi hitam sepenuhnya transparan (karena warna transparan seharusnya tidak berpengaruh, begitulah cara kerja matematika gambar). Sebagai contoh, gambar uji contoh IM yang standar memakai hitam sepenuhnya transparan untuk tiap piksel yang sepenuhnya transparan. Kita bisa memastikannya dengan mematikan kanal alpha, atau menyimpannya sebagai JPEG... |
magick test.png test.jpg
![[IM Text]](../static/img/formats/test.jpg)
Sekarang mari kita simpan gambar ini sehingga semua warna yang sepenuhnya transparan diganti warna 'silver' yang sepenuhnya transparan (lihat operator Alpha Background)... |
magick test.png -background silver -alpha Background test_silver.png
![[IM Text]](../static/img/formats/test_silver.png)
Perhatikan bahwa gambarnya semestinya tetap tampak benar bila transparansi (atau JAVA script khusus di halaman ini) bekerja di peramban Anda. Tetapi bila kanal alpha dimatikan (dengan menyimpannya ke JPEG yang tidak mengizinkan alpha), terlihat bahwa gambar PNG itu memang memakai warna 'silver' untuk piksel yang sepenuhnya transparan. |
magick test_silver.png test_silver.jpg
![[IM Text]](../static/img/formats/test_silver.jpg)
Namun perhatikan bahwa cara ini TIDAK mengubah piksel semitransparan, dan piksel itu tetap memakai warna normalnya (yang tidak transparan) tanpa dicampur dengan latar belakang halaman maupun warna yang dipakai untuk transparansi penuh. Karena semitransparansi tidak lagi terlibat, batasnya bisa tampak bergerigi (aliased), begitu pula efek 'halo' di sepanjang tepi yang warnanya lebih terang. Sebagai contoh, lihat tepi lingkaran hitam dan putih yang memperlihatkan efek aliasing 'jaggies'. Meski begitu, memakai warna pengganti abu-abu semestinya membuatnya tidak seburuk warna 'hitam' asli yang dipakai untuk transparansi penuh. Keuntungan lain menetapkan warna piksel yang sepenuhnya transparan adalah perbaikan kompresi data. Kadang warna di bawah area transparan yang dipakai selama pemrosesan ikut tersimpan. Warna semacam itu tidak terkompresi sebaik warna polos. Karena itu menetapkan warna sepenuhnya transparan seperti di atas bisa menghemat ukuran file akhir cukup banyak. Namun hal ini sebaiknya dilakukan sebagai langkah terakhir, karena banyak operasi pemrosesan gambar IM akan mengembalikan warna sepenuhnya transparan yang ada dalam gambar menjadi hitam sepenuhnya transparan. Lihat operator Alpha Background untuk daftar operator yang diketahui berperilaku begitu. Untuk masalah tampilan PNG, saya lebih suka kalau Microsoft memperbaiki IE, dan tampaknya IE versi 7 akhirnya menangani transparansi PNG sepenuhnya dalam segala situasi.
PNG dan kanvas virtual
Meski biasanya PNG TIDAK menyimpan informasi ukuran kanvas virtual, ia menyimpan informasi offset kanvas virtual, dan bila informasi itu ada, IM akan mencoba membuat 'ukuran kanvas' yang sesuai bagi offset dan ukuran gambar tersebut. Hal ini penting diingat untuk beberapa operator gambar seperti "-crop", "-trim", dan "-flatten", yang memakai kanvas atau ukuran page gambar sebagai bagian dari operasi atau hasilnya. Tentu saja pengaturan "-page" dan operator "-repage" bisa dipakai untuk menetapkan atau membuang ukuran dan offset kanvas virtual. (Lihat Atribut gambar halaman). Sebagai contoh, "magick" IM yang kedua melihat offset yang ada pada gambar PNG ini, lalu mendefinisikan kanvas yang cukup besar untuk memastikan gambarnya terlihat di dalam batas kanvas virtual (Ditambahkan pada IM v6.1.7)... |
magick rose: -repage 0x0+40+30 png:- |\
magick - -background LightBlue -flatten png_offset_flattened.jpg
![[IM Output]](../static/img/formats/png_offset_flattened.jpg)
Namun, meski format PNG biasanya tidak menyimpan informasi ukuran kanvas, IM menambahkan sedikit metadata ukuran kanvas virtual ke gambar PNG. Data ini hanya bisa dipakai perintah IM, dan umumnya diabaikan pembaca format gambar PNG lain. Sebagai contoh, perintah "magick" yang kedua memang melihat sebagian informasi ukuran kanvas virtual... |
magick rose: -repage 100x100+10+10 png:- |\
magick - -background LightBlue -flatten png_size_flattened.jpg
![[IM Output]](../static/img/formats/png_size_flattened.jpg)
Bila PNG itu diproses program di luar IM, metadata ukuran kanvas ini kemungkinan hilang. Ingat, informasi ukuran kanvas biasanya bukan bagian dari format file gambar PNG. Hal lain yang perlu dicatat, informasi 'offset' bisa bernilai negatif (tidak seperti format GIF), dan IM menanganinya dengan semestinya, sehingga format ini cocok untuk menyimpan gambar berlapis sebagai hasil antara. | Sebagian peramban web tidak menangani offset negatif dengan baik dan hasilnya aneh (satu versi firefox pernah bermasalah begini). Sebaiknya hindari offset negatif pada gambar yang mungkin dipakai program lain seperti peramban web.
Resolusi, densitas, dan satuan PNG
Setelah beberapa pengujian, tampaknya format file gambar PNG tidak mendukung pengaturan "-units" bernilai 'PixelsPerInch', hanya 'undefined' dan 'PixelsPerCentimeter'. Karena itu IM mengonversi pengaturan densitas/satuan yang diberikan menjadi nilai yang sesuai untuk 'PixelsPerCentimeter'. Masih akan ada tambahan tentang topik ini.
Subformat PNG
| PNG: | Bawaan. Menyimpan gambar memakai format yang hemat. |
|---|---|
| PNG8: | Padanan PNG untuk GIF, termasuk transparansi boolean dan tabel 256 warna. |
| PNG24: | Kanal RGB 8 bit tanpa kanal alpha. Kasus khusus bisa mencakup transparansi boolean (lihat di bawah) |
| PNG32: | Memaksa format gambar RGBA penuh dengan semitransparansi penuh. |
| PNG48: | Kanal RGB 16 bit tanpa kanal alpha |
| PNG64: | Gambar RGBA 16 bit (termasuk semitransparansi) |
| PNG00: | Mewarisi warna dan kedalaman bit PNG dari gambar masukan. |
| Untuk keterangan lebih lanjut lihat Pengaturan I/O jenis gambar. | PNG8 didefinisikan oleh PhotoShop, bukan oleh kelompok PNG. Dan meski format itu bisa menangani banyak warna semitransparan sekaligus satu warna sepenuhnya transparan, IM menganggapnya tidak bisa. Ini memberi cara untuk memaksa gambar bekerja dengan baik dan secara bawaan terbaca oleh Internet Explorer v6. Program "Photoshop CS" bisa membacanya. |
| --- | --- |
| Gaya PNG48, PNG64, dan PNG00 ditambahkan sejak IM v6.8.2-0 | |
| --- | --- |
IM bisa dipaksa membuat tabel indeks warna gambar (atau palet), lalu IM akan menyimpan gambar itu memakai format "PNG8:"... |
magick {input_image} -type Palette indexed.png
Untuk memaksa penggunaan satu kanal grayscale 8 bit, tetapi bukan gambar berindeks palet, pakai...
magick {input_image} -type GrayScale -depth 8 gray.png
Grayscale dengan kanal transparansi juga bisa dikeluarkan (ditambahkan pada IM v6.3.5-9).
magick {input_image} -type GrayscaleMatte gray_with_transparency.png
Dan untuk gambar dua warna sederhana...
magick {input_image} -type BiLevel bitmap.png
Ada kasus khusus untuk gambar PNG24. Bila gambar hanya memuat transparansi boolean, semua warna transparannya sama, dan warna itu hanya dipakai untuk transparansi, maka coder PNG akan menetapkan warna tersebut sebagai transparan. Sebagai contoh... |
magick a.png -channel A -threshold 75% +channel \
-background hotpink -alpha background png24:a_png24_alpha.png
![[IM Output]](../static/img/formats/a_png24_alpha.png)
Gambar ini tidak punya palet, tetapi punya alpha hidup/mati. -threshold pada kanal alpha memastikan hanya transparansi boolean (hidup/mati) yang ada, sedangkan opsi Alpha Background memastikan semua piksel yang sepenuhnya transparan berwarna tertentu. Cara di atas TIDAK memastikan tidak ada piksel opak berwarna sama, jadi cara itu masih bisa gagal.
Kontrol penulisan gambar PNG
Untuk mengendalikan penulisan gambar PNG dengan lebih baik, Glenn Randers-Pehrson merevisi sejumlah kendali coder "Define Global Setting" pada IM v6.5.2. Di antaranya...
- -quality '{level}{filter}'
- Tingkat kompresi dan filter dasar saat menyimpan gambar PNG.
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
Mendefinisikan sepenuhnya sistem kompresi yang dipakai untuk gambar PNG yang sedang ditulis. Pengaturan [-quality](https://imagemagick.org/command-line-options/#quality) biasanya menetapkan nilai _zl_ dan _fm_, tetapi tidak pengaturan _zs_.
- -depth
- Kedalaman umum gambar yang akan dihasilkan, biasanya disetel 8 atau 16 bit.
- -define png:bit-depth={depth}
- Menentukan secara persis kedalaman format file gambar PNG hasilnya. Ini menimpa kendali "
-depth" IM yang biasa, tetapi hanya untuk penulisan gambar PNG, dan hanya bila perubahan itu bisa dilakukan tanpa kehilangan. Untuk gambar ber-colormap, ini kedalaman indeks colormap, bukan kedalaman sampel warnanya. - -define png:color-type={type}
- Menentukan secara persis jenis file PNG yang sedang ditulis. Nilainya bisa '
0' | untuk grayscale, yang memungkinkan 'bit-depths' 2, 3, 4, 8, atau 16.
'2' | untuk RGB, yang memungkinkan 'bit-depths' 8 atau 16.
'3' | untuk Indexed, yang memungkinkan 'bit-depths' 1, 2, 4, atau 8.
'4' | untuk Gray-Matte
'6' | untuk RGB-Matte
Perhatikan bahwa "-define png:color-type='2'" khususnya berguna untuk memaksa data gambar disimpan sebagai nilai RGB, bukan nilai sRGB. Namun efek serupa bisa dicapai dengan "-set colorspace sRGB" pada gambar RGB linear. Meski begitu, jangan berharap program lain menghormati ruang warna linear ini saat membaca. Termasuk ImageMagick.
- -profile PNG-chunk-{x}:{file}
-
Menambahkan profil PNG mentah pada lokasi {x} dari {file}. Empat byte pertama {file} memuat nama chunk, diikuti karakter titik dua ':', lalu data chunk-nya. {x} bisa berupa 'b' untuk menempatkan profil sebelum PLTE, 'm' di antara PLTE dan IDAT, atau 'e' untuk setelah IDAT. Untuk menulis beberapa chunk berjenis sama, tambahkan string pendek yang unik setelah {x} agar profil berikutnya tidak menimpa profil sebelumnya . Sebagai contoh..
-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
+set date:create
+set date:modify
Ini 'properti' gambar yang dibuat ImageMagick setiap kali membaca sebuah file. Keduanya berisi (berturut-turut) waktu pembuatan file gambar (sebenarnya waktu perubahan izin/pemilik/pemindahan) dan waktu modifikasi file terakhir. Sayangnya format file gambar PNG gemar menuliskan data gambar semacam itu bersama format file gambar PNG, dan bila data ini berbeda, file yang dihasilkan pun berbeda, walau tidak ada hal lain yang berubah.
magick logo: logo.jpg magick logo.jpg
logo1.png
sleep 2; touch logo.jpg # change the JPG file timestamp
magick logo.jpg logo2.png
diff -s logo1.png logo2.png
magick compare -metric RMSE logo1.png logo2.png null:
Perintah "diff' di atas akan mengembalikan pesan
"Binary files logo1.png and logo2.png differ"
Padahal "magick compare" mengembalikan "0 (0)", yang berarti kedua gambar punya data gambar yang persis sama. Perhatikan bahwa karena IM menimpa properti tersebut dengan waktu file PNG yang baru saja dibaca, nilai properti yang sebenarnya tercatat dalam PNG tidak bisa dilihat memakai "magick identify". Solusinya adalah menyimpan gambar PNG tanpa 'time stamp' apa pun.
magick logo: logo.jpg
magick logo.jpg +set date:create +set date:modify logo1.png
sleep 2; touch logo.jpg
magick logo.jpg +set date:create +set date:modify logo2.png
diff -s logo1.png logo2.png
Kali ini "diff" melaporkan...
"Files logo1.png and logo2.png are identical"
SELINGAN: program UNIX lain seperti "cmp", "md5sum", atau "sha1sum" juga bisa dipakai untuk membandingkan file gambar biner. Dua program terakhir memang tidak menjamin, tetapi praktis mustahil dikelabui, dan lebih cepat untuk membandingkan lebih dari dua file (memakai checksum) Berkat sejumlah tambahan dari GlennRP, pengembang PNG, kini "-define png:exclude-chunk=date" juga bisa dipakai untuk memberi tahu coder PNG agar tidak menulis chunk teks yang berkaitan dengan tanggal.
Pemrosesan PNG di luar ImageMagick
| Ada cukup banyak aplikasi bantu untuk PNG yang bisa menjadi pelengkap berguna dalam menghasilkan file gambar PNG final. pngtrans | Informasi PNG yang disimpan bersama gambar |
|---|---|
| pngcrush | Mencoba menemukan kompresi PNG terbaik dengan mengompres gambar memakai semua kompresi PNG yang masuk akal, lalu menjatuhkan pilihan akhir, untuk tiap gambar satu per satu. Tentu saja ini bisa memakan waktu pada setiap gambar. |
| OptiPNG | Pengoptimal kompresi PNG yang lebih baru. |
| pngquant | Pengoptimal PNG lossy, yang menurunkan gambar PNG menjadi palet warna 8 bit dengan dithering. Ia menghasilkan PNG berwarna terindeks dengan warna transparansi alpha yang disampaikan lewat chunk tRNS. |
| pngnq | Pengkuantisasi PNG lossy yang lebih baru, untuk menghasilkan gambar PNG dengan tabel warna 8 bit. Juga memaksa penggunaan palet warna. |
| pngout | Pengoptimal PNG untuk platform Windows (dengan GUI opsional) yang memakai kompresor ZIP yang dioptimalkan untuk ukuran, bukan kecepatan (ada juga di halaman yang ditautkan di atas). |
| Sebagian besar di antaranya bertujuan memperkecil ukuran akhir file gambar, baik dengan teknik lossy MAUPUN non-lossy. |
Profil gambar
Penanganan profil pada gambar berkualitas foto itu penting. Namun sejauh yang saya tahu, ini seni yang sangat gaib dan bukan perkara sederhana. Tidak semua format memakai profil, tetapi sebagian besar format modern memakainya. Termasuk di dalamnya JPEG, PNG, TIFF, dan (sejak IM v6.3.4-1) GIF. Masalahnya justru diperparah oleh kenyataan bahwa banyak program bahkan tidak memahami atau mencari profil warna dalam gambar. Alan Gibson, aka Snibgo menyusun ringkasan tentang cara berbagai peramban web menangani berbagai profil warna, di halaman Snibgo, ImageMagick Profiles miliknya sendiri. Halaman itu layak dilihat. Untuk mendaftar profil apa saja yang ada dalam sebuah gambar, gunakan...
magick identify -verbose image.tif | grep 'Profile-.*bytes'
Profil yang umum (beserta penunjuk ke informasi yang saya punya tentangnya) mencakup...
EXIF | [Meta-data kamera digital](photos.html#exif)
ICC | Profil ruang warna gambar
ICM | Manajemen warna Microsoft (seperti ICC)
IPTC | Info gambar dan penulis
8BIM | Profil metadata Photoshop. Termasuk data tentang: clip path... Apa lagi?
XMP | Extensible Metadata Platform (XMP) dari Adobe (Lihat halaman adobe)
Profil umum ini dapat diekstrak memakai beberapa format keluaran khusus yang disediakan IM untuk keperluan tersebut. Misalnya...
magick -define jpeg:size=64x64 image.jpg iptc:profile.iptc
magick -define jpeg:size=64x64 image.jpg xmp:profile.xmp
Opsi "-define" di atas dipakai sebagai 'petunjuk' bagi pustaka JPEG agar mengurangi jumlah data gambar yang benar-benar dibaca ke memori, sehingga menghemat banyak pemrosesan atas data yang sebenarnya tidak akan dipakai. Profil sembarang juga bisa disisipkan atau disisipkan ulang sebagai 'blob' atau string biner yang memuat informasi apa pun yang Anda mau.
-profile '_profile_name_ :_data_file_ '
Artinya, file "data_file" ditambahkan 'apa adanya' ke gambar sebagai profil profile_name. IM maupun aplikasi lain akan mengabaikan profil semacam itu, kecuali jika memang mengenalinya secara khusus.
Dasar profil warna
Sepatah kata dulu...
Color Management is for Wimps -- Jangan main-main dengannya
Mengutak-atik profil umumnya justru memperburuk keadaan
Jadi kalau warnanya sudah terlihat bagus... biarkan saja. Seorang pengguna fhoech di IM Forums (yang sejak itu menghilang) sudah beberapa kali memposting pengantar dasar berikut tentang penggunaan profil warna untuk mengubah ruang warna yang dipakai gambar... RGB, sRGB, dan CMYK bukanlah ruang warna, melainkan sistem warna (yang dikendalikan IM lewat operator "-colorspace"). Tidak ada satu ruang warna RGB atau CMYK tunggal; secara harfiah ada tak terhingga ruang warna berbeda yang mungkin dalam tiap sistem warna. Yang diperlukan adalah profil ICC (atau ICM) yang mencirikan warna dalam gambar Anda secara akurat. Biasanya profil ICC yang menggambarkan sebuah gambar sebaiknya ditanamkan di dalam gambar itu sendiri; kalau tidak, terpaksa dipakai 'tebakan terbaik' yang sekadar solusi darurat: buka gambar di editor gambar yang mendukung ICC dan tetapkan berbagai profil ICC (jangan dikonversi!) sampai ketemu satu yang terlihat pas dengan gambar Anda (monitor harus terkalibrasi agar pratinjau warnanya benar-benar bisa dipercaya). Setelah itu, simpan gambar dengan profil tertanam. Soal mengapa diperlukan dua profil: profil sumber menggambarkan warna dalam gambar seperti keadaannya sekarang. Profil tujuan menggambarkan warna gambar keluaran setelah konversi. Selain itu, berhati-hatilah saat mengonversi ke profil tujuan tertentu: kalau misalnya dipakai profil yang menggambarkan pencetakan offset di kertas tanpa lapisan padahal gambarnya hendak dicetak di kertas berlapis, tentu hasilnya tidak akan bagus. Profil keluaran harus mewakili kondisi keluaran yang dituju secara akurat. Saat mengonversi dari ruang warna subtraktif ke aditif (atau sebaliknya) tanpa memakai profil yang benar (untuk kedua langkah konversi), pada umumnya warna atau kecerlangan yang didapat tidak akan 'benar', meski bisa saja Anda beruntung dan kebetulan tepat sasaran. Profil warna dapat diunduh dari International Color Consortium.
Mengubah ruang warna lewat profil
Ruang warna memang bisa dikonversi langsung begitu saja dengan magick seperti ini...
magick _cmyk_image.jpg_ -colorspace rgb _rgb_image.jpg_
Solusi terbaik untuk mengonversi CMYK ke JPEG RGB adalah memakai profil warna dengan operator "-profile". Raf Lenaerts menunjukkan aturan berikut dalam memakai operator "-profile" di dalam ImageMagick...
Jika tidak ada profil tertanam, "`[-profile](https://imagemagick.org/command-line-options/#profile)`" yang pertama adalah profil masukan. "`[-profile](https://imagemagick.org/command-line-options/#profile)`" kedua kemudian menentukan profil keluaran.
Jika ada profil tertanam, satu operator "`[-profile](https://imagemagick.org/command-line-options/#profile)`" saja akan langsung menentukan profil keluaran.
Ringkasnya...
- Opsi "
-profile" harus ditempatkan di antara file masukan dan file keluaran.
Ini sebenarnya praktik pemrosesan baris perintah IM yang standar. - Pakai "
+profile" dengan 'icm' untuk membuang profil icc yang ada. - "
-profile" pertama yang diberikan adalah profil masukan. - "
-profile" kedua yang diberikan adalah profil keluaran.
Karena itu, untuk memakai profil pada SEMUA gambar diperlukan tiga operasi "-profile": opsi profil: buang, masukan, dan keluaran. Misalnya, jika gambar masukan sudah punya profil warna, satu saja sudah cukup.
magick _rgb_image.jpg_ -profile USCoat.icm _cmyk_image.jpg_
Tetapi jika gambarnya belum punya (atau Anda tahu itu gambar RGB tanpa profil yang ada), pakai...
magick _rgb_image.jpg_ +profile icm \
-profile sRGB.icc -profile USCoat.icm _cmyk_image.jpg_
Ini menetapkan gambar hasilnya ke profil CMYK USCoat.icm. Profil CMYK lain adalah profil SWOP.icm. Untuk arah sebaliknya (gambar sudah punya profil), pakai...
magick _cmyk_image.jpg_ -profile sRGB.icc _rgb_image.jpg_
PERINGATAN: Jika gambar aslinya sudah memuat profil, misalnya profil CMYK, memberikan dua konversi profil adalah ide buruk. Contohnya
magick _cmyk_image.jpg_ -profile "CMYK.icc" -profile "RGB.icc" \
_output_image.jpg_
Hasilnya adalah konversi CMYK -> CMYK -> RGB. Tetapi karena CMYK tidak simetris, langkah konversi tambahan itu bisa berujung pada konversi warna yang kacau. (Lihat diskusi IM Forum Question on ICC profile conversion behaviour)
Modifikasi profil warna
Gambar yang hendak dikonversi sebaiknya semuanya sudah memuat profil ICC tertanam. Karena itu, untuk mengonversi gambar Anda dengan profil ICC CMYK yang sama...
magick _rgb_image.jpg_ -profile CMYK_PROFILE _cmyk_image.jpg_
Ini akan mengonversi memakai intent perseptual, yaitu bawaannya (lihat Color Space Conversion untuk penjelasan rinci tentang rendering intent). Karena hasil lewat intent perseptual bisa sangat berbeda tergantung perangkat lunak yang dipakai membuat profil ICC-nya, "-black-point-compensation" dapat dipakai bersama "-intent relative" untuk mendapat hasil yang sedikit lebih dekat ke yang diharapkan.
magick _rgb_image.jpg_ -intent relative -black-point-compensation \
-profile CMYK_PROFILE _cmyk_image.jpg_
| Baik pengaturan "-black-point-compensation" maupun "-intent" harus ditentukan sebelum operasi "-profile" agar berpengaruh.
| Opsi "-black-point-compensation" ditambahkan sejak IM v6.2.7-0.
Profil warna dapat diunduh dari International Color Consortium.
EXIF InterColorProfile
Selain penanganan profil warna di atas, banyak kamera digital menyimpan informasi profil warna pada atribut profil EXIF 'InterColorProfile'. Atribut ini dimaksudkan untuk "diasumsikan jika tidak ada profil warna yang tertanam ", menurut dokumen "Colour Management and Adobe PhotoShop 7".
Profil IPTC
Profil IPTC dipakai dalam gambar untuk menyimpan atribut identifikasi gambar, seperti caption, kredit, penulis, kata kunci, dan sebagainya. Untuk menambahkan profil IPTC ke sebuah gambar, cukup satu -profile:
magick _image.jpg_ -profile iptc _iptc_image.jpg_
Jika sebuah gambar memuat profil, profil itu bisa disimpan dengan perintah ini, sehingga dapat ditambahkan ke gambar lain yang serupa:
magick _iptc_image.jpg_ iptcData.iptc
Atau ekstrak versi teks dari profil itu supaya bisa disunting
magick _iptc_image.jpg_ IPTCTEXT:iptcData.pro
Berikut misalnya sebuah profil yang disumbangkan fcaserio di IM Forums.
Profil ini dapat ditambahkan ke sebuah gambar dengan
magick _image.jpg_ +profile 8BIM -profile 8BIMTEXT:iptcData.pro \
iptc_image.jpg
Gambar itu bisa dikonversi menjadi EPS (Encapsulated Postscript) dengan pratinjau TIFF (EPT), yang juga memuat profil IPTC. (Terima kasih Tee Tanne).
magick _itpc_image.jpg_ EPT:image.eps
Profil XMP
Ekstrak profil XMP dari gambar TIF...
magick picture.tif metadata.xmp
Sepatah kata tentang format gambar vektor
| Ada lebih dari satu gaya penyimpanan gambar di dunia ini... Raster | Gambar yang disimpan dan diproses memakai larik piksel berwarna. Format gambar raster mencakup GIF, PNG, JPEG, TIFF, dan seterusnya. Sebuah gambar bisa terdiri atas beberapa array (kanal) yang mewakili warna berbeda, dan bisa memuat beberapa gambar, layer, atau frame (tergantung penggunaannya) dalam satu file format gambar. |
|---|---|
| Vektor | Gambar didefinisikan dalam bentuk garis, ketebalan, tile, gradien, dan objek majemuk yang lebih besar. Formatnya mencakup SVG, Postscript, PDF, FIG, DXF, WMF, bahkan font TTF. Format ini memungkinkan gambar diubah ukurannya, bahkan diperbesar sangat jauh tanpa kehilangan kualitas. Selain itu, saat menyunting format semacam ini, seluruh objek umumnya bisa dipindahkan tanpa merusak apa yang ada di bawahnya (pelapisan objek). |
| Fraktal | Gambar jenis ini kasus langka yang khusus, dipakai untuk mencapai kompresi ekstrem pada gambar rumit seperti lukisan tua. Namun satu-satunya penggunaan yang saya tahu ada pada sebuah produk komersial yang sangat mahal. Di luar itu, fraktal juga dipakai untuk objek matematis rumit seperti himpunan Mandelbrot dan Julia, serta untuk membangkitkan cipratan warna acak pada screen saver (IFS). Sangat jarang terlihat. |
| Mengapa ini penting? Karena IM adalah 'pemroses gambar raster', dan meski ia bisa membaca atau menulis gambar yang tersimpan dalam salah satu format vektor, itu dilakukannya dengan mengonversi gambar dari dan ke gambar raster internal. Akibatnya, kalau Anda mencoba mengonversi gambar dari satu format vektor ke format vektor lain, pada dasarnya IM akan meraster gambar itu pada resolusi atau densitas yang berlaku saat itu, yang mudah-mudahan (tetapi kecil kemungkinannya) cocok untuk perangkat keluaran yang Anda tuju. Dengan kata lain, keluaran apa pun dari IM tidak akan pernah menjadi format vektor sejati. Ia memang bisa mengonversi format raster internalnya menjadi file format vektor, tetapi hasilnya hanya pembungkus gambar vektor yang dangkal di sekeliling sebuah gambar berformat raster. Dan kecuali gambar rasternya didefinisikan dengan benar (pada resolusi yang tepat) untuk perangkat keluaran, hasilnya tidak akan bagus. Sayangnya pengguna baru IM tidak tahu apa-apa soal ini. Mereka melihat IM sebagai konverter yang bisa mengubah, katakanlah, PDF menjadi Postscript, lalu menghasilkan gambar dengan efek aliasing 'kotak-kotak', warna yang 'pudar', atau gambar buram yang sama sekali tidak enak dilihat di perangkat keluaran yang dituju. Yang membawa kita ke inti yang ingin saya katakan... |
Hindari memakai ImageMagick untuk konversi 'gambar vektor' ke 'gambar vektor'
Misal: mengonversi antar format seperti: PDF, PS, SVG
Dengan kata lain, pakailah alat yang tepat untuk pekerjaan yang tepat. Dan untuk situasi ini, ImageMagick bukan alat yang tepat.
Bukan berarti IM tidak bisa dipakai untuk konversi semacam itu. Lagi pula, kebanyakan printer dan monitor memang meraster sendiri gambarnya untuk pencetakan sungguhan ke selembar kertas. Bedanya, printer tahu resolusi apa yang ia butuhkan untuk perangkat keras yang dipakainya. ImageMagick tidak. Untuk contoh mengonversi gambar vektor menjadi raster (dan memperbaiki konversi semacam itu), lihat contoh Postscript/PDF - masukan teks dan grafik praformat, dan untuk SVG serta gambar vektor buatan pengguna lihat Penanganan gambar SVG. Informasi tentang Pointsize, densitas, dan ukuran font sebenarnya mungkin juga berguna, terutama menyangkut pengaruh "-density" pada font teks yang digambar.
Alternatif di luar IM
Kalau Anda memang perlu melakukan konversi umum antar format vektor, program UniConvertor, Sk1 Project (biasanya tersedia sebagai paket Linux standar) dan VectorSection dapat dipakai untuk mengonversi vektor-ke-vektor tanpa benar-benar meraster gambarnya. Untuk konversi umum dari Postscript ke format vektor lain, lihat "pstoedit", yang biasanya tersedia di repositori paket tambahan sistem. Lihat juga "epstopdf" yang merupakan bagian dari Comprehensive TeX Network (CTAN). TeX dan LaTeX adalah sistem pengolah teks dokumentasi UNIX (buku dan artikel ilmiah). Sistem ini punya banyak alat yang berurusan dengan format Postscript dan PDF. Untuk konversi SVG ke PDF, Wolfgang Hugemann Auto@hugemann.de menyarankan bahwa konversi vektor ke vektor yang paling mudah adalah menampilkan SVG di peramban (Firefox) lalu mencetaknya memakai driver printer PDF. Meski "Uniconvertor" juga bisa dipakai.
Format file gambar lainnya
Tentu saja ada banyak sekali format file gambar lain yang bisa dipakai dan dipahami IM, tetapi banyak di antara format yang kurang 'umum' ini dikhususkan untuk tujuan tertentu, dan sering butuh sedikit penyetelan atau opsi lain agar berperilaku seperti yang Anda inginkan. Saya tidak menganjurkan format file ini, dan umumnya saya sendiri tidak memakainya. Namun saya berusaha mencatat berbagai catatan, teknik, dan opsi yang pernah dilaporkan di milis IM atau IM forum, supaya orang lain juga bisa memanfaatkan informasi yang terkumpul. Banyak catatan di bawah ini masih mentah dan belum diolah, dan saya terbuka menerima sumbangan lanjutan atau penulisan ulang untuk catatan-catatan itu.
Postscript (PS, EPS) dan Adobe PDF
Untuk penanganan dasarnya lihat Postscript/PDF - masukan teks dan grafik praformat dan peringatan tentang format gambar vektor. Masalah utama Postscript dan format kerabatnya (seperti PDF) adalah bahwa ia bahasa pemformatan halaman yang rumit. Artinya, formatnya adalah sebuah program dan sebenarnya bukan format gambar! Itu berarti IM terpaksa bergantung pada program luar lain (atau delegate) untuk 'menjalankan' program itu dan mengembalikan gambar yang dihasilkan.
Encapsulated Postscript (EPS)
Encapsulated Postscript sebenarnya persis sama dengan postscript biasa (sebuah format gambar vektor), hanya saja ia gambar satu halaman, dan ada entri "Bounding Box' yang mendefinisikan area persis yang dicakup gambar. Format ini dirancang agar program lain bisa memindahkan dan menskalakan gambar ketika menyisipkan postscript yang didefinisikannya ke dokumen postscript lain. IM menanganinya pada dasarnya sama seperti postscript. (Lihat di atas).
magick image.jpg -compress none eps2:image.eps
Pakai "EPS2:" atau "EPS3:" untuk membuat file EPS terkompresi JPEG: Catatan: penambahan profil ke gambar EPS ada di daftar 'to do' tetapi saat ini belum didukung.
Masukan Postscript/PDF
Karena format ini format gambar vektor, ia dipengaruhi pengaturan seperti "-page" dan "-density". Contoh pembacaan Postscript (yang sama untuk format EPS dan PDF) disediakan di Postscript/PDF - masukan teks dan grafik praformat, dan sebaiknya bagian itu dibaca lebih dulu. Namun pembacaan format-format ini sangat rumit, karena semuanya bahasa komputer utuh yang dirancang khusus untuk menghasilkan halaman cetak pada printer laser berkualitas tinggi. Ini jauh di luar cakupan ImageMagick, sehingga ia bergantung pada program delegate khusus bernama "ghostscript" untuk membaca dan mengonversi halaman Postscript dan PDF menjadi gambar raster. Satu catatan. Karena IM memakai Ghostscript untuk meraster file postscript pada resolusi tertentu, gambar raster apa pun yang ada di dalam file postscript itu sering menjadi buram atau terdistorsi, kecuali densitas persis gambar raster tersebut diketahui. Ini juga mengandaikan program postscript-nya sendiri tidak memutar atau memanipulasi gambar raster itu. Sebenarnya ada beberapa delegate yang tersedia dan IM memilihnya tergantung situasi. Misalnya 'ps:color' (memakai perangkat ghostscript 'bmpsep8') versus 'ps:alpha' (memakai 'pngalpha') dipilih tergantung apakah "-channel RGBA" sudah diatur atau belum. Delegate 'ps:color' dipakai sebagai bawaan alih-alih 'ps:alpha' karena perangkat ghostscript 'pngalpha' hanya mendukung satu halaman/satu gambar sedangkan PDF umumnya banyak halaman. Pakai "-channel RGBA" sebelum membaca gambar untuk memilih metode delegate 'pngalpha'. Kalau yang diperlukan hanya jumlah halamannya, memakai ghostscript bisa jauh lebih cepat.
gs -q -sPDFname=document.pdf pdfpagecount.ps
%%Pages: 96
Windows dan Ghostscript sedikit lebih rumit, karena menuntut penggunaan registry Windows.
Opsi khusus ImageMagick untuk membaca PDF
Opsi khusus untuk penanganan PDF...
-units PixelsPerInch- Sebaiknya diatur saat menangani dokumen PDF (membaca maupun membuat). Saya tidak yakin apa fungsinya, tetapi berbagai laporan menunjukkan opsi ini perlu diatur agar bekerja dengan benar.
-define pdf:use-cropbox=true- Pakai 'cropbox alih-alih 'mediabox' bawaan, sebagaimana file PDF yang dihasilkan Adobe. (Pada dasarnya menambahkan "
-dUseCropBox" pada konversi ghostscript dari gambar PDF. CATATAN: ini bekerja jika PDF Anda hanya punya satu halaman, tetapi jika PDF-nya banyak halaman, pemangkasannya tidak akan benar. -define pdf:use-trimbox=true- Pakai 'trimbox alih-alih 'mediabox' bawaan, sebagaimana file PDF yang dihasilkan Adobe.
Mengubah delegate masukan
Mengubah delegate sistem itu berbahaya dan satu kesalahan bisa membuat IM tidak mampu membaca file postscript/PDF. Anda mungkin juga perlu hak administrator, karena delegate yang didefinisikan sistem tidak bisa diganti dengan delegate pribadi, akibat langkah keamanan (anti-'hacker'). Lihat Coder dan delegate untuk format gambar untuk informasi lebih lanjut tentang sintaksis XML delegate beserta maknanya, dan tentang pembuatan delegate masukan/keluaran pribadi. Pada topik forum Convert EPS to JPG Unreliable disarankan untuk menyunting "delegates.xml" sistem dan mengganti "-sDEVICE=bmpsep8" menjadi "-sDEVICE=bmp16". Pengguna lain menemukan bahwa mengubahnya menjadi "-sDEVICE=pnmraw" juga bekerja lebih baik. Saya sendiri belum mencobanya, jadi tidak bisa memberi jaminan apa pun soal ini, atau tentang versi Ghostscript mana yang berlaku. Kalau ada informasi lebih lanjut, tolong beri tahu saya. Kalau Anda punya file postscript atau PDF CMYK, halaman Blog of John merinci cara mengubah entri delegate (menambahkan opsi ghostscript "-dUseCIEColor") supaya konversi ghostscript menangani postscript semacam ini. Kemungkinan lain adalah membuat "Delegate pribadi yang memanggil pdftoppm. Katakanlah tag-nya bernama "pdfalt" yang memanggil program "pdftoppm" atau bahkan "pdfimage" dari paket "xpdf". Maka aliran Anda akan tampak seperti ini:
magick pdfalt:image.pdf image.png
Ada yang mau mencoba membuat delegate-nya? Beri tahu kami! Anda mungkin juga ingin mencoba "pstoedit" yang bisa mengonversi file postscript ke format vektor lain, atau meneruskan postscript itu ke API ImageMagick untuk dikonversi menjadi bitmap. Saya belum bereksperimen atau mengujinya, dan ingin sekali mendapat masukan.
Ekstraksi gambar raster dari PDF
Perenderan halaman PDF mana pun ke ukuran atau 'densitas' tertentu adalah inti dari grafik vektor yang dipakai PDF. Cara itu bekerja bagus untuk teks atau gambar garis. Tetapi ini juga berarti setiap gambar raster (array piksel) di dalam PDF harus diubah ukurannya. Padahal pengubahan ukuran itu operasi 'lossy' yang membuat gambar sedikit merosot, kecuali dipakai densitas asli gambar raster tersebut, yang bisa berbeda-beda dari satu gambar ke gambar lain di dalam PDF yang sama! Karena itu, kemampuan mengekstrak gambar raster dari sebuah PDF tanpa acuan 'densitas' apa pun sangat menguntungkan. Gambar raster bisa diekstrak langsung memakai program "pdfimages", yang merupakan bagian dari paket perangkat lunak poppler-utils atau "xpdf-utils. Paket-paket ini juga memuat banyak alat lain yang berguna untuk pemrosesan PDF. Lihat Poppler for Windows dan Xpdf Reader. Layak juga dilihat "mutool" dari paket "MuPDF" buatan orang-orang yang sama yang mengurus GhostScript. Alat daring untuk mengekstrak teks dan gambar adalah Sumnotes (komersial dengan uji coba gratis terbatas). Pada tingkat yang lebih rendah, Wolfgang Hugemann bilang setiap gambar yang termuat dalam sebuah PDF bisa diekstrak (terutama dari PDF yang dihasilkan pemindai). Pada dasarnya dengan mengekstrak deretan byte apa pun di antara "stream" dan "endstream", lalu menyimpannya sebagai file terpisah.
Ekstraksi teks dari PDF
Pakai program GhostScript "ps2ascii" atau "pstotext". Atau sebagai alternatif yang menangani teks sekaligus gambar, lihat "pdftohtml" yang punya keluaran XML yang menurut laporan Ross Presser "cukup bagus dalam menyusun ulang paragraf. ". Program "pdftk" juga bisa 'membuka kompresi' sebuah PDF supaya bisa disunting langsung, dan 'memperbaiki' PDF yang rusak.
Opsi keluaran Postscript/PDF
Pengaturan berikut diketahui memengaruhi keluaran format gambar Postscript, Encapsulated Postscript, dan PDF: "-page", "-gravity", "-compress", "-density", Secara bawaan tidak ada kompresi yang dipakai pada keluaran gambar PDF, sehingga file PDF sering jauh lebih besar daripada seharusnya. Tabel berikut menyandingkan mode kompresi IM dengan mode kompresi Postscript yang dihasilkan.
| Arti kompresi PS/PDF Kompresi | pengaturan '/Filter [ ... ]' pada gambar |
|---|---|
"-compress none" |
'/ASCII85Decode' |
"-compress zip" |
'/FlateDecode' |
"-compress jpeg" |
'/DCTDecode' |
"-compress lzw" |
'/LZWDecode' |
"-alpha off -monochrome -compress fax" |
'/CCITTFaxDecode' |
"+compress" |
|
"-compress rle" |
|
| apa pun selain itu | '/RunLengthDecode' |
Kompresi yang dianjurkan untuk PDF adalah Zip (kompresi Deflate) atau Group4 (Fax).
magick image.gif -alpha off -monochrome -compress Zip -quality 100 \
-units PixelsPerInch -density 600 image_deflate.pdf
magick image.gif -alpha off -monochrome -compress Group4 -quality 100 \
-units PixelsPerInch -density 600 image_group4.pdf
Dua perintah ini menghasilkan file PDF yang jauh lebih kecil daripada konversi langsung, untuk halaman hitam putih. Namun mana yang lebih kecil tergantung gambarnya dan mustahil ditentukan tanpa mencoba dan menguji ukuran hasilnya.
Alternatif keluaran Postscript/PDF
Ingat bahwa PDF adalah format gambar (dokumen) vektor, sedangkan IM pemroses gambar raster. Ini berarti dokumen PDF apa pun yang dibuat IM pada dasarnya terdiri atas satu gambar raster per halaman. Gambar yang dikeluarkan dalam dokumen PDF itu terpaku pada resolusi (atau densitas piksel) tertentu, yang bisa menimbulkan masalah distorsi piksel saat dilihat atau dicetak pada resolusi lain. Untuk dokumen teks, memakai gambar raster juga boros, karena teks biasa dengan font dan metadata pemformatan selalu jauh lebih kecil dan dirender lebih baik daripada gambar raster hasil pindaian teks itu. Karena itu, program pembuat PDF lain mungkin lebih cocok dengan kebutuhan Anda. Dengan program semacam itu gambar tetap sebagai gambar dan teks tetap sebagai teks, sehingga teks dan gambar bisa diposisikan bersama secara lebih rapi dan masuk akal, dan penyisipan teks maupun overlay panah atau garis penghubung pun jadi lebih logis. Misalnya, saya sarankan Anda melihat program pendukung yang disediakan sistem TeX dan LaTeX. Lihat Comprehensive TeX Network (CTAN). Perangkat lain adalah Multivalent Document Tools. Tentu saja program semacam itu lebih sulit diotomatiskan; meski begitu, dulu saya pernah memakai format file grafik vektor FIG yang sederhana (lihat Xfig) untuk menghasilkan dokumen Postscript dan PDF dengan teks dan grafik yang ditempatkan secara otomatis. Konverter gambar ke PDF... Ada alat sam2p yang dikhususkan untuk mengonversi gambar menjadi file PDF. Jadi lakukan semua prapemrosesan dengan ImageMagick lalu buat konversi akhirnya memakai "sam2p". Ia bahkan membawa skrip kecil untuk menyesuaikan hasilnya ke kertas A4. Dari sam2p README: Q58) |
Bisakah sam2p menghasilkan PDF yang diskalakan secara proporsional (yaitu menjaga rasio aspek) ke ukuran halaman tertentu, dan diletakkan di tengah halaman? |
|---|---|
| A58) | Tidak, tetapi skrip Perl sam2p_pdf_scale.pl yang disertakan bersama sam2p bisa mem-post-process file yang dibuat sam2p. Misalnya, untuk menskalakan dan menengahkan PDF pada kertas A4, lakukan: |
sam2p input.img output.pdf
sam2p_pdf_scale.pl 595 842 output.pdf
Sayangnya ini tidak bekerja dengan PDF bawaan yang dibuat IM. -- Sebastian Krause, dari IM Users Mailing List Dokumen PDF banyak halaman... perl bisa dipakai untuk menggabungkan beberapa file PDF, tanpa harus memakai IM beserta masalah rasterisasinya...
1 2 3 4 5 6 7 8 9 10 11 12 13#!/usr/bin/perl # Script pdf-combiner.pl use strict; use warnings; use PDF::Reuse; prFile('combo.pdf'); # Output. for (qw/a b c d/) # Inputs. { prImage("result_$_.pdf"); prPage(); } prEnd();
Toolkit JAVA juga bisa dipakai untuk menggabungkan gambar hasil IM ke dalam sebuah PDF, sehingga menghasilkan PDF yang lebih baik daripada PDF sederhana yang dibuat IM...
1 2 3 4 5 6 7 8 9 10#!/bin/bash for x in ./*.jpeg do echo $x to ${x}.pdf magick $x -quality 75 ${x}.pdf done echo Merging... java tool.pdf.Merge *.pdf
Pengguna lain di IM Discussion Forums juga menyarankan memakai PDFjam untuk menggabungkan beberapa halaman PDF sekaligus.
Format file gambar PbmPlus / NetPBM: PBM PGM PPM PNM PAM
Filter manipulasi gambar PbmPlus atau "NetPBM" (baris perintah unix). Format gambar ini hadir dalam beragam gaya: "PBM" (bitmap), "PGM" (grayscale), "PPM" (warna), "PFM" (floating point, untuk HDRI), "PAM" (format sembarang), dan "PNM" (format NetPBM apa pun). Masing-masing (kecuali "PAM" dan "PFM") juga bisa berupa bentuk biner 'raw' (bawaan saat ditulis IM maupun NetPBM) , atau berupa format teks ASCII biasa (diatur dengan "-compress None"). Tentu saja IM bisa membaca semuanya. Format ini sebaiknya dianggap memakai ruang warna "linear-RGB" saja, dan BUKAN "sRGB" seperti kebanyakan format file gambar lain. Namun depth 16 sebaiknya dipakai saat memakai "linear-RGB", jadi sebaiknya berhati-hati agar terhindar dari error pembulatan yang berat pada gambar depth 8. Format NetPBM biasanya menyimpan satu gambar per file. Namun IM, dan banyak utilitas NetPBM lain, akan membaca dan menulis file dengan beberapa gambar yang tinggal digandeng satu demi satu. Karena itu, saat menulis gambar ada baiknya mengatur pengaturan "-/+adjoin" yang sesuai. (Lihat Menulis banyak gambar - teknik adjoin untuk rinciannya). Format file PPM sebenarnya sangat penting bagi ImageMagick karena ia format komunikasi yang dipakai selama konversi gambar Postscript dan PDF lewat delegate "ghostscript". Ia juga format utama untuk pemrosesan gambar video, misalnya dari perintah "ffmpeg". Rentang 'quality' atau nilai apa pun bisa dipakai pada masukan (sampai 16 bit atau 'depth' 65535). Misalnya, berikut rentang nilai yang sangat tidak biasa, yaitu 5, untuk menghasilkan 'step gradient'. Saya tidak tahu format gambar lain yang memperbolehkan rentang kualitas seganjil itu. |
echo "P2 6 1 5 0 1 2 3 4 5" | \
magick - -scale 120x20 pgm_step_gradient.gif
![[IM Output]](../static/img/formats/pgm_step_gradient.gif)
Lihat juga Gradien hasil pengubahan ukuran (resize), tempat gambar teks NetPBM dipakai untuk membuat gambar yang sangat kecil (2 sampai 4 piksel). Contoh di atas juga memperlihatkan betapa bergunanya sub-format 'ASCII' itu. Terutama sebagai cara menyelipkan gambar ke dalam skrip shell, atau sebagai sarana membangkitkan gambar dari sederet angka. Lihat misalnya TXT: format piksel terenumerasi. Satu contoh penggunaan seperti ini ditunjukkan pada contoh Metodologi redistribusi histogram.
PbmPlus/NetPBM vs format data ASCII
Keluaran ASCII-nya mungkin metode paling bersih untuk mengekstrak nilai warna dari sebuah gambar, yang lagi-lagi membuatnya sangat cocok untuk skrip dan pemrosesan gambar sederhana.
magick -size 20x2 xc: +noise random -channel G -separate +channel \
-depth 16 -compress none pgm_random_values.pgm
Perhatikan bahwa ketika keluarannya teks biasa, barisnya tidak ditulis sedemikian rupa agar sejajar dengan panjang baris gambar. Tetapi keluaran itu bisa diformat ulang memakai berbagai utilitas teks UNIX. Misalnya utilitas teks "tr" bisa dipakai untuk mengganti dan memampatkan deretan koma dan spasi menjadi satu baris baru, sehingga semua nilai tersusun satu nilai per baris dan lebih mudah diproses skrip. Selain itu, dengan IM 'depth' yang bisa ditentukan untuk kualitas keluaran PGM dan PPM hanya 8 atau 16. Padahal format PbmPlus memperbolehkan 'maxval' berapa pun untuk nilainya, bahkan yang bukan pangkat dua! Formatnya memang punya batas keras depth 16 bit (maxval 65535). Kendali yang lebih halus atas 'maxval' gambar NetPBM saat ini belum mungkin, meski bisa saja ditambahkan lewat pengaturan coder khusus di kemudian hari. (jika diminta). Berikut contoh lain yang mengeluarkan array 9x9 nilai grayscale dari 0 sampai 255, diekstrak dari gambar bawaan rose. Saya memakai "pnmtopnm -plain" supaya kita mendapat baris baru di akhir tiap baris piksel.
magick rose:[9x9+0+0] -colorspace gray -transpose -depth 8 PGM:- |\
pnmtopnm -plain
Varian lama perintah NetPBM ini antara lain "pnmnoraw" dan "pnmtoplainpnm", yang melakukan hal sama dengan "pnmtopnm -plain". Periksa halaman man paket NetPBM Anda, karena para pengembangnya sepertinya tidak bisa bulat soal bagaimana ini semestinya dilakukan. Program PbmPlus mana pun akan mengeluarkan baris baru di akhir 'baris gambar', yang tidak dilakukan coder ImageMagick. Ini bisa membuat pemrosesan gambar dalam skrip jauh lebih mudah. Berikut contoh mengeluarkan bitmap PBM ASCII yang sangat kecil.
magick label:O pbm: | pnmtopnm -plain
Perhatikan bahwa bitmap PBM bahkan tidak perlu mengeluarkan spasi di antara nilai, meski spasi itu diperbolehkan (IM mengeluarkannya, utilitas PbmPlus tidak). Perhatikan juga bahwa untuk bitmap, putih='0' (latar belakang) dan hitam='1' (latar depan). Ini standar untuk format bitmap seperti XBM dan PBM, dan ImageMagick memahami konvensi tersebut. Kalau ini tidak dikehendaki, negasikan gambarnya, atau pakai Penyesuaian level menurut warna untuk menetapkan warna yang diinginkan pada gambar bitmap.
Kendali depth PbmPlus/NetPBM
Kadang diperlukan kendali lebih atas depth gambar PGM dan PPM, misalnya untuk memakai rentang nilai persentil dari 0 sampai 99. Salah satu caranya memakai program NetPBM "pamdepth", yang bisa mengonversi gambar ke rentang mana pun (sampai batas internal 65335). Berikut misalnya sebuah array nilai gambar tetapi memakai rentang nilai keluaran 0 sampai 99.
magick -size 9x9 radial-gradient: -depth 16 PGM:- |\
pamdepth 99 | pnmtopnm -plain
Berikut contoh lain, tetapi kali ini memakai operator penyesuaian level terbalik untuk menetapkan rentang nilai keluaran. Cara ini memberi kendali lebih atas transformasi nilai, tetapi 'maxval' dalam gambar PGM tidak cocok dengan nilai maksimum gambarnya.
magick -size 9x9 radial-gradient: +depth +level 0,99 PGM:- |\
pnmtopnm -plain
Opsi "+depth" pada perintah di atas sangat penting untuk menyetel depth file gambar agar sama dengan tingkat kualitas IM. Yang diperlukan hanyalah menyetel ulang (atau mengabaikan) baris ketiga menjadi nilai '99', dan bila perlu mengompres gambarnya kembali ke format gambar biner NetPBM 'raw'. Namun karena PbmPlus/NetPBM punya depth maksimum 65535 (16 bit), cara ini hanya bekerja untuk IM versi Q8 atau Q16.
Komentar PbmPlus/NetPBM
IM akan membaca, menulis, dan mempertahankan baris 'comment' pada header format file PbmPlus/NetPBM. Misalnya...
magick -size 2x2 xc:grey -set comment "by Anthony" -compress none PGM:-
Meski begitu, kebanyakan aplikasi termasuk PbmPlus sendiri akan mengabaikan komentar semacam itu, dan bahkan menghilangkannya saat memproses file.
magick -size 2x2 xc:grey -set comment "by Anthony" PGM:- | pnmtopnm -plain
PbmPlus/NetPBM vs ImageMagick
Paket pemrosesan gambar PbmPlus/NetPBM dulu pernah menjadi saingan ImageMagick untuk pemrosesan gambar lewat baris perintah, tetapi memakai filosofi penyaringan berpipa yang sama sekali berbeda (lebih tingkat rendah) untuk penanganan dan pemrosesan gambar. Ini membuatnya mudah dipakai dalam skrip shell, tetapi lebih sulit dipakai untuk pemrosesan gambar yang umum atau sangat rumit. Ini juga berarti gambar jauh lebih sering dikonversi dari dan ke format file gambar, dan umumnya menuntut banyak file sementara. Gambar PbmPlus/NetPBM umumnya tidak berurusan dengan transparansi (walaupun format PAM yang lebih baru bisa), dan tidak menyediakan cara umum untuk membawa metadata gambar bersama data gambarnya. Semua format PbmPlus/NetPBM (seperti format internal ImageMagick, lihat Streaming gambar MIFF) bisa menangani stream berisi banyak gambar, cukup dengan menggandeng atau menambahkan gambar satu demi satu. Ini membuatnya sangat cocok untuk metode pemrosesan gambar yang berpipa dan mengalirkan banyak gambar, seperti untuk pemrosesan video. Tetapi perlu diingat bahwa sebagian program PbmPlus/NetPBM hanya berurusan dengan gambar tunggal dan tidak akan menangani stream berisi banyak gambar. Karena lebih tingkat rendah dan lebih tua daripada ImageMagick, paket ini sering dipilih untuk keluaran gambar mentah seperti keluaran dan penanganan gambar video. Gambar PbmPlus juga lebih sering dipakai untuk data ilmiah, dan karena itu gambarnya biasanya disimpan dalam ruang warna 'linear-RGB', bukan ruang warna non-linear 'sRGB' yang lebih umum. Berhati-hatilah. Kedua paket bisa hidup berdampingan, dan saya sendiri kadang memakai implementasi PbmPlus/NetPBM untuk beberapa hal, alih-alih ImageMagick. Biasanya saat memakai pemrosesan gambar tingkat rendah tertentu, atau membuat skrip yang memakai array nilai yang tersimpan dalam bentuk gambar. Kedua paket ini bekerja sama dengan baik, dan saya menganjurkan keduanya dipasang dan dipakai untuk pekerjaan gambar yang serius. | _Sayalah orang yang membuat rilis patch penting NetPBM pada 1995, di masa ketika hampir tidak ada pengerjaan pada perangkat lunak itu. Karena itu saya punya pemahaman yang baik tentang perangkat lunak PbmPlus dan format file gambarnya yang sederhana.
Sejak itu perangkat lunak ini telah dikembangkan ulang beberapa kali oleh orang yang berbeda-beda, dan akhirnya tampaknya menjadi proyek open source yang benar. Berbagai programnya tampak makin matang dan mulai bekerja sama dengan lebih baik.
Namun masalah utamanya: ketiadaan metadata dan kerumitannya; tetap ada. Tetapi kesederhanaannya sebagai format file adalah keunggulan terbesarnya, yang membuatnya ideal untuk manipulasi gambar dan data pada tingkat yang sangat rendah.
_
TIFF
Format TIFF adalah format berpemilik PhotoShop. Namun format ini begitu
sarat fitur, dan sudah dimodifikasi oleh hampir setiap aplikasi yang pernah
repot memakainya, sehingga tidak ada program, bahkan photoshop sekalipun,
yang sanggup menangani SEMUA variannya. Photoshop punya peluang terbaik membacanya.
Saya sendiri akan menjauhi format file gambar TIFF kecuali Anda memang
bekerja khusus dengan photoshop, atau aplikasinya tidak menerima format file
gambar lain yang terdefinisi lebih baik.
Saya tidak memakai format file gambar TIFF, ataupun Photoshop. Kalau Anda memakai
format ini dengan IM secara ekstensif, mungkin Anda berkenan mengirimkan temuan
Anda kepada saya untuk dimuat di sini. Dengan begitu sesama pengguna TIFF terbantu.
Apakah sebuah paket perangkat lunak tertentu bisa membaca TIFF, yang bisa
dilakukan hanyalah mencoba dan melihat sendiri. Itulah masalah format ini.
TIFF dan densitas (resolusi) di photoshop...
Lihat [Photoshop dan densitas](basics.html#density_photoshop)
untuk rincian dan solusi masalah ini
Konversi JPEG ke TIFF...
magick image.jpg image.tif
Ini akan menyimpan gambar di dalam file TIFF memakai kompresi JPEG
(yang diwarisi dari masukan JPEG. Atau ia akan menghasilkan error seperti...
Error: "JPEG compression support not configured"
Ini disebabkan pustaka TIFF yang tidak menyertakan dukungan kompresi JPEG.
Bagaimanapun juga INI BURUK.
Masalah ini bisa disiasati dengan mengubah pengaturan agar memakai algoritme
kompresi yang berbeda:
magick image.jpg -compress zip image.tif
magick image.jpg -compress lzw image.tif
magick image.jpg +compress image.tif
PERINGATAN: -compress Group4 dengan TIFF memang bekerja, tetapi HANYA jika semua
piksel transparan dan semitransparan dibuang dari gambar. Biasanya hal itu
dipastikan dengan cara yang sama seperti gambar JPEG di atas, memakai
-background {color} -alpha remove
Lihat [Menghapus transparansi dari gambar](masking.html#remove)
tepat sebelum penyimpanan akhir (yang pertama hanya bekerja untuk gambar tunggal).
File presisi floating point TIFF (dan MIFF) (Ditambahkan pada IM v6.2.6-5)...
Ini terutama bagus untuk pemrosesan gambar HDRI (yang memakai titik mengambang
di dalam IM sendiri)
Untuk presisi tunggal (float), atur...
-depth 32 -define quantum:format=floating-point
Untuk presisi ganda (double), atur...
-depth 64 -define quantum:format=floating-point
Gambar TIFF 14 bit...
magick logo: -sharpen 0x1 -depth 14 logo.tif
tiffinfo logo.tif
Image Width: 640 Image Length: 480
Resolution: 72, 72 (unitless)
Bits/Sample: 14
Compression Scheme: LZW
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 2
Planar Configuration: single image plane
DocumentName: logo.tif
Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.org
Gambar TIFF 12 bit...
Untuk mengonversi gambar TIFF 16-bit menjadi 12-bit:
magick image.tif -depth 12 image-12.tif
Gambar hitam putih murni...
magick image ... -type truecolor -type bilevel image.tiff
Menghasilkan gambar yang normal dan ukuran file terkecil, serta penanganan
hitam/putih yang benar di Photoshop, Microsoft Windows Picture and Fax
Viewer.
[TIFF discussion](https://magick.imagemagick.org/viewtopic.php?p=51723),
_[RQuadling](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=7913)_.
Endian dan fill-order
Urutan penyimpanan nilai data TIFF dikendalikan oleh
-endien Urutan byte global
-define tiff:endian Endian wadah format Tiff
-define tiff:fill-order Urutan bit di dalam satu byte
Masing-masing menerima nilai MSB (bawaan) atau LSB, namun
"tiff:fill-order" akan disetel ke nilai "tiff:endian"
jika itu didefinisikan, tetapi tidak dari nilai endian global.
Properti "tiff:endian" adalah endianness wadah gambar. Properti
"-endian" adalah endianness piksel gambar. Keduanya bisa berbeda.
Menyimpan format file TIFF dengan hanya satu baris per strip
-define tiff:rows-per-strip=1.
Untuk menyimpan lebih banyak baris per strip, naikkan angkanya
-define tiff:rows-per-strip=8
Urutan 'endian' untuk bilangan bulat biner dalam format itu juga bisa ditentukan
-endian MSB -endian LSB
Untuk gambar TIFF yang lebih kecil (selain lewat kompresi, bisa juga dicoba
opsi dan pengaturan seperti -depth 8 untuk menurunkan kualitas warna
atau -alpha off untuk membuang kanal alpha atau transparansi dari gambar.
IM akan menyimpan gambar grayscale sebagai TIFF grayscale, jika tidak ada warna
non-grayscale. IM bisa dipaksa menyimpannya sebagai non-grayscale dengan
-depth 8 -type TrueColor
Ditambahkan pada IM 6.6.4-3
Memungkinkan penyetelan metadata (properti) "Software Creation:"
menjadi sesuatu selain "Image Magick 6.**"
-set tiff:software "My Software"
Windows Picture and Fax Viewer, Windows Explorer
Keduanya hanya bisa menampilkan TIFF yang punya nilai Photometric
Interpretation tertentu, seperti RGB. Opsi IM...
-compress LZW -type TrueColor
membalik photometric interpretation (Ditambahkan pada IM 6.3.2-10)
-define quantum:polarity=min-is-black
-define quantum:polarity=min-is-white
TIFF banyak halaman
Kalau Anda ingin memecah tiff banyak halaman menjadi halaman terpisah, IM bisa
bermasalah karena ia tetap memakai banyak memori untuk menahan halaman sebelumnya
walaupun Anda memakai perintah seperti...
magick "a.tif[i]" b%03d.tif
Ini bisa dianggap bug, atau mungkin peningkatan di masa depan.
Solusi yang lebih baik mungkin program "tiffsplit" di luar IM.
Profil TIFF dan EXIF
Cristy melaporkan: pustaka delegate libtiff mendukung profil EXIF
tetapi tidak dapat diandalkan dan terlalu sering menimbulkan kesalahan, jadi kami
menonaktifkan pemanggilannya.
Untuk mendapatkan atribut EXIF, coba ini.
magick identify -verbose -define tiff:exif=true image.tif
Format TIFF bisa memuat mask bitmap dalam bentuk clip path, yang dapat diaktifkan memakai operator "-clip". 'Clip' itu bisa dipakai untuk me-mask gambar Anda dengan path tersebut memakai...
magick image_clip.tif -clip \
...do_various_operations... \
+clip-mask image_masked.png
Lihat Clip atau write mask untuk rincian lebih lanjut.
BMP, bitmap Windows
Format gambar ikon desktop Windows, BMP (singkatan dari bit-mapped), adalah
format gambar yang sangat tidak ramah dan sebaiknya dihindari bila mungkin.
ImageMagick mendukung gambar BMP 8, 24, dan 32-bit.
Tambahkan -colors 256 di akhir baris perintah Anda (sebelum nama file gambar
keluaran) untuk membuat gambar BMP 8 bit berpeta warna alih-alih format BMP
24 bit. Warna tambahan bisa muncul pada gambar setelah operasi seperti
pemutaran dan pengubahan ukuran. Lihat Color Quantization untuk info soal -color.
Ada tidaknya transparansi menentukan apakah dipakai format BMP 24 (RGB) atau
32 bit (RGBA). Pakai "-alpha off" untuk mematikan transparansi
pada sebuah gambar.
Jika semua warnanya grayscale, dihasilkan gambar grayscale 'directcolor'.
Saya kira -type truecolor akan menghentikan perilaku ini.
Kalau Anda punya program lama yang tidak bisa membaca gambar BMP4 bawaan yang
ditulis ImageMagick, (misalnya Windows Background Image), pembuatan gambar
berformat BMP3 bisa dipaksakan dengan...
magick image BMP3:image.bmp
Format ini semestinya tidak punya transparansi dan semestinya berupa 'gambar
yang bisa dicetak', apa pun artinya itu. Dengan kata lain kompatibel 'Windows'.
Namun, jika file masukannya PNG dan memuat chunk gAMA dan cHRM
(informasi gamma dan kromatisitas), salah satunya memaksa "magick" menulis
BMP4. Untuk mendapat BMP3, informasi itu harus dibuang. Salah satu caranya
mungkin mengalirkan gambar lewat pipa ke format file gambar minimal yang
'hanya berisi data gambar' seperti PPM lalu disimpan ulang sebagai BMP3. Berantakan, tetapi semestinya bekerja.
magick image.png ppm:- | magick - BMP3:image.bpm
IM tidak bisa menghasilkan BMP pada tingkat depth selain 8. Namun bisa
dipakai paket pemrosesan gambar NetPBM untuk melakukan konversi akhir ke
tingkat depth lain (Ini butuh setidaknya IM versi Q16)...
magick image -alpha off -colors 16 ppm:- |\
pnmdepth 4 | ppm2bmp > image.bmp
Batasan format....
Header format BMP2: hanya memungkinkan pendeskripsian lebar, tinggi, dan
depth bit (bit per piksel) sebuah gambar. Depth bit-nya bisa salah satu dari
1, 4, 8, atau 24.
Sebagai pembanding, format bmp3: memperbolehkan depth bit 0, 1, 4, 8 ,16, 24, dan
32 serta punya ruas tambahan yang menentukan resolusi x dan y (dalam piksel per meter)
dan kompresi data gambarnya.
ICO
Untuk membuat gambar berformat ICO multi-resolusi, cukup buat semua ukuran
gambar yang Anda perlukan lalu tulis semuanya ke file ICO yang sama.
magick icon-16.bmp icon-32.bmp icon-64.bmp \
icon-128.bmp icon-256.bmp myicon.ico
Pembaruan
magick icon-256.png \
-define icon:auto-resize="256,128,96,64,48,32,16" \
myicon.ico
Sekarang ini bisa ditambahkan ke halaman web Anda dengan
<LINK REL="shortcut icon" HREF="myicon.ico">
Namun kini banyak peramban web menerima sebagian besar format gambar, bukan
hanya format ICO.
Format gambar RAW kamera (CRW,CR2,NEF,X3F,dll.)
Kebanyakan kamera digital, dengan pengecualian sensor Sigma Foveon dan sebagian kamera Sony, mengubah gambar yang dihasilkan lensa menjadi data digital memakai jutaan sensor yang mendeteksi kecerlangan satu warna tertentu: merah, hijau, atau biru. Agar kamera menanggapi warna kira-kira sama seperti mata manusia, jumlah sensor hijau dua kali lipat sensor merah atau biru, karena mata kita jauh lebih peka terhadap cahaya hijau. Sensor-sensor itu ditata dalam apa yang disebut array Bayer. Untuk uraian dan diagram penataan ini lihat, misalnya, Understanding Digital Camera Sensors. Konversi data dari array Bayer menjadi piksel RGB yang lebih akrab menuntut proses bernama demosaicing. Setelah operasi itu selesai pun kita masih belum punya gambar yang layak ditampilkan. Bahkan dengan piksel hijau ekstra, sensor kamera tetap tidak menangkap warna seperti cara kita menangkapnya. Kalau Anda mengambil selembar kertas putih lalu melihatnya di bawah sinar matahari terang, kemudian masuk ke dalam ruangan dan melihatnya di bawah lampu neon, kertas itu akan tampak putih pada kedua kondisi. Tetapi kalau kertas itu difoto pada kondisi yang sama memakai pengaturan kamera bawaan, kertasnya akan memperlihatkan warna yang sedikit berbeda ketika ditampilkan di layar. Sebabnya, meski bagian belakang retina kita "melihat" cahaya pantulan kertas yang sama dengan yang dilihat kamera, otak kita menafsirkan cahaya itu untuk kita sehingga kertasnya kita persepsikan putih. Kamera hanya mengukur jumlah cahaya merah, hijau, dan biru yang memantul dari kertas; di bawah lampu neon cahaya birunya lebih banyak daripada di bawah sinar matahari, sehingga kertas pada gambar itu akan tampak lebih biru daripada yang difoto di bawah matahari. Agar kedua gambar sama-sama memperlihatkan selembar kertas putih, keduanya harus di-"white balance", yang juga disebut gray balance atau color balance. Untuk lebih lanjut tentang white balancing lihat Understanding White Balance Masih ada aspek lain dari file raw yang harus dikerjakan, seperti menyetel gamma yang benar, tetapi tanpa perlu masuk lebih rinci pun sudah jelas bahwa file raw perlu banyak pemrosesan sebelum bisa menjadi gambar yang dapat kita lihat di monitor. File raw kamera sering disebut negatif digital. Kalau Anda memotret dan menyuruh kamera menghasilkan gambar JPG, kamera sudah melakukan demosaicing dan semua penyesuaian lainnya. Tetapi kalau misalnya Anda lupa menyetel white balance yang benar di kamera sebelum memotret, tidak banyak yang bisa dilakukan pada JPG itu untuk memperbaiki keadaan, karena begitu banyak informasi tentang gambar aslinya sudah hilang. Sebaliknya, kalau dari kamera Anda menghasilkan file raw dan bukan JPG, selama konversi dari raw bisa dipilih pengaturan white balance tertentu beserta parameter lain; dan kalau gambar hasilnya terlihat tidak pas, Anda bisa kembali, mengubah pengaturannya, lalu mengonversinya lagi sampai terlihat pas. Ini mirip dengan kemampuan mencetak ulang dari negatif film. Tanpa negatif filmnya Anda tidak akan bisa mendapat pembesaran 8x10 dari salah satu jepretan 4x6 yang Anda terima saat film pertama kali dicuci. Meskipun ImageMagick bisa menangani beragam format yang berbeda, ia tidak 'tahu' cara mengonversi file raw kamera, jadi IM memakai program "dcraw" sebagai program delegate untuk mengonversi file raw itu menjadi format yang ia pahami, entah TIFF (dengan flag '-T') atau PNM. Perhatikan bahwa program itu dirancang untuk gambar raw kamera, bukan gambar dari, misalnya, pemindai. Program "dcraw" bisa menangani banyak sekali format raw berbeda, termasuk dari kamera buatan Canon, Fuji, Kodak, Nikon, dan Sony. Untuk memastikan apakah "dcraw" mengenali file raw Anda, mintalah ia mengidentifikasi sebuah contoh. Misalnya perintah:
dcraw -i CRW_9641.CRW
Yang mengembalikan...
CRW_9641.CRW is a Canon EOS 10D image.
Ketika IM memanggil dcraw untuk melakukan konversi, memakai delegate (daftarnya dengan "-list delegate"), ia menentukan dua flag yang memengaruhi pemrosesan gambar:
dcraw -w -4 -O output_file input_file
Flag '-w' berarti dcraw akan memakai informasi white balance dalam file raw jika informasi itu ditemukan. Kalau tidak ditemukan, dcraw akan memakai rata-rata seluruh gambar sebagai dasar white balancing. Flag '-4' berarti dcraw hanya akan melakukan demosaicing dan white balance pada foto raw itu lalu mengeluarkan hasilnya sebagai gambar linear 16-bit (48 bit per piksel), yang cocok untuk IM versi Q16 bawaan. Karena '-w' dan '-4' satu-satunya flag pemrosesan gambar yang ditentukan, ada beberapa nilai bawaan yang akan dipakai dcraw. Ruang warna keluarannya sRGB dan tidak ada profiling ICC yang dilakukan (di sistem saya, dcraw dikompilasi tanpa pustaka LCMS sehingga tidak bisa melakukan profiling). Kenyataan bahwa flag '-4' disetel berarti banyak langkah pemrosesan dilewati, termasuk penyesuaian level dan koreksi gamma, sehingga gambar hasilnya akan terlihat gelap. Maksudnya, pengguna akan memproses gambar itu dengan editor gambar seperti "Photoshop" atau "Paint Shop Pro", atau bahkan "ImageMagick", lalu menyesuaikan sendiri level, gamma, dan seterusnya. Dalam hal ini gambarnya sebaiknya dikeluarkan ke format yang mendukung 16 bit per warna. (Misalnya TIFF). Perhatikan bahwa hanya karena dcraw menghasilkan file 16-bit, bukan berarti seluruh 16 bit itu berisi data yang berguna. Misalnya, gambar raw dari SLR digital Canon 10D punya 10 bit per warna. Kamera yang lebih baru dari Canon dan pabrikan lain punya 14 bit per warna. Kalau Anda ingin foto raw dikonversi sepenuhnya, flag '-4' harus dibuang supaya dcraw melakukan demosaicing, white balance, koreksi kecerlangan dan gamma, dan seterusnya. Dalam hal ini dcraw mengeluarkan file 8-bit (24 bit per piksel). Kalau gambar ini masih akan diproses lebih lanjut, paling baik dikeluarkan sebagai PNG dan menghindari artefak kompresi JPEG. Format JPEG sebaiknya dipakai hanya sebagai langkah terakhir untuk pemakaian sesungguhnya. Sebenarnya, memakai format lossless seperti PNG (atau format internal IM, MIFF) untuk langkah antara dalam pemrosesan gambar selalu ide yang bagus. Sebuah delegate DCRaw khusus bisa ditambahkan untuk mengendalikan cara Anda membaca format gambar kamera 'raw'. Untuk informasi lebih lanjut lihat DCRaw WebSite, dan juga DCRaw Tutorial Website yang memuat sejumlah informasi tentang banyak flag opsional dcraw termasuk histogram gambar raw dengan berbagai flag. Lihat juga DCRaw by Example. Catatan di atas mula-mula diambil dari topik IM Forum Converting RAW images, oleh jhfry , dengan penulisan ulang besar-besaran oleh el_supremo.
Film MPEG, M2V, dan AVI
IM tidak terlalu efisien dalam membuat film. Ia memang bisa mengerjakannya,
tetapi menuntut program luar "mpeg2encode" untuk sebagian besar kerja kotornya.
Masalahnya, IM tidak dirancang untuk menangani video, melainkan gambar statis
atau rangkaian gambar yang pendek. Bukan berarti ia tidak bisa, tetapi itu
bukan tujuannya. Khususnya, ia umumnya membaca semua gambar ke memori
lalu memprosesnya dari sana. Untuk video yang besar atau panjang, ini tidak
efisien.
Namun untuk memproses rangkaian frame yang pendek, ia sungguh tak
tertandingi. Nyatanya hampir setiap program manipulasi video Linux memakai
ImageMagick untuk membuat judul, pergantian adegan yang meriah, dan efek lain
guna melengkapi tahap pascaproduksi sebuah proyek video yang lebih besar.
Prosesnya tetap dibatasi pada rangkaian video yang pendek.
Meski begitu, mari kita lihat apa yang bisa dilakukan IM.
**Frame menjadi video**
Ada beberapa laporan bahwa kalau rasio aspek gambarnya tidak tepat, ini akan
gagal pada pemutar mpeg lama, jadi pakailah ekstensi MPEG II
(m2v:) sebagai gantinya.
Pakai m2v juga untuk menghindari pikselasi akibat kompresi berat yang bisa
terjadi saat memakai...
magick *.jpg glacier.mpg
Misal, pakai ini sebagai gantinya...
magick *.jpg m2v:glacier.mpg
Perhatikan bahwa Anda mungkin butuh banyak ruang sementara untuk animasi besar
Direktori selain /tmp yang biasa bisa ditentukan dengan...
setenv MAGICK_TMPDIR /data
magick -limit memory 0 -limit map 0 *.jpg image.m2v
Alternatif...
Untuk mengonversi gambar PNG menjadi stream video MPEG2, alih-alih file MNG
Multi-PNG, pakai delegasi berikut...
png2yuv -j file%08d.png -I p -f 25 -b 1 | \
mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v
Untuk info lebih lanjut lihat [mjpeg.sf.net](http://mjpeg.sf.net/)
Forum IM melaporkan hasil yang lumayan dengan proyek open source bernama "[ffmpeg](http://ffmpeg.org/)", yang tampaknya cukup standar sebagai
paket instalasi Linux.
ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg
Mengekstrak MVG dengan latar belakang transparan
magick -background none -size 320x240 sample.mvg out.png
Michael Lenh menulis...
Akhirnya saya berhasil membuat video yang sangat seksi memakai mplayer
mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc
Hasilnya bisa dilihat di...
http://www.mathematik.uni-ulm.de/~lehn/particle.avi
http://www.mathematik.uni-ulm.de/~lehn/temperature.avi
[mabu](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=19117) dalam sebuah [IM Forum Discussion](https://magick.imagemagick.org/viewtopic.php?f=1&t=18724) berkata
"_PAKAI MENCODER, wow rasanya 1000 kali lebih cepat dan benar-benar BEKERJA_ "...
mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg
Mungkin ada opsi berlebih yang tidak saya butuhkan, tetapi hasilnya time-lapse
yang bagus dari file .jpg.
Dean S. Messing memakai transcode...
find . -type f -name '*.png' | sort > filelist
transcode -x imlist,null\
--use_rgb\
-y raw,null\
-f 60\
-i filelist\
-g 4096x2160 \
-j 540,1024,540,1024\
-o video.avi\
-H 0
-j (clip window) boleh dihilangkan kalau mau. -g adalah ukuran keluaran.
Wolfgang Hugemann menyarankan alternatif baru bernama 'VirtualDub' di
Windows Vista, yang memungkinkan Anda memutar video, atau mengonversi langsung
dari sebuah direktori berisi frame gambar.
PERINGATAN: "mplayer" tampaknya tidak suka file mpeg yang
hanya punya satu frame. Namun "ffplay" tampaknya tidak bermasalah.
**Video menjadi frame**
Baik "[mplayer](http://www.mplayerhq.hu/)" maupun
"mencode" lebih efisien dalam mengonversi video menjadi rangkaian
frame daripada IM. Selain itu keduanya bisa menangani hampir semua codec video
(dan audio) yang ada.
Misalnya untuk mengambil 5 frame dari menit ke-1 1/2 sebuah video, diskalakan ke
320x240, pakai...
mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \
-vo png:z=3 -frames 5
Alternatif lain termasuk pustaka open source "[ffmpeg](http://ffmpeg.org/)", meski itu juga bagian dari penanganan
"[mplayer](http://www.mplayerhq.hu/)".
MNG, Multiple-image Network Graphics
Disumbangkan oleh Barry Loo dari diskusi Example Ming Animation. MNG (dibaca ming) adalah format terbuka berbasis PNG yang menyediakan alternatif bitmap beranimasi selain GIF dan format lain. Format ini mendukung transparansi (baik semi maupun penuh), kompresi (baik lossy maupun lossless), dan kedalaman warna hingga 32 bit. Naiknya kedalaman warna inilah yang benar-benar membedakan format ini dari yang lain. GIF hanya mendukung 256 warna secara keseluruhan, yang memang cukup untuk banyak grafik; namun foto dan gradien akan menurun kualitasnya. Sebagian besar opsi animasi yang bisa dipakai untuk membuat animasi GIF juga bisa dipakai untuk membuat MNG. |
magick -size 101x101 radial-gradient: \
\( -clone 0 -level 00,100% +level-colors ,#F00 \) \
\( -clone 0 -level 10,100% +level-colors ,#F12 \) \
\( -clone 0 -level 20,100% +level-colors ,#F24 \) \
\( -clone 0 -level 30,100% +level-colors ,#F36 \) \
\( -clone 0 -level 40,100% +level-colors ,#F46 \) \
-delete 0 -duplicate 1,-2-1 -set delay 1x30 -loop 0 pulsing.mng
Perintah di atas menghasilkan gambar radial-gradient, yang kemudian dikloning dan disesuaikan untuk membuat denyut dari merah ke merah-oranye yang lebih terang. Hasilnya lalu diduplikasi menjadi siklus patroli yang dibalik, sebelum dijadikan animasi MNG berdurasi 30 detik yang berulang. Sayangnya, sebagian besar peramban web saat ini belum mendukung MNG, dan banyak pemutar video hanya menampilkan satu putaran dari animasi yang berulang itu. Dengan mengeklik frame gambar yang hilang di atas, animasinya dapat diunduh lalu dilihat memakai perintah animate dari IM. Untuk keterangan lebih lanjut tentang format MNG, kunjungi situs web MNG.
DPX, format Digital Picture Exchange
Format ini dipakai di industri film dan efek visual, yang secara khusus memanfaatkan informasi header yang luas serta keluwesan format ini dalam menangani high dynamic range dan nilai warna logaritmik pada berbagai kedalaman bit memakai deskripsi piksel RGB atau YCbCr. Format ini didasarkan pada, dan sebagian besar sudah menggantikan, format Cineon milik Kodak yang headernya lebih khusus untuk film. Satu contoh pemakaiannya adalah ketika memindai film untuk dipakai dalam pascaproduksi. Setiap frame disimpan sebagai file .dpx tersendiri, berukuran mulai dari 2k (lebar 2048 piksel) sampai 8k (lebar 8192 piksel - untuk frame IMAX), dengan 8 sampai 64 bit per komponen warna. Rangkaian file semacam itu kemudian bisa diproses memakai perangkat lunak compositing, untuk mengubah warna atau menambahkan efek visual. Setelah selesai, hasilnya bisa direkam secara digital ke pita atau diproyeksikan kembali ke film. Nilai warna setiap piksel sering disimpan secara logaritmik (terutama bila rangkaian itu memang akan dipindahkan kembali ke film), sebab cara itu lebih alami mencerminkan kerapatan penyimpanan informasi warna pada emulsi film aslinya. Bila dilihat tanpa perubahan, file logaritmik tampak berkontras sangat rendah, sehingga perlu 'look up table' untuk menerjemahkan gambar logaritmik itu menjadi sesuatu yang menyerupai tampilannya seandainya gambar tersebut dipindahkan kembali ke film lalu diputar di bioskop. Selain membuat gambar menjadi linear (seperti kebanyakan gambar komputer pada umumnya) dan menyesuaikan tingkat gamma, tabel ini menetapkan letak titik hitam dan titik putih. Untuk gambar logaritmik 10 bit yang nilai tiap komponen warnanya berkisar dari 0 sampai 1023, titik hitam dan putih biasanya ditetapkan pada 95 untuk hitam dan 685 untuk putih. Artinya, file logaritmik menyimpan nilai warna yang lebih terang daripada yang ditampilkan versi linear sebagai putih murni, dan lebih gelap daripada yang ditampilkannya sebagai hitam murni. Dengan begitu informasi tambahan tadi tetap tersedia bagi artis efek yang mungkin ingin mengubah kecerlangan gambar setelah gambar itu disimpan sebagai file dpx. Sebagai contoh, seandainya informasi itu hilang, menurunkan kecerlangan gambar secara merata akan membuat highlight menjadi lebih gelap, sedangkan dengan informasi tambahan itu highlight justru mengecil dan mulai memperlihatkan detail yang sebelumnya terlalu terang untuk terlihat. Yang terakhir ini jauh lebih dekat dengan apa yang terjadi di dunia nyata. Headernya dapat memuat data khusus Film dan/atau Televisi yang berkaitan dengan sebuah produksi. Sebagai contoh, header televisi dapat memuat time code SMPTE sehingga shot yang diekspor sebagai rangkaian dpx dari hasil penyuntingan sebuah produksi mudah diganti setelah efek apa pun ditambahkan. Header film menyimpan informasi tentang gulungan film asal frame-frame itu serta berbagai pengaturan kamera yang dipakai selama pengambilan gambar. Semua rincian tersebut lalu ikut menyertai gambarnya ketika berpindah antarperusahaan pascaproduksi.
Menambahkan time code ke file DPX
Time code dapat ditambahkan ke file dpx mana pun dengan cara berikut:
magick -define dpx:television.time.code=10000215 \
originalFile.00001.dpx alteredFile.00001.dpx
Menjalankan perintah ini satu per satu untuk beberapa ribu file yang membentuk sebuah rangkaian dari film atau animasi jelas akan memakan waktu sangat lama. Sebuah skrip sederhana dapat dipakai bersama ImageMagick untuk menaikkan time code setiap frame dalam rangkaian itu secara otomatis. Sebagai contoh, lihat skrip Perl dpx_timecode.pl.
Salinan dari uraian di atas telah ditambahkan ke dokumentasi utama IM di Pengantar format gambar bergerak. Uraian di atas adalah sumbangan Seth Dubieniec
**Catatan tambahan (belum dirapikan)...**
Menambahkan -depth 10 membuat IM menghasilkan file DPX 10 bit.
-- James Fancher
Jika gamma ingin diatur, misalnya, pada gambar DPX keluaran...
-define dpx:television.gamma=1.7
Ruang warna gambar DPX ditentukan oleh image element descriptor dan
transfer-characteristic. Jika transfer characteristic-nya adalah
PrintingDensityColorimetric, kami menetapkan ruang warnanya ke LogColorspace.
Hanya jika ruang warnanya Log, kami menerapkan gamma serta titik hitam/putih
untuk mengonversinya ke ruang warna RGB. Mungkin saja program yang Anda pakai
tidak mematuhi standar SMPTE, atau ImageMagick yang tidak menafsirkan standar
itu dengan benar. Kirimkan URL kedua gambar DPX Anda, nanti kami unduh lalu
kami coba tentukan apakah ada bug di ImageMagick atau justru program itu yang
bermasalah.
Berikut ini bekerja pada ImageMagick 6.3.8-3
magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \
-set reference-black 95 -set reference-white 685 image.jpg
Sebagai alternatif, lihatlah dokumentasi SMPTE
-- Cristy
Data teks pengguna dapat ditambahkan ke file dpx dengan memakai
magick image.dpx -set dpx:userdata "some text" new.dpx
-- Cristy
PSD
File gambar PSD adalah format file gambar kerja Photoshop, sama seperti XCF yang merupakan format file kerja GIMP, dan MIFF yang merupakan format file kerja milik ImageMagick sendiri. File semacam ini biasanya memuat banyak gambar, dengan gambar pertama berupa gabungan semua-dalam-satu dari gambar kerja saat itu. Hal itu membuatnya berguna untuk melihat keadaan gambar kerja sebagaimana adanya, dan lazim dipakai untuk 'thumbnailing'. Semua gambar lain di dalam format file multi-gambar itu adalah gambar yang dipakai untuk menghasilkan gambar gabungan pertama tadi. Artinya, masing-masing gambar layer kerja yang sedang digarap pengguna ketika file itu disimpan. Jadi kalau yang diinginkan hanya gambar 'akhir', saya sarankan tambahkan " '[0]' " pada nama file masukan untuk membuang gambar-gambar kerja, lalu pakai saja gambar pertama yang sudah tergabung itu. Namun bila Anda berencana bekerja dengan masing-masing gambar layer, gunakan " '[1--1]' " untuk melewati gambar pertama. Jika tidak ada gambar layer tambahan yang ditemukan, gambar pertama itulah yang dikembalikan. Saya TIDAK menyarankan pemakaian "-delete 0", sebab perintah itu justru tidak akan mengembalikan gambar apa pun bila tidak ada gambar layer yang menyusul gambar pertama tadi. Catatan tambahan... Bila ada keterangan lain yang bisa diberikan, atau ada yang ingin mengirimkan ringkasan pemakaian IM untuk format ini, silakan saja...
Untuk PSD dengan gambar CMYK, IM mungkin perlu diarahkan agar memakai
profil yang tepat saat mengonversi (pastikan IM Anda dipasang bersama
pustaka delegate LCMS) ....
magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \
-profile sRGB.icc Test_RGB.png
Lihat [Profil gambar](#profiles) di atas untuk keterangan lebih lanjut.
Bila sebuah gambar PSD memuat gambar 'preview'. Gambar itu dikembalikan
sebagai gambar terakhir dari pembacaan dua gambar.
Agar IM tidak pernah membaca gambar terakhir, gunakan...
magick test.psd[0--2] -flatten test.jpg
Artinya, baca semua gambar kecuali yang terakhir. Tetapi yang pertama selalu dibaca.
Hal ini tidak dapat dilakukan setelah pembacaan dengan memakai "-delete".
WMF
Format vektor lain yang sering dipakai untuk clipart yang dapat diskalakan pada rangkaian program Microsoft Office. Masukannya dapat diskalakan dengan mengubah "-density" sebelum gambarnya dibaca. Lihat juga format gambar vektor.
Animasi Flash (SWF)
Animasi Flash saat ini belum didukung IM. Namun sekadar untuk kelengkapan, Scott Bicknell melaporkan bahwa utilitas SWF Tool "swfextract" bisa mengekstrak frame jpeg atau png dari sebuah animasi flash. Wolfgang Hugemann juga menduga perkakas freeware Windows "IrfanView" mungkin bisa melakukannya juga. Kedengarannya itu kandidat delegate yang bagus bagi saya.
Konversi halaman web menjadi gambar (HTML)
Jika IM memuat sebuah HTML, IM akan mencari html2ps untuk mengubah html itu menjadi postscript, yang lalu bisa dirender sebagai gambar. Cara ini tidak bekerja dengan baik, tetapi tetap bekerja. Memakai peramban web yang lengkap adalah metode yang jauh lebih baik, sebab peramban memang dirancang untuk mengerjakan tugas itu sebaik mungkin. Cara paling sederhana memakai peramban adalah cukup memuat halamannya di peramban lalu mengambil tangkapan layarnya. Cara ini memberi gambar halaman yang sempurna, tetapi terbatas pada ukuran jendela peramban. Variasi lainnya adalah membiarkan peramban mengeluarkan halaman itu sebagai postscript, alih-alih menyuruh IM yang mengubahnya. Cara ini semestinya memecah situs web menjadi halaman-halaman yang lebih kecil dengan cukup rapi. Di Linux, dapat dijalankan sebuah server Display X windows virtual yang cukup besar untuk menjalankan peramban yang menampilkan seluruh situs web. Display semacam itu bisa SANGAT tinggi. Peramban lalu dijalankan di dalamnya dan diatur agar memenuhi seluruh display. Situs webnya dimuat, lalu tangkapan layarnya diambil lagi. Saya pernah melihat skrip yang bahkan bisa mengotomatiskan seluruh proses yang rumit itu. Namun hasilnya bisa berupa gambar yang SANGAT panjang. Sulit pula menebak seberapa besar display itu harus dibuat. Pada dasarnya cara ini TIDAK mudah, dan solusi terbaik hanya memakai IM untuk pemrosesan gambar tahap akhir, bukan untuk pembuatan gambar dari html.
Format pencetakan PCL
PCL di IM secara bawaan adalah PCL versi 6. Untuk versi 5, gambarnya perlu diubah menjadi hitam putih. Sebagai contoh...
magick image.png -monochrome image.pcl
Kodak PhotoCD atau ProPhotoCD (PCD)
File Kodak PhotoCD adalah format file gambar multi-resolusi. Artinya, setiap file memuat gambar yang sama dalam 6 ukuran berbeda, membentuk sesuatu yang dikenal sebagai 'gambar piramida'. Gambar pertama dalam file adalah resolusi terendah (ukuran terkecil) dan yang terakhir resolusi tertinggi (ukuran terbesar, 3072×2048 piksel). Karena pengguna biasanya menginginkan gambar beresolusi terbesar untuk diproses, cara mengubah gambar PCD ke format lain seperti JPG adalah dengan mengambil gambar keenam (indeks 5) dari file itu. Sebagai contoh...
magick -colorspace RGB image.pcd[5] image.jpg
Opsi "-colorspace RGB" diperlukan agar warnanya benar. Keterangan ini atas kebaikan Wolfgang Hugemann
Data RGB dan Gray mentah
Imagemagick punya beberapa format file untuk menangani data gambar mentah, khususnya "RGB:" dan "GRAY:". Tersedia pula pengaturan yang mendefinisikan data tersebut. Sebagai contoh, untuk mengeluarkan data mentah RGB...
magick image.jpg -depth 8 image.rgb
Pengaturan "-depth" menentukan ukuran bilangan bulat yang ditulis (dan nanti dibaca). Dalam hal ini nilai 8 bit dengan 3 byte per piksel untuk RGB (gambar 24 bit). Menentukan depth yang sesuai selalu disarankan saat menangani data gambar mentah. "-depth" sebesar 16 bit akan menghasilkan 2 byte per nilai, dan dalam hal itu "-endian" alias urutan byte mungkin juga perlu ditentukan, apakah 'MSB' (byte paling berarti lebih dulu) atau 'LSB' (byte paling tidak berarti lebih dulu, bawaannya). Perhatikan bahwa rgb murni berisi data gambar saja, bahkan lebar dan tinggi gambarnya pun tidak ikut tersimpan! Sebagian aplikasi 'menganggap' datanya berukuran tertentu, jadi IM mungkin perlu dipakai untuk memastikan datanya memang berukuran demikian. Sebagai contoh, perintah berikut mengubah ukuran dan menambahkan padding pada gambar agar ukurannya pas 512x512 piksel.
magick image.jpg -resize \>512x512 \
-background black -gravity center -extent 512x512 \
-depth 8 image.rgb
Saat membaca data RGB (atau GRAY) mentah ke dalam ImageMagick, ukuran gambarnya perlu ditentukan. Sebagai contoh..
magick -size 512x512 -depth 8 image.rgb image.png
Ini menentukan dengan tepat berapa banyak data yang akan dibaca Imagemagick. Kadang data mentah punya tambahan informasi header yang menyertainya. Agar IM melewati informasi itu, sebuah 'byte_offset' dapat ditentukan pada pengaturan "-size". Sebagai contoh, untuk melewati header 48 byte...
magick -size 512x512+48 -depth 8 image.rgb image.png
Inilah satu-satunya kasus yang saya tahu, yang di situ IM memanfaatkan angka ketiga pada pengaturan "-size". Untuk contoh lain pemakaian data gambar mentah (grayscale), lihat topik forum diskusi IM How to convert raw image to compressed tif?.
Data floating point
RGB juga bisa dibaca (dan ditulis) memakai bilangan floating point ternormalisasi.
Namun cara ini menuntut pemakaian pengaturan -define khusus untuk coder.
Lihat format file floating point HDRI
https://usage.imagemagick.org/basics/#hdri_formats
Gambar RGB floating point yang dihasilkan memakai kode C (HDRI)...
float red = 1.0f;
float green = 1.0f; /* appropriate data */
float blue = 1.0f;
/* for exach pixel in image... */
fwrite (&red, sizeof(float), 1, file);
fwrite (&green, sizeof(float), 1, file);
fwrite (&blue, sizeof(float), 1, file);
Opsi pembacaan....
magick -size 200x100 -depth 32 -define quantum:format=floating-point
-define quantum:scale=65536.0 -endian lsb input.rgb
output.png
quantum:format menentukan agar bilangan floating point dibaca dari file itu.
Sementara -depth menentukan ukuran floating point (32 = float, 64 = double).
quantum:scale menentukan cara menskalakan bilangan floating point dari
nilai ternormalisasi 0.0 sampai 1.0 ke tingkat Kualitas 16 bit di memori yang
dibutuhkan versi Q16 IM milik saya.
![[IM Output]](../static/img/formats/hand_wheat.gif)
![[IM Output]](../static/img/formats/hand_wheat.txt.gif)
![[IM Output]](../static/img/formats/a_ordered_2x2.gif)
![[IM Output]](../static/img/formats/a_ordered_3x3.gif)
![[IM Output]](../static/img/formats/a_ordered_4x4.gif)
![[IM Output]](../static/img/formats/a_halftone_2.gif)
![[IM Output]](../static/img/formats/a_halftone_4.gif)
![[IM Output]](../static/img/formats/a_halftone_6.gif)
![[IM Output]](../static/img/formats/a_halftone_8.gif)
![[IM Output]](../static/img/formats/a_random_5x95.gif)
![[IM Output]](../static/img/formats/a_random_5x60.gif)
![[IM Output]](../static/img/formats/a_random_50x95.gif)
![[IM Output]](../static/img/formats/a_random_45x55.gif)
![[IM Output]](../static/img/formats/a_random_50x50.gif)
![[IM Output]](../static/img/formats/jpg_lossy_mag.gif)
![[IM Output]](../static/img/formats/jpg_lossy_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_100_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_80_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_50_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_20_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_5_tn.gif)
![[IM Text]](../static/img/formats/jpg_ls_lossy.txt.gif)
![[IM Output]](../static/img/formats/a.jpg)
![[IM Output]](../static/img/formats/a_compress.txt.gif)
![[IM Output]](../static/img/formats/a_compress.png)
![[IM Output]](../static/img/formats/a_compress2.txt.gif)
![[IM Output]](../static/img/formats/a_compress2.png)
![[IM Text]](../static/img/formats/iptcData.pro.gif)
![[IM Text]](../static/img/formats/pgm_random_values.pgm.gif)
![[IM Text]](../static/img/formats/pgm_array.pgm.gif)
![[IM Text]](../static/img/formats/pbm_array.pbm.gif)
![[IM Text]](../static/img/formats/pgm_percent.pgm.gif)
![[IM Text]](../static/img/formats/pgm_percent_2.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment_2.pgm.gif)