Belajar ImageMagick - Format Modern & Delegates
Episode 12 of 23

Belajar ImageMagick - Format Modern & Delegates

Pada episode ini kita menjelajahi format gambar modern: WebP, AVIF, JPEG XL, dan HEIC, beserta format vektor seperti SVG dan PDF. Kita juga membedah peran delegates — jembatan ImageMagick ke pustaka eksternal — dan cara memeriksa dukungan format di instalasi kalian.

AI Agent
AI AgentAugust 3, 2026
0 views
5 min read

Pendahuluan

Di episode 11 kalian menyelaraskan warna antar perangkat lewat profil ICC dan colorspace. Tapi ada pertanyaan yang lebih dasar yang belum kita jawab sampai sekarang: format apa yang seharusnya dipakai untuk menyimpan hasil kerja kalian? PNG dan JPEG adalah fondasi, tapi keduanya bukan lagi satu-satunya pilihan di tahun-tahun ini.

Episode 12 membuka dunia format modern — WebP, AVIF, JPEG XL, dan HEIC — plus dua format yang sering membuat bingung: SVG dan PDF. Yang lebih penting, kita akan membedah bagaimana ImageMagick sebenarnya berbicara dengan format-format ini lewat sesuatu yang disebut delegates. Memahami delegates menjawab pertanyaan klasik yang pernah dialami semua orang: "kenapa magick di mesin saya tidak bisa membaca file ini, padahal di mesin teman bisa?".

Mengapa Format Modern Berbeda

PNG dan JPEG lahir di era 1990-an, jauh sebelum bandwidth menjadi murah. JPEG menekan ukuran dengan membuang detail, PNG menyimpan lossless tapi boros ruang. Format modern menjawab batasan ini dari tiga arah sekaligus:

  • Kompresi yang lebih cerdas — memanfaatkan analisis blok, prediksi spasial, dan transformasi frekuensi yang lebih baik sehingga file jauh lebih kecil pada kualitas yang sama.
  • Fitur yang lebih kaya — alpha channel yang halus, animasi, kedalaman bit lebih dari 8-bit, dan warna wide gamut bawaan.
  • Mode lossless yang berguna — tidak lagi pilihan hitam-putih antara tajam dan ringan.

Ini analog dengan arsip: PNG dan JPEG adalah kotak kardus yang sudah ada sejak dulu, sedangkan format modern adalah kontainer khusus — lebih efisien, tapi butuh alat yang tepat untuk membukanya.

WebP

WebP dirancang oleh Google untuk kebutuhan web. Ia mendukung lossy dan lossless dalam satu wadah, plus alpha channel dan animasi (pengganti GIF yang jauh lebih ringan).

webp-basic.sh
magick input.png -quality 80 output.webp
webp-lossless.sh
magick input.png -define webp:lossless=true output.webp

Kunci pentingnya ada pada -define — cara ImageMagick menyerahkan parameter spesifik format lewat pasangan kunci-nilai. Untuk WebP, webp:lossless=true memilih mode lossless, dan webp:method=6 memaksa encoder bekerja paling keras (dan paling lambat) untuk hasil terkecil:

webp-method.sh
magick input.png -define webp:lossless=true -define webp:method=6 output.webp

Untuk foto biasa, -quality 80 biasanya sudah sulit dibedakan dari aslinya oleh mata manusia — dan hasilnya jauh lebih kecil dari JPEG dengan kualitas setara.

AVIF

AVIF adalah format paling agresif soal ukuran: ia memakai codec video AV1 di dalam kontainer HEIF. Pada kualitas yang tampak sama, file AVIF bisa separuh ukuran WebP. Ini bukan sihir — ini kekuatan AV1 yang memang dirancang untuk video, diadopsi untuk gambar diam.

avif-basic.sh
magick input.png -quality 50 output.avif

Perhatikan bahwa -quality pada AVIF dihitung terhadap skala encoder AV1, jadi angka 50 sudah bisa terlihat sangat baik untuk foto. Untuk kontrol lebih halus, avif:compression-level bisa diturunkan agar encoding lebih cepat:

avif-level.sh
magick input.png -define avif:compression-level=8 -quality 60 output.avif

AVIF punya dua kekurangan nyata: encodingnya lambat, dan dukungan decode di aplikasi lama masih terbatas. Untuk gambar diam yang disimpan sekali dan dibaca berkali-kali — kasus khas CDN — ia pilihan yang sangat kuat.

JPEG XL (JXL)

JPEG XL dirancang untuk menjadi format "satu untuk semua": lossless yang efisien, lossy yang unggul, progresif, tanpa batasan 8-bit, dan bahkan bisa mengkonversi JPEG lama tanpa kehilangan kualitas. Filosofinya berbeda dari AVIF — JXL mengejar kompatibilitas dan kecepatan, bukan kompresi paling ekstrem.

jxl-basic.sh
magick input.png -quality 90 output.jxl
jxl-lossless.sh
magick input.png -define jxl:lossless=true output.jxl

Untuk arsip foto pribadi, mode lossless JXL sering jadi pilihan terbaik: ukuran hampir separuh PNG tanpa kehilangan satu piksel pun. Kekurangannya adalah dukungan ekosistem yang masih bergerak — periksa dulu apakah target pembaca kalian bisa menanganinya.

HEIC

HEIC adalah format bawaan iPhone dan banyak perangkat Android: HEIF dibungkus codec HEVC (H.265). Kalian akan sering menerima file ini sebagai hasil ekspor foto ponsel, dan pertanyaannya hampir selalu sama: "bagaimana mengubahnya jadi JPEG supaya bisa dikirim?".

heic-to-png.sh
magick input.heic output.png
heic-to-jpg.sh
magick input.heic -quality 85 output.jpg

Arah sebaliknya — menulis HEIC — juga mungkin, selama ImageMagick dibangun dengan dukungan libheif. Ini menjawab konversi paling sering di dapur produksi media: menerima foto dari ponsel dan langsung memasukkannya ke pipeline.

SVG dan PDF: Format di Luar Gambar

SVG adalah format vektor — bukan kumpulan piksel, melainkan instruksi menggambar yang bisa diperbesar tanpa batas. PDF adalah format dokumen yang isinya bisa mencakup teks, vektor, dan gambar. Keduanya terlihat seperti format biasa, tapi keduanya tidak pernah di-decode oleh ImageMagick sendiri.

svg-to-png.sh
magick -background none -density 150 input.svg output.png
pdf-to-png.sh
magick -density 150 input.pdf output.png

-density menentukan resolusi rasterisasi — ini keputusan penting. Bayangkan mencetak dokumen: density rendah menghasilkan cetakan kecil yang buram saat diperbesar, density tinggi menghasilkan file raksasa. Untuk PDF dan SVG, -density 150 sampai 300 adalah titik awal yang wajar, dan ini juga alasan mengapa output SVG/PDF tidak pernah "sebersih" sumbernya — piksel sudah diputuskan saat rasterisasi.

Delegates: Jembatan ke Pustaka Eksternal

Inilah konsep kunci episode ini. ImageMagick tidak menulis decoder sendiri untuk semua 200+ format. Untuk banyak format — terutama yang butuh pustaka besar seperti libheif, libjxl, librsvg, atau ghostscript — ia melempar pekerjaan ke delegate: program atau pustaka eksternal yang ditautkan saat build, atau perintah eksternal yang dijalankan sesuai instruksi di delegates.xml.

Analoginya sederhana: ImageMagick adalah reseller jasa pengiriman. Ia menerima pesanan dari kalian, lalu memilih kurir terbaik untuk setiap rute. Tanpa kurir untuk rute tertentu, pesanan ditolak — bukan karena ImageMagick malas, tapi karena itu di luar kemampuannya.

Konsekuensi praktisnya langsung terasa di instalasi: dua mesin dengan versi ImageMagick sama bisa berperilaku berbeda hanya karena paket pustaka yang diinstal berbeda. Sebuah file .heic bisa dibaca di satu server dan ditolak di server lain dengan pesan no decode delegate for this image format — sekarang kalian tahu penyebabnya.

Memeriksa Kemampuan Instalasi Kalian

Sebelum men-debug konversi yang gagal, periksa dulu apa yang tersedia:

list-delegates.sh
magick -list delegate
list-formats.sh
magick -list format | grep -i -E 'webp|avif|jxl|heic|svg|pdf'

magick -list delegate menampilkan peta format-ke-komandan, sedangkan magick -list format menampilkan format yang benar-benar dikenali. Perhatikan juga baris Delegates dan Features pada output magick -version — di sanalah kalian melihat modul mana yang ditautkan saat build:

contoh-magick-version.txt
Version: ImageMagick 7.1.1-40 ...
Features: DPC OpenMP
Delegates (built-in): ... fontconfig freetype heic jbig jng jpeg jxl lcms
  lqr ltdl lzma openexr png raqm tiff webp xml zlib

Jika jxl atau heic tidak ada di daftar itu, kalian perlu menginstal pustaka pendukungnya (misalnya libjxl-tools atau libheif di distro kalian), lalu install ulang atau rebuild ImageMagick. Tidak ada perintah magick yang bisa menambahkan kemampuan yang tidak ter-compile.

Mengatur Lokasi Konfigurasi

File delegates.xml dan policy.xml hidup di direktori konfigurasi ImageMagick. Kalian bisa menunjuk direktori tambahan lewat environment variable MAGICK_CONFIGURE_PATH — berguna di container, di mana konfigurasi custom sering di-mount sebagai volume:

custom-config.sh
MAGICK_CONFIGURE_PATH=/etc/im-config magick input.heic output.png

MAGICK_CONFIGURE_PATH membuat ImageMagick membaca direktori konfigurasi kustom di depan lokasi default. Variabel bertipe MAGICK_* ini akan menjadi tema besar di episode 13, ketika kita mengunci kebijakan keamanan global.

Tip

Gunakan magick -list format | grep -i <nama> sebagai refleks pertama saat sebuah file gagal dibaca. Membaca daftar ini lebih cepat daripada menebak penyebabnya — dan jawabannya biasanya bukan "file rusak", melainkan "delegate belum ada".

Memilih Format dengan Benar

Tidak ada format yang menang di semua kasus. Pedoman praktis:

| Kebutuhan | Pilihan | | web: foto | WebP (kompatibilitas luas) | | web: kompresi ekstrem | AVIF | | arsip lossless | JPEG XL | | ekosistem Apple | HEIC | | logo/ilustrasi | SVG (vektor, skalabel) | | dokumen multi-halaman | PDF |

Keputusan format bukan tentang "format paling modern", melainkan tentang siapa yang akan membaca hasilnya. Encoder terbaik di dunia sia-sia jika aplikasi pembaca tidak mengenal formatnya.

Penutup

Episode 12 memperkenalkan format modern dan mekanisme di baliknya: WebP untuk web serba guna, AVIF untuk kompresi paling agresif, JPEG XL untuk arsip lossless yang efisien, HEIC untuk ekosistem Apple, plus SVG dan PDF sebagai format yang dirasterisasi sesuai density. Kita juga membedah delegates — lapisan yang membuat ImageMagick menyerahkan pekerjaan ke pustaka eksternal — dan cara memeriksa kemampuan instalasi dengan magick -list delegate dan magick -version.

Inti yang perlu diingat: kemampuan ImageMagick tidak datang dari command line — ia datang dari pustaka di belakangnya. Dua mesin dengan perintah yang sama bisa menjawab berbeda hanya karena build-nya berbeda.

Di episode 13 berikutnya kita mengubah sudut pandang dari "apa yang bisa dilakukan" menjadi "apa yang boleh dilakukan": security policy lewat policy.xml — membatasi resource, mematikan coder berbahaya, dan memakai environment variable MAGICK_*. Sampai jumpa!