Pada episode ini kalian memahami image list, mengakses frame dengan indeks, membuat animasi GIF dengan delay dan loop, memperbaiki frame dengan coalesce, serta mengelola dokumen multi-halaman TIFF dan PDF.

Di episode 8 kalian sudah mengubah satu gambar dengan filter dan menggabungkan dua gambar dengan operator komposisi. Sekarang kita menaikkan level: bukan satu atau dua gambar, tetapi banyak gambar dalam satu perintah. ImageMagick memperlakukan banyak gambar input sebagai sebuah image list — kumpulan frame yang tersimpan dalam memori dan diproses bersama.
Pahami image list, dan kalian bisa membuat animasi GIF, mengekstrak satu halaman dari PDF, atau mengonversi dokumen multi-halaman TIFF — semuanya dengan perintah yang sama. Ini salah satu konsep yang paling membedakan ImageMagick dari tool gambar biasa.
Saat kalian menulis beberapa nama file sebagai input, ImageMagick membacanya ke dalam satu list berurutan:
magick frame-1.png frame-2.png frame-3.png hasil.gifTiga gambar masuk sebagai tiga frame. Apa yang terjadi selanjutnya bergantung pada format output:
Konsep ini seperti untaian film: setiap frame adalah satu potongan gambar, dan urutannya menentukan alur. Format output menentukan apakah untaian itu diputar sebagai animasi, dijilid sebagai dokumen, atau diruntuhkan menjadi satu bingkai.
[n]Kadang kalian hanya butuh satu frame. Notasi [n] memilih frame berdasarkan indeks, dimulai dari nol:
magick animasi.gif[0] frame-pertama.png
magick animasi.gif[2] frame-ketiga.png
magick dokumen.pdf[0] halaman-pertama.png[0] adalah frame pertama — sama seperti elemen pertama pada array di hampir semua bahasa pemrograman. Indeks juga bisa berupa rentang [0-2] untuk tiga frame pertama, atau daftar [1,3,5] untuk frame-frame tertentu. Berguna untuk mengekstrak halaman PDF atau membuat pratinjau dari animasi.
Menggabungkan beberapa gambar menjadi GIF animasi dilakukan dengan menambahkan -delay dan -loop:
magick -delay 12 -loop 0 frame-*.png animasi.gif-delay 12 berarti 12/100 detik (120 milidetik) per frame — menentukan secepat apa flipbook dibalik. -loop 0 membuat animasi berputar tanpa henti; nilai lain seperti -loop 3 memutarnya tiga kali lalu berhenti. Semakin kecil delay, semakin cepat animasi berputar. Ukuran file GIF dipengaruhi jumlah frame dan kompleksitas isinya, bukan nilai delay-nya.
Tip
Menerapkan -resize pada semua frame sekaligus mengecilkan seluruh animasi: magick animasi.gif -resize 50% animasi-kecil.gif. Semua frame dalam list diproses oleh satu opsi. Ini jauh lebih rapi daripada mengubah satu per satu lalu merangkainya lagi.
Banyak GIF memakai optimasi: frame berikutnya hanya menyimpan perbedaan dari frame sebelumnya, bukan gambar utuh. Ukurannya kecil, tetapi frame-frame itu tidak lengkap — dan operasi seperti resize atau filter akan merusaknya.
-coalesce merekonstruksi setiap frame menjadi gambar utuh penuh. Kombinasi -coalesce dan resize adalah resep andalan:
magick animasi.gif -coalesce -resize 50% animasi-utuh.gifTanpa -coalesce, resize akan menghitung ukuran dari frame parsial dan hasilnya berantakan. Aturan praktis: selalu -coalesce sebelum memodifikasi GIF yang bukan hasil buatan kalian sendiri. Setelah dimodifikasi, ukuran file memang membesar, tetapi gambar menjadi benar dan bisa diproses dengan aman.
Terkait erat dengan coalesce adalah -dispose, yang mengatur apa yang terjadi pada frame lama sebelum frame baru digambar. Tiga mode paling umum:
-dispose none — biarkan frame lama tetap tampil.-dispose background — kembalikan ke warna latar sebelum frame berikutnya.-dispose previous — kembalikan ke frame sebelumnya, untuk animasi dengan efek melayang.Memilih dispose yang salah menghasilkan "bekas jejak" frame di layar. Untuk sebagian besar kebutuhan, -dispose background dengan latar transparan adalah pilihan aman.
Image list bisa diedit langsung seperti array. -delete membuang frame, -insert menyisipkan gambar di posisi tertentu, dan -reverse membalik urutan seluruh list:
magick animasi.gif -delete 5 animasi-tanpa-frame5.gif
magick animasi.gif -reverse animasi-mundur.gif
magick frame-a.png frame-b.png -insert 1 frame-ab.png-delete 5 menghapus frame indeks 5; -delete 0-2 menghapus tiga frame pertama. -reverse membalik animasi sehingga gerakannya mundur — teknik populer untuk membuat "putar ulang" yang mulus. -insert 1 menyisipkan gambar baru di posisi indeks 1.
Image list juga menjadi dasar dokumen multi-halaman. Membuat TIFF atau PDF dari beberapa halaman semudah menuliskan semua file:
magick halaman-1.png halaman-2.png halaman-3.png dokumen.pdf
magick scan-1.tif scan-2.tif scan-3.tif scan-gabungan.tifSecara default, ImageMagick menggabungkan semua frame ke satu file ketika formatnya mendukung (perilaku -adjoin). Untuk memecahnya menjadi file terpisah, gunakan pola %d pada nama output:
magick dokumen.pdf -adjoin halaman-%d.pnghalaman-%d.png menghasilkan halaman-0.png, halaman-1.png, dan seterusnya — satu file per halaman. Cara lain untuk memaksa pemisahan adalah +adjoin, kebalikan dari -adjoin. Memahami arah dua arah ini — menggabungkan banyak frame dan memecah satu file — membuat kalian leluasa bolak-balik antara animasi, dokumen, dan file gambar biasa.
Pada episode 9 kalian sudah memahami image list sebagai kumpulan frame yang diproses bersama, mengakses frame dengan indeks [n], membuat animasi GIF dengan -delay dan -loop, memperbaiki frame teroptimasi dengan -coalesce dan -dispose, mengedit list dengan -delete, -insert, dan -reverse, serta membuat dan memecah dokumen multi-page TIFF dan PDF dengan -adjoin.
Yang perlu dibawa pulang: format output menentukan cara image list ditafsirkan. GIF memutarnya, TIFF dan PDF menjilidnya, PNG meruntuhkannya. Ketiga perilaku itu datang dari satu konsep yang sama — daftar frame.
Di episode 10 berikutnya kita membawa semua kemampuan ini ke skala besar: memproses ribuan file sekaligus dengan mogrify, skrip shell, dan paralelisme lewat xargs. Sampai jumpa!