Hands-on pertama: mengkonversi gambar antar format dengan magick, memaksa format output lewat ekstensi atau prefiks format, mengatur kualitas dan kompresi untuk JPEG, PNG, WebP, AVIF, dan JXL, serta memverifikasi hasil dengan magick identify.

Setelah di episode 2 kita membedah arsitektur ImageMagick — satu perintah magick, coder module, delegate, dan model piksel — kini saatnya hands-on sungguhan. Episode ini adalah titik di mana kalian mulai memegang kendali: kita mengkonversi gambar antar format dengan satu baris perintah.
Konversi format adalah kemampuan paling dasar sekaligus paling sering dipakai di dunia nyata. Setiap kali sebuah website menerima upload PNG dari pengguna lalu menyimpannya sebagai WebP, setiap kali sebuah skrip mengubah foto menjadi thumbnail JPEG, setiap kali dokumen PDF diubah menjadi gambar — itulah konversi format. Mari kuasai fondasinya.
Gunakan sample.png yang kita buat di episode 0. Konversi paling sederhana dilakukan dengan menyebutkan input dan output — format output ditentukan dari ekstensi file:
magick sample.png sample.jpgInilah keajaiban IM7: tidak perlu perintah convert seperti di IM6, tidak perlu opsi tambahan. ImageMagick membaca PNG lewat coder png, menerjemahkannya ke model piksel internal, lalu menulis JPEG lewat coder jpeg. Satu masalah penting yang perlu kalian ingat: JPEG tidak mendukung transparansi. Jika input punya alpha channel, hasil JPEG akan mengisi area transparan dengan warna hitam. Untuk area transparan yang penting, pakailah PNG, WebP, atau AVIF.
Format vector seperti SVG tidak disimpan sebagai kumpulan piksel, melainkan instruksi geometri. ImageMagick (dengan delegate) merasterisasi SVG menjadi piksel:
magick input.svg output.pngTip
Untuk hasil raster yang tajam, naikkan densitas sebelum mengkonversi: magick -density 300 input.svg output.png. SVG terukur tanpa batas, jadi densitas tinggi menghasilkan piksel lebih banyak — analognya seperti mencetak dengan printer yang lebih rapat untuk detail yang lebih halus.
Aturan utama di ImageMagick: ekstensi menentukan format. Tapi kalian juga bisa memaksa format dengan prefiks format: pada nama file output — berguna saat ekstensi menyesatkan atau tidak ada:
magick sample.jpg png:output.dat
magick identify output.datPerintah kedua (magick identify) membaca output.dat dan melaporkan bahwa isinya sebenarnya PNG — meskipun ekstensinya .dat. Prefiks ini juga dipakai pada input, misalnya magick png:sample.jpg untuk memaksa membaca file sebagai PNG.
Perlu dibedakan dengan opsi -format: opsi itu bukan untuk output, melainkan untuk memformat output teks informasi — biasanya dipakai bersama subperintah identify:
magick identify -format "%f %wx%h %[colorspace]" sample.pngHasilnya baris seperti sample.png 640x480 sRGB — pola %f, %wx%h, %[colorspace] adalah placeholder yang diisi ImageMagick. Kalian akan memakai trik ini terus untuk scripting dan verifikasi.
Format JPEG memakai lossy compression — menukar sedikit kualitas demi ukuran file jauh lebih kecil. Opsi -quality (0-100) mengontrol pertukaran ini:
magick sample.png -quality 90 output-90.jpg
magick sample.png -quality 60 output-60.jpgls -lh output-*.jpg| Kualitas | Karakteristik |
|---|---|
| 90-100 | Kualitas sangat baik, ukuran besar |
| 75-85 | Titik manis umum untuk foto di web |
| 40-60 | Ukuran kecil, artefak mulai terlihat |
| Di bawah 40 | Sangat kecil, kualitas menurun jelas |
Important
Aturan praktis: untuk foto, -quality 80 memberi keseimbangan yang sulit dikalahkan. Tapi ingat, JPEG adalah lossy — setiap kali menyimpan ulang, kualitasnya menurun. Jangan menjadikan JPEG sebagai "format kerja"; simpan master sebagai PNG dan ekspor JPEG hanya untuk distribusi.
PNG bersifat lossless — tidak ada kualitas yang hilang — tapi itu bukan alasan untuk mengabaikan ukuran file. PNG menyimpan banyak metadata yang bisa dibuang dan memakai kompresi yang bisa dinaikkan levelnya:
magick sample.png -strip -define png:compression-level=9 output.png
magick identify -format "%f %wx%h %b" output.png-strip membuang metadata yang tidak penting (seperti profil dan komentar), dan png:compression-level=9 meminta kompresi maksimal. Hasilnya bisa jauh lebih kecil dengan kualitas identik — ini langkah wajib untuk aset website.
Format-format modern menawarkan kompresi lebih baik daripada JPEG dengan kualitas yang sama. Konversinya sama mudahnya — asalkan delegate terkait terkompilasi di build kalian:
magick sample.png -quality 80 output.webp
magick sample.png -quality 50 output.avif
magick sample.png -quality 75 output.jxl| Format | Karakteristik |
|---|---|
| WebP | Standar web modern, dukungan luas, mendukung alpha |
| AVIF | Kompresi terbaik saat ini, berdasarkan AV1 |
| JXL (JPEG XL) | Mendukung lossy dan lossless, penerus potensial JPEG |
-quality berperan berbeda di tiap format — di WebP artinya mirip JPEG, di AVIF rentangnya berbeda — tapi pola perintahnya konsisten. Periksa dukungan format di build kalian dengan magick -list format | grep -i avif.
magick identifySetiap selesai mengkonversi, biasakan memverifikasi: apakah format, dimensi, dan colorspace sudah sesuai harapan?
magick identify sample.jpg
magick identify -format "%f %wx%h %[colorspace] %b" output.webpoutput.webp WEBP 640x480 640x480+0+0 8-bit sRGB 24.5KB 0.010u 0:00.009Membaca output ini: nama file, format (WEBP), dimensi (640x480), kedalaman (8-bit), colorspace (sRGB), ukuran (24.5KB), dan waktu pemrosesan. Jika angka-angkanya tidak masuk akal — misalnya dimensi berubah padahal kalian tidak meminta resize — segera selidiki.
Pada episode 3 ini, kalian telah melakukan hands-on pertama: mengkonversi PNG ke JPEG, merasterisasi SVG ke PNG, memaksa format dengan prefiks, memahami kualitas dan kompresi JPEG, mengoptimasi PNG, mengekspor ke format modern WebP, AVIF, dan JXL, serta memverifikasi hasil dengan magick identify.
Inti yang harus dibawa pulang:
format: untuk memaksa.-quality sekitar 80 untuk foto web.-strip dan png:compression-level=9.magick identify adalah alat verifikasi paling penting — kenali outputnya.Di episode 4 selanjutnya, kita akan membahas resize, crop, dan transform — menguasai geometri dengan -resize, -scale, dan -thumbnail, memahami operator rasio aspek (^, !, %, >, <), memotong dengan -crop, serta transformasi dengan -rotate, -flip, -flop, -trim, -extent, dan -gravity. Sampai jumpa di episode 4!