Kuasai operasi geometri lanjutan ImageMagick: distort dengan metode affine, perspective, bilinear, dan barrel, efek shear serta wave, dan koreksi gambar miring secara otomatis dengan deskew.

Di episode 17 kita membahas advanced compositing & layers — bagaimana menggabungkan banyak gambar dengan operator blend, alpha, dan mask. Sekarang kita naik satu tingkat lagi: alih-alih mengatur bagaimana dua gambar saling menimpa, kita akan mengatur bagaimana satu gambar ditempatkan di atas bidang geometri yang sebelumnya tidak ia tempati.
Bayangkan kalian punya selembar kain bergambar. Transformasi dasar yang sudah kita pelajari — resize, rotate, flip — seperti menggeser atau memutar kain itu secara utuh, tanpa mengubah bentuknya. Distort berbeda: ia seperti meregangkan, menekuk, dan menjahit ulang kain tersebut agar menyesuaikan bidang yang baru. Di episode 18 ini kita akan membahas -distort dengan metode affine, perspective, bilinear, dan barrel, efek -shear dan -wave, lalu menutup dengan koreksi: -deskew dan koreksi perspektif manual.
Operasi geometri dasar hanya bisa memetakan persegi ke persegi. Dalam dunia nyata, hampir tidak ada yang sesederhana itu:
Semua kasus di atas butuh kemampuan memetakan koordinat piksel ke koordinat baru dengan aturan yang lebih fleksibel daripada sekadar translasi, rotasi, atau skala. Itulah pekerjaan -distort.
-distortBentuk umumnya seperti ini:
magick input.png -distort METHOD 'daftar koordinat' output.pngMETHOD menentukan jenis pemetaan geometri, dan daftar koordinat berisi pasangan koordinat sumber → target yang menegaskan aturan pemetaan. Karena -distort melakukan re-mapping piksel, dua hal penting yang harus diingat:
-virtual-pixel background agar area kosong terisi warna background, atau -virtual-pixel edge agar diisi warna piksel tepi.-define distort:viewport=WxH+X+Y untuk menentukan ukuran canvas hasil. Tanpa itu, ImageMagick menghitung bounding box otomatis.Affine adalah metode paling sederhana: ia menerima 3 pasang koordinat (6 angka). Pemetaan affine mempertahankan garis lurus tetap lurus dan garis yang sejajar tetap sejajar — cukup untuk kombinasi geser, rotasi, skala, dan shear sederhana dalam satu langkah:
magick logo.png -virtual-pixel background -distort affine \
'0,0 10,0 100,0 120,10 0,100 5,95' affine.pngTiga pasang koordinat pertama pada contoh di atas berarti: titik (0,0) bergeser ke (10,0), titik (100,0) bergeser ke (120,10), dan titik (0,100) bergeser ke (5,95). Dari tiga titik itu, ImageMagick menghitung transformasi linier lengkapnya.
Tip
Aturan praktis: jika kalian hanya butuh menulis ulang semua koordinat dengan kombinasi geser, putar, dan skala — misalnya untuk menempatkan watermark mengikuti sudut sebuah objek — affine selalu lebih cepat dan lebih presisi daripada rotasi bertingkat.
Perspective menerima 4 pasang koordinat (8 angka). Inilah metode yang paling sering dipakai untuk koreksi perspektif dan mockup. Berbeda dari affine, perspective bisa membuat garis yang sebelumnya sejajar menjadi tidak sejajar — persis seperti efek foto yang dipotret dari sudut miring.
Contoh nyata: menempatkan banner digital ke papan reklame yang dilihat dari samping:
magick banner.png -virtual-pixel background -distort perspective \
'0,0 30,40 300,0 320,25 300,120 290,150 0,120 10,150' billboard.pngKoordinat dibaca berpasangan sumber_x,sumber_y target_x,target_y untuk 4 sudut: kiri-atas, kanan-atas, kanan-bawah, kiri-bawah. Urutan ini wajib konsisten — salah urutan akan menghasilkan gambar yang "terlipat".
Bilinear juga menerima 4 pasang koordinat, tapi dengan karakteristik berbeda: ia mempertahankan garis lurus tetap lurus namun memetakan persegi ke quadrilateral apa pun, termasuk yang sudutnya tidak 90 derajat. Hasilnya lebih "datar" daripada perspective dan cocok untuk efek panel atau textur yang dibentangkan di permukaan non-ortogonal tanpa ilusi kedalaman:
magick ui.png -virtual-pixel background -distort bilinear \
'0,0 20,50 200,0 220,20 200,120 210,140 0,120 10,130' panel.pngBarrel tidak menggunakan pasangan koordinat, melainkan 4 koefisien a b c d yang mengoreksi distorsi lensa. Koefisien a dan b mengontrol lengkung barrel (melembung ke luar), c mengontrol pincushion (mengecil ke dalam), dan d mengontrol skala. Nilai d=1.0 berarti ukuran gambar dipertahankan:
magick photo.jpg -distort barrel '0.12 0.0 -0.06 1.0' corrected.jpgAnalogi sederhananya: bayangkan menulis tulisan di atas balon. Tulisan di tengah terlihat normal, tapi makin ke tepi makin melengkung. Barrel a positif menarik bagian tepi kembali ke dalam, c negatif mendorong tengah sedikit menjauh — hasilnya garis lurus kembali seperti semula.
-shear dan -waveDi luar distort berbasis koordinat, ImageMagick menyediakan dua efek transformasi yang sering dipakai untuk visual:
-shear memiringkan gambar sepanjang sumbu X dan Y dengan sudut tertentu. Karena hasilnya memiliki area transparan, gabungkan dengan -background sebelum -flatten:magick text.png -background white -shear 20x0 sheared.png-wave menerapkan efek gelombang sinusoidal dengan parameter amplitudo x panjang-gelombang. Ini sering dipakai untuk efek teks atau banner:magick banner.png -wave 40x180 waved.png-deskew mendeteksi kemiringan teks/gambar secara otomatis dan memutarnya agar lurus. Parameter opsional adalah threshold (persentase) yang menentukan seberapa agresif pendeteksian:
magick scan.png -deskew 40% -background white -flatten deskewed.pngAngka 40% berarti piksel yang dianggap sebagai "latar belakang" (warna dominan) diperlakukan netral; semakin kecil persentasenya, semakin agresif pencarian sudut. Untuk dokumen scan, nilai 20–40% biasanya paling aman.
Ketika -deskew tidak cukup — misalnya halaman dipotret dari samping sehingga berbentuk trapesium, bukan persegi panjang — koreksi perspektif manual adalah jalan keluarnya. Alurnya:
identify -verbose.-distort perspective.identify -verbose scan.jpg | rg 'Geometry'
magick scan.jpg -distort perspective \
'120,80 0,0 900,140 800,0 960,1080 800,1200 60,1020 0,1200' flat.pngHasilnya: halaman yang tadinya trapesium menjadi persegi panjang utuh — persis seperti memindai dari atas. Teknik ini juga dasar dari banyak tool "straighten document" yang kalian lihat di aplikasi kamera.
| Metode | Koordinat | Properti yang Dipertahankan | Kasus Pakai |
|---|---|---|---|
affine | 3 pasang (6 angka) | Garis lurus dan sejajar tetap sejajar | Geser, putar, skala, watermark |
perspective | 4 pasang (8 angka) | Garis lurus tetap lurus | Koreksi perspektif, mockup billboard |
bilinear | 4 pasang (8 angka) | Garis lurus tetap lurus, tanpa ilusi kedalaman | Bentangan panel datar |
barrel | 4 koefisien | Pola distorsi lensa | Koreksi barrel/pincushion kamera |
-deskew | Threshold % | Rotasi otomatis | Scan dan OCR |
Di episode 18 ini kalian sudah melewati batas operasi "persegi ke persegi": kalian bisa meregangkan gambar mengikuti aturan affine dan perspective, memperbaiki distorsi lensa dengan barrel, menambahkan efek shear dan wave, serta meluruskan dokumen miring — otomatis dengan -deskew atau manual dengan koreksi perspektif. Kemampuan ini adalah fondasi untuk semua tugas "geometri dunia nyata": dari pipeline OCR hingga mockup produk.
Namun semakin kompleks operasinya, semakin besar juga harga yang harus dibayar dalam bentuk CPU dan memori. Di episode 19 kita akan membahas Performance & Optimization: bagaimana membatasi penggunaan resource, mengendalikan paralelisme OpenMP, men-tuning coder dengan -define, dan menghasilkan file yang kecil dengan -strip dan kuantisasi palet.