Contoh penggunaan ImageMagick -- mengomposisikan gambar
- Definisi dan istilah
-
Tabel mentah metode compose (halaman terpisah) Metode komposisi alpha Duff-Porter
-
Over,Dst Over,Src,Copy,
Dst,In,Dst In,Out,Dst Out,
ATop,Dst ATop,Clear,Xor -
Multiply,Screen,Bumpmap,Divide,
Plus,Minus,ModulusAdd,ModulusSubtract,
Difference,Exclusion,Lighten,Darken,
LightenIntensity,DarkenIntensity, - Operasi ekuivalen teori himpunan
- Komposisi matematis dan pencampuran alpha
- Matematika kanal gambar memakai komposisi gambar
-
Overlay,Hard Light,Soft Light,Pegtop Light,
Linear Light,Vivid Light,Pin Light,
Linear Dodge,Linear Burn,Color Dodge,Color Burn, -
Copy Opacity,Copy Red,Copy Green,Copy Blue,
Copy Cyan,Copy Magenta,Copy Yellow,Copy Black,
Hue,Saturate,Luminize,Colorize,Melarutkan satu gambar di atas gambar lain Mencampur dua gambar
-
Memakai Blend untuk memodifikasi satu gambar
Watermark atau memodulasi gambar Memakai mask untuk membatasi area komposisi
-
Composite memakai tile gambar Metode komposisi khusus
Mathematics,Change MaskMetode komposisi pemetaan gambarBlurvariabel, PemetaanDisplaceKomposisi gambar adalah teknik menggabungkan gambar yang memiliki, atau tidak memiliki, transparansi maupun kanal alpha. Ini biasanya dilakukan memakai perintah IM "magick composite". Komposisi juga bisa dijalankan sebagai bagian dari rangkaian operasi yang lebih besar, atau secara internal oleh operator gambar lain.
Komposisi gambar dalam IM
Komposisi gambar adalah proses menggabungkan dua (dan hanya dua) gambar dengan berbagai cara. Prosesnya terkait dengan komposisi alpha, yang menjelaskan hasil berdasarkan bagian mana dari overlay yang transparan. Komposisi gambar dipakai untuk mencampur dan merata-ratakan gambar, memindahkan kanal gambar, memotong, menyambung, atau melapiskan potongan gambar yang bentuknya tidak beraturan. Atau sebagai bagian dari operasi matematis yang rumit. Pengantar alternatif yang bagus tentang komposisi gambar adalah SVG Compositing in 30 Minutes. Rincian matematisnya yang persis bisa ditemukan pada halaman SVG Alpha Compositing, yang menguraikan metode komposisi gambar yang lebih penting. Perintah berikut adalah dua metode 'composite' gambar langsung yang tersedia di ImageMagick...
magick composite {_overlay_} {_background_} [{_mask_}] [-compose {_method_}] {_result_}
magick {_background_} {_overlay_} [{_mask_}] [-compose {_method_}] -composite {_result_}
Perintah "magick composite" adalah metode konvensional untuk mengomposisikan gambar di IM. Adanya perintah khusus untuk ini menunjukkan betapa pentingnya komposisi gambar. Operator "magick" "-composite" juga bisa melakukan komposisi gambar sebagai bagian dari tugas pemrosesan gambar yang lebih besar. </> Perhatikan urutan gambar yang terbalik saat memakai "magick". Urutan itu praktis karena umumnya kita bekerja dengan kanvas utama, lalu di atasnya menyiapkan dan menggabungkan gambar hingga terbentuk gambar baru. Urutan gambar itu penting. Contoh praktis kedua teknik ini (dan lainnya) bisa dilihat di Layer dari banyak gambar, dan sebaiknya dibaca sebelum melanjutkan.
Definisi dan istilah
Gambar yang lebih penting adalah gambar latar belakang, yang juga sering disebut gambar tujuan, yaitu gambar yang dimodifikasi oleh komposisi gambar. Latar belakang tidak hanya menentukan ukuran akhir komposisi gambar; meta-data , seperti 'comments', 'labels', 'density', 'profiles' dan seterusnya, juga ikut dipertahankan. Posisinya tetap dan biasanya membentuk kanvas yang sedang Anda bangun, dari situlah nama latar belakang berasal. Ingat ini!
Gambar overlay, atau gambar sumber, mengendalikan bagaimana metode "-compose" harus memodifikasi gambar latar belakang atau tujuan yang tetap itu. Gambar tersebut bisa diposisikan ulang relatif terhadap gambar latar belakang yang tetap (biasanya memakai pengaturan (setting) "-geometry" dan "-gravity"). Namun gambar overlay beserta seluruh meta-data yang dikandungnya akan dihapus begitu operasi composite selesai.
Kadang gambar mask ketiga ditambahkan ke perintah. Gambar ini dipakai untuk menentukan dan mengendalikan bagian mana dari gambar latar belakang yang akan dimodifikasi oleh komposisi yang dihasilkan, dan seberapa besar. Rinciannya lihat Masking pada composite di bawah. Sejak IM v6.5.3-4, pengaturan define khusus "compose:outside-overlay" (lihat Pengaturan outside-overlay) bisa disetel ke nilai 'false' untuk mematikan segala modifikasi pada gambar latar belakang di luar area persegi yang ditutupi gambar overlay. Tanpa ini, sebagian metode komposisi akan mengosongkan area yang tidak ditutupi overlay , sebagai bagian dari definisi compose.
Metode komposisi yang sebenarnya dikendalikan oleh pengaturan (setting) "-compose", yang nilai bawaannya 'Over'. Artinya, gambar sumber digambar Over (di atas) gambar latar belakang, dan itulah yang dibayangkan kebanyakan orang saat melakukan komposisi gambar. Sebagian besar bagian IM Examples ini dipakai untuk merinci apa yang dilakukan berbagai 'metode' komposisi dan bagaimana memanfaatkannya. Untuk melihat hasil tiap metode compose, lihat Tabel metode compose. Tabel itu tidak menggambarkan tujuan pemakaian tiap metode, hanya keluaran mentah dari berbagai gambar uji. Nama metode compose tidak peka huruf besar-kecil, dan karakter '_' atau '-' bersifat opsional. Karena itu metode compose "Dst_Over" juga bisa ditulis: "dst_over", "dst-over", "DstOver", "dstover", atau bahkan "dstOVER". Semuanya berarti sama. Selain itu, metode compose: 'Over', 'ATop', 'In' dan 'Out' adalah bentuk singkat dari nama metode yang lebih panjang: 'Src_Over', 'Src_ATop', 'Src_In' dan 'Src_Out'. Di luar daftar panjang metode "-compose" itu, ada beberapa yang butuh argumen numerik tambahan agar bekerja dengan benar. Pada perintah "magick composite" argumen tersebut diberikan lewat opsi khusus: "-dissolve", "-blend", "-watermark" ('modulate'), "-displace" dan "-distort". Sejak IM v6.5.3-4, perintah "magick" bisa mengoper argumen khusus ke operator "-composite" memakai pengaturan define, "compose:args". Contohnya lihat metode khusus Dissolve dan Blend di bawah.
Operator komposisi gambar
Selain dua gaya komposisi dua gambar secara langsung di atas, ada sejumlah operasi gambar lain yang juga memakai komposisi alpha sebagai bagian dari pemrosesan internalnya. Operasi-operasi ini dipengaruhi oleh pengaturan (setting) "-compose" yang sedang berlaku, meski penempatannya memakai posisi internal masing-masing atau teknik offset kanvas virtual gambar berlapis. Berikut daftar semua operator yang diketahui terpengaruh oleh pengaturan compose...
Komposisi banyak pasang gambar Contoh praktis memakai operator komposisi gambar utama, baik perintah primitif "
magick composite" maupun operator -composite" untuk "magick". Metode tingkat rendah ini memakai pengaturan geometry/gravity untuk menentukan posisi gambar overlay. Operator pelapisan Operator 'layerimage' "flatten", "mosaic", dan "-layers merge" menimpakan semua gambar pada urutan gambar saat ini ke satu kanvas baru, yang ukuran dan posisinya ditentukan oleh operator pelapisan yang dipilih. Ini memakai pengaturan offset kanvas virtual/page untuk menentukan posisi gambar overlay. Operator perluasan tepi Operator yang menimpakan tiap gambar pada kanvas yang disiapkan secara internal. Termasuk di dalamnya operator seperti "-border", "-frame", dan "-extent". (Lihat Menambah/menghapus tepi gambar).Tidak ada informasi penempatan yang dipakai, meski "-extent" memanfaatkan offset gravity dan geometry untuk menimpakan pada gambar latar belakang berwarna polos. Menggambar gambar Metode overlay gambar "-draw 'image...'" akan menimpakan satu gambar sumber eksternal ke atas sederet gambar tujuan. Ini satu-satunya teknik komposisi gambar yang tersedia bagi "mogrify". Gambar 'overlay' diambil dari sumber eksternal sehingga keterbatasan perintah itu, yang tidak punya operator daftar, bisa diatasi. Informasi resize dan posisi juga diberikan oleh pengguna, dan keduanya bisa terpengaruh gravity. Layers composite multi-daftar Operator "-layers composite" memungkinkan dua daftar gambar terpisah dikomposisikan bersama, sepasang gambar dalam satu waktu, untuk membentuk urutan multi-gambar baru yang tergabung. Operator ini juga mengomposisikan sederet gambar dengan satu gambar tunggal (bisa berupa gambar 'overlay' statis, atau gambar 'tujuan' statis). Ini juga SATU-SATUNYA operator komposisi yang memungkinkan pemakaian KEDUA hal sekaligus: offset yang terpengaruh "-gravity" universal, yaitu "-geometry" (secara global), dan offset kanvas virtual "-page" tiap gambar dari posisi global itu. Operator komposisi ini sangat penting untuk mengomposisikan animasi gambar, atau urutan gambar lain, secara utuh, tanpa perlu skrip untuk memproses tiap pasang gambar satu per satu.
Menempatkan gambar overlay
Pengaturan geometry/gravity composite
Pada komposisi alpha biasa, pengaturan (setting) "-geometry" dipakai bersama "-gravity" untuk menempatkan gambar sumber relatif terhadap gambar tujuan. Pemakaian kedua pengaturan ini dibahas sangat rinci di Pemosisian gambar memakai gravity.Perhatikan bahwa komponen ukuran pada "-geometry" bersifat khusus karena akan mengubah ukuran gambar (geometry). Pada "composite" yang diubah ukurannya adalah gambar sumber, sedangkan pada "convert" yang diubah adalah gambar terakhir pada urutan gambar. Secara teknis ini aspek yang terpisah dari komposisi gambar. Lihat Resize geometry dan Melapiskan gambar dengan composite. Pada komposisi alpha hanya dua gambar yang terlibat, 'sumber' dan 'tujuan' (atau 'latar belakang'), meski gambar mask ketiga juga bisa diberikan untuk membatasi area yang terpengaruh komposisi.
Offset kanvas/page layer
Komposisi gambar berlapis memakai filosofi yang sangat berbeda. Semua gambar (sebanyak yang diinginkan) diperlakukan setara sesuai urutan yang diberikan. Semuanya punya "-page" atau offset page yang menempatkan sudut kiri-atas tiap gambar relatif terhadap 'origin' kanvas virtual (offset bawaan), tetapi tanpa gravity. Untuk memproses banyak gambar, sebuah gambar latar belakang baru dibangkitkan memakai warna "-background" saat itu, dengan ukuran yang bergantung pada operasi yang dijalankan. Gambar inilah yang dianggap gambar 'tujuan' (kanvas). SEMUA gambar dikomposisikan ke kanvas baru itu satu per satu secara berurutan. Bahkan bila hanya dua gambar yang diberikan, sebuah gambar baru tetap dibuat dan dua komposisi terpisah diterapkan. Artinya, prosesnya bisa lambat. Semua gambar diperlakukan sebagai gambar 'sumber' dan urutan pencantumannya menentukan hasil. Namun offset 'layer' TIDAK terpengaruh gravity. Karena tiap gambar bisa punya 'offset kanvas' sendiri, komposisi banyak gambar lebih baik dikerjakan memakai operator pelapisan gambar dan juga komposisi urutan multi-gambar untuk animasi. Kedua gaya ini teknik penempatan yang sangat berbeda, dan penting memilih gaya yang tepat untuk teknik komposisi yang direncanakan.
Kedua teknik penempatan
Hanya satu teknik komposisi, yaitu operator komposisi layers untuk daftar multi-gambar, yang memungkinkan kedua metode penempatan dipakai sekaligus. Mula-mula kedua daftar ditempatkan secara global memakai"-geometry" dan "-gravity", yang diterapkan pada ukuran kanvas virtual gambar pertama di tiap daftar. Lalu tiap gambar di dalam daftar di-offset memakai "-page" dari posisi global itu untuk menentukan posisi akhirnya. Tentu saja bila sebuah gambar overlay tidak muat pada gambar tujuan tertentu di antara gambar yang diberikan, gambar itu akan terpotong oleh gambar tujuan tersebut. Karena itu umumnya sebaiknya hanya memakai gambar yang sudah sepenuhnya di-coalesce sebagai gambar tujuan, dengan ukuran yang sesuai kebutuhan. Ukuran gambar hasilnya tentu bisa di-trim lagi sesudahnya.
Metode komposisi alpha Duff-Porter
Metode komposisi gambar Duff-Porter adalah kumpulan tradisional berisi 12 metode yang definisinya sangat jelas. Metode ini dikenal sebagai komposisi alpha karena gambar digabungkan menurut suatu aspek transparansi gambar atau 'kanal alpha'. Definisi matematisnya bisa ditemukan pada dokumen SVG Alpha Compositing. Berikut tabel klasik yang menunjukkan hasil ke-12 metode itu dengan dua gambar segitiga.
Lihat juga Tabel mentah metode compose yang memuat diagram dengan lebih banyak metode komposisi memakai bentuk dan gradien gambar yang berbeda. Metode compose bawaan (bila sama sekali tidak ditentukan) adalah 'Over', dan itulah yang biasanya diinginkan kebanyakan orang saat mengomposisikan gambar. Untuk memahami dan mengingat apa yang dilakukan tiap metode compose di atas, gambar hasilnya akan sama seperti kalau kita berkata...
**{_Source_} --{_compose_method_}--> {_background_}**
****
Artinya, gambar hasil untuk metode 'ATop' setara dengan "gambar overlay 'ATop' gambar latar belakang". Maksudnya, gambar latar belakang akan mempertahankan 'bentuk'-nya, tetapi warna gambar sumber akan duduk 'di atas' latar belakang itu. Namun ingat bahwa urutan gambar terbalik saat memakai operator "magick -composite". Ke-12 metode ini tidak hanya menentukan gambar mana dari keduanya yang 'terlihat' pada hasil, tetapi juga bagaimana pengaruhnya pada bagian gambar yang TIDAK ditimpa gambar sumber. Yakni, apakah 'latar belakang' aslinya dibiarkan apa adanya atau dikosongkan sama sekali. Gambar 'tujuan' pada tabel di atas sengaja saya buat lebih besar supaya terlihat apakah sisa gambarnya dikosongkan atau tidak. Metode 'pengosongan' itu adalah: 'Src', 'In', 'Dst_In', 'Out', 'Dst_ATop', dan 'Clear'. Sejak IM v6.5.3-4 tersedia pengaturan define "compose:outside-overlay=false" untuk mencegah komposisi Duff-Porter mengosongkan gambar tujuan di luar area yang ditimpa. Contohnya lihat metode komposisi 'Copy' dan 'Clear', serta Pengaturan outside-overlay, untuk rinciannya.Perhatikan bahwa 'Copy' adalah metode komposisi 'ke-13' khusus yang disediakan IM. Pada dasarnya setara dengan komposisi 'Over', tetapi dengan pengosongan latar belakang pada area yang ditimpa. Namun dari sisi implementasi, ini adalah komposisi 'Src' dengan outside-overlay (atau pengosongan latar belakang) dimatikan. |
ImageMagick v5 ke bawah tidak mengosongkan area mana pun yang tidak ditimpa gambar sumber. Ini penanganan operator komposisi Duff-Porter yang keliru, dan diperbaiki selama pengembangan IM v6. |
|---|---|
Salah satu aspek terpenting metode komposisi alpha Duff-Porter adalah bahwa metode ini tidak akan pernah membuat 'piksel berwarna yang sepenuhnya transparan' menjadi terlihat. Ini penting karena bagian gambar yang sepenuhnya transparan punya warna yang tidak terdefinisi. Bagian itu bisa saja memuat nilai warna APA PUN tanpa memengaruhi hasil gambar yang terlihat. Lihat Mengendalikan transparansi gambar untuk rincian tentang 'penanganan kanal transparansi'. Inilah sebabnya komposisi Duff-Porter sering menjadi metode masking yang lebih disukai ketimbang alternatifnya 'CopyOpacity', yang mengganti seluruh kanal alpha sebuah gambar dan bisa membuat warna tak terlihat yang tidak terdefinisi itu menjadi terlihat. |
Over (menimpakan gambar overlay di atas latar belakang)
Inilah metode compose bawaan, metode yang terbayang oleh semua orang saat menimpakan satu gambar di atas gambar lain. Gambar overlay ditaruh 'di atas' gambar latar belakang, sama seperti 'sel animasi' atau 'transparansi OHP' yang ditaruh di atas pemandangan atau gambar latar. Metode ini begitu lazim sampai rasanya saya tak perlu banyak menjelaskan lagi. Jadi mari kita lihat contoh menimpakan gambar satu huruf di atas gambar latar belakang. |
magick -background none -fill white \
-font Ravie -pointsize 36 label:A label_A_white.png
magick composite -gravity center label_A_white.png rose: compose_over.gif
![[IM Output]](../static/img/compose/label_A_white.png)
![[IM Output]](../static/img/compose/compose_over.gif)
Overlay bisa dipusatkan dengan gravity seperti di atas, atau ditempatkan persis memakai pengaturan (setting) "-geometry". Bila ditempatkan di luar batas latar belakang, overlay akan terpotong atau diabaikan, sesuai keadaan. Pada contoh ini gambar ditimpakan memakai operator "convert -composite", tetapi ditempatkan setengah di atas latar belakang. Perhatikan urutan gambarnya yang terbalik. |
magick rose: label_A_white.png \
-geometry +5-15 -composite convert_over.gif
Dst_Over (menaruh gambar 'di bawah' latar belakang)
Seperti metode 'Dst_' lainnya, metode ini bekerja hampir persis seperti versi 'Src_'-nya, tetapi dengan gambar overlay dan latar belakang ditukar. Dengan begitu 'Dst_Over' setara dengan menaruh gambar overlay sumber 'di bawah' gambar tujuan. Hasilnya, hanya bagian gambar sumber atau overlay yang tidak tertutup gambar tujuan atau latar belakang yang akan terlihat, mengintip dari bawah. Ini TIDAK sama persis dengan 'Over' yang argumen gambarnya ditukar, sebab ukuran, penempatan, dan meta-data gambar lainnya tetap berasal dari gambar latar belakang atau tujuan. Ingat, ukuran gambar keluaran sama dengan gambar 'latar belakang', dan posisi gambar sumber relatif terhadap latar belakang itu (memakai "-geometry" dan "-gravity"). Sebagai contoh, di sini kita menimpakan label 'A' hitam 'di bawah' A putih yang asli. Posisi A hitam bisa kita geser relatif terhadap latar belakang A putih. Seperti terlihat, cara ini bagus untuk menambahkan bayangan tegas tanpa perlu memikirkan pelebaran ukuran gambar. |
magick -background none -fill black \
-font Ravie -pointsize 36 label:A label_A_black.png
magick composite -compose Dst_Over -geometry +5+5 \
label_A_black.png label_A_white.png compose_under.png
![[IM Output]](../static/img/compose/label_A_black.png)
![[IM Output]](../static/img/compose/compose_under.png)
Yang penting dicatat: ukuran latar belakang dipertahankan, sementara posisi overlay relatif terhadap latar belakang bisa diubah dan akan terpotong oleh latar belakang itu. Inilah yang membuat operator ini penting dan berguna. Pengaturan (setting) "-tile" pada "magick composite" juga membuat bentuk 'over' ini sangat berguna sebagai cara men-tile bagian bawah sebuah gambar. Misalnya, men-tile pola checkerboard bawaan di bawah huruf berbayang yang baru saja kita buat. |
magick composite -compose Dst_Over -tile pattern:checkerboard \
compose_under.png compose_under_tiled.jpg
Src ('memangkas' ke dimensi gambar latar belakang)
Operator ini sepenuhnya mengganti gambar latar belakang dengan gambar overlay. Warna dan transparansi pada latar belakang dibuang habis sehingga tersisa gambar kosong seukuran gambar tujuan aslinya, dan di atasnya diterapkan gambar sumber. Lalu apa gunanya? Ada dua.Pertama, gambar latar belakang praktis diganti dengan gambar sumber, tetapi seluruh meta-data yang melekat pada gambar latar belakang asli tetap dipertahankan. Jadi gambarnya berubah, meta-datanya tidak. Kedua, ukuran gambar akhir tidak berubah meski isinya berubah. Artinya, gambar hasil punya ukuran yang sama dengan latar belakang aslinya. Dengan begitu operator ini bisa dipakai untuk memangkas atau menambahkan border pada gambar sumber atau overlay agar ukurannya sama dengan gambar latar belakang yang diberikan (berikut meta-data latar belakang itu). Misalnya, kita ingin membuat gambar plasma lalu memotongnya agar seukuran gambar rose bawaan. Cara ini memungkinkannya tanpa perlu tahu persis seberapa besar gambar rose tersebut. |
magick composite -compose Src -size 100x100 plasma:tomato-dodgerblue \
rose: compose_crop.gif
![[IM Output]](../static/img/compose/compose_crop.gif)
Tentu saja perintah di atas setara dengan "-crop" pada gambar plasma, bukan 'resize'. Meta-data gambar aslinya juga dipertahankan. Jadi meskipun sekarang ini gambar plasma, meta-datanya tetap menyebutnya gambar 'rose' yang berasal dari sumber gambar "rose:".
Bila overlay-nya lebih kecil, sisa gambar latar belakang diganti dengan transparansi sebagai pengisi. Namun perlu dicatat bahwa latar belakangnya harus punya kanal alpha; kalau tidak, ruang sisanya akan diisi hitam (warna yang dimiliki 'none' atau 'transparent' tanpa kanal alpha). |
magick composite -compose Src -gravity South \
hand_point.gif rose: -alpha set compose_expand.gif
Copy (menyalin atau mengganti gambar)
Operator ini bukan salah satu dari 12 metode compose 'Duff-Porter', itulah sebabnya ia tidak ada pada bagan di atas. Meski begitu ia sangat penting. Cara kerjanya persis seperti metode compose "Src", tetapi ia tidak menyentuh gambar latar belakang di luar area yang ditimpa. Artinya, kemampuan menyalinnya dibatasi hanya pada area yang ditimpa dan tidak lebih. Dengan ini kita bisa memangkas sepotong kecil dari gambar besar, mengerjakannya pada gambar kecil itu demi kecepatan, lalu 'menyalin' hasilnya kembali ke gambar besar tanpa menyentuh area lainnya. Pada gilirannya, pemrosesan gambar yang sangat besar bisa dioptimalkan. Berikut contoh yang sama seperti di atas, tetapi memakai 'Copy' alih-alih 'Src', yang memperlihatkan bahwa IM tidak membuang waktu mengosongkan sisa latar belakang sebagaimana dituntut algoritme 'Duff-Porter'. |
magick composite -compose Copy -gravity South \
hand_point.gif rose: -alpha set compose_copy.gif
![[IM Output]](../static/img/compose/compose_copy.gif)
Operator ini juga sangat mirip 'Over', hanya saja transparansi gambar sumber ikut disalin sehingga menggantikan gambar latar belakang sepenuhnya. Bila tidak ada transparansi, hasilnya persis seperti 'Over'. Secara internal, operator ini memodifikasi pengaturan kendali komposisi khusus "outside-overlay (lihat berikutnya).
Pengaturan outside-overlay
Sejak IM v6.5.3-4, kendali atas apakah sebuah metode komposisi juga memengaruhi area di luar area yang ditimpa bisa diatur pengguna lewat pendefinisian "compose:outside-overlay". Nilainya 'on' secara bawaan, tetapi bisa dimatikan dengan menyetelnya ke "false". Sebagai contoh, berikut padanan metode komposisi Copy tetapi memakai metode komposisi Src yang lebih tradisional.. |
magick rose: hand_point.gif -alpha set -gravity South \
-define compose:outside-overlay=false \
-compose Src -composite compose_copy_src.gif
![[IM Output]](../static/img/compose/compose_copy_src.gif)
Contoh pemakaian flag ini bisa dilihat di Overlay sudut PageCurl.
Outside-overlay vs 'clip-to-self' SVG
Define "compose:outside-overlay" dalam banyak hal mirip dengan pemakaian atribut 'clip-to-self' SVG. Keduanya membatasi komposisi hanya pada wilayah yang ditimpa, tanpa memengaruhi sisa gambar tujuan. Namun 'clip-to-self' SVG hanya berlaku pada area yang tercat (seperti mask), sedangkan pengaturan 'outside-overlay' milik IM berlaku pada seluruh area persegi gambar sumber tempat ia menimpa gambar latar belakang. Hal ini kurang jelas dalam manual SVG Composition, sebab contoh yang diberikan tidak dijelaskan dengan baik sehingga sangat membingungkan. Namun bila ingin mencoba memahaminya, lihat SVG Composition 'clip-to-self' property atau Understanding SVG 1.2 composition, clip-to-self. Perhatikan bahwa write mask juga bisa dipakai untuk kendali semacam ini, tetapi dengan area berbentuk sesuai mask yang diberikan. Dalam hal ini sifatnya jauh lebih mirip atribut 'clip-to-self' SVG, yang gambar sumbernya sekaligus dipakai sebagai write mask.
Dst (compose 'no-op')
Operator ini tidak melakukan apa pun. Gambar sumber, atau overlay, diabaikan sepenuhnya dan gambar tujuan, atau latar belakang, dibiarkan tak berubah. Kegunaan sebenarnya metode ini adalah sebagai cara 'mematikan' operasi komposisi alpha pada operator gambar lain. Sebagai contoh, kita memakai operator frame untuk memberi frame pada gambar rose (dengan latar belakang transparan), lalu memakai "-compose Dst" agar gambarnya tidak ikut ditambahkan ke frame. Dengan kata lain, rose hanya kita pakai untuk menentukan ukuran frame bagian dalam pada hasilnya. Frame, dan hanya frame, itulah hasilnya. |
magick rose: -alpha set -mattecolor Gold -bordercolor none \
-compose Dst -frame 7x7+3+2 compose_frame_dst.gif
![[IM Output]](../static/img/compose/compose_frame_dst.gif)
Operasi khusus Alpha Set memastikan kanal alpha tersedia pada gambar; tanpa itu bagian tengahnya akan hitam, bukan transparan. "-bordercolor" menentukan warna di dalam frame yang biasanya ditaruh di bawah gambar sumber. Metode 'Dst' juga berguna di dalam skrip untuk mematikan komposisi alpha pada perintah yang besar dan rumit tanpa perlu membuat dua perintah IM yang berbeda.
Dst_In (atau me-mask latar belakang dengan sumber)
Metode '**Dst_In**' seperti memakai gambar sumber sebagai mask 'Copy_Opacity' bagi gambar latar belakang. Metode ini mengambil bentuk gambar overlay dari gambar latar belakang, seperti cetakan kue yang memotong bentuk kue dari adonan. Sebagai contoh, mari kita pakai 'A' berhias dari atas tadi sebagai mask untuk memotong bentuknya dari gambar rose. |
magick composite -compose Dst_In -gravity center \
label_A_white.png rose: -alpha Set compose_mask.png
![[IM Output]](../static/img/compose/compose_mask.png)
Berbeda dengan metode 'Copy_Opacity', gambar grayscale TIDAK bisa dipakai sebagai mask di sini, sebab hanya kanal alpha gambar overlay yang dipakai pada operasi ini. Warna apa pun pada overlay diabaikan sama sekali. | Yang sebenarnya dilakukan semua metode 'Dst_In dan 'Src_In' hanyalah mengalikan kanal alpha kedua gambar. Warna gambar yang sesuai (menurut metodenya) tetap dipertahankan.
Dst_Out (atau operasi 'erase')
Memakai metafora 'adonan kue' dari 'Dst_In', hasil metode '**Dst_Out**' adalah adonan yang tersisa setelah sekeping kue dipotong keluar. Metode ini bisa dipakai untuk melubangi, atau menggigit sebagian gambar latar belakang, memakai bentuk overlay. Sekali lagi, warna apa pun pada overlay diabaikan sama sekali. |
magick composite -compose Dst_Out -gravity center \
label_A_white.png rose: -alpha Set compose_erase.png
![[IM Output]](../static/img/compose/compose_erase.png)
Rumus matematis kedua metode compose ini dirancang khusus supaya bila 'Dst_In' dan 'Dst_Out' dipakai pada kumpulan gambar yang sama, keduanya bisa disatukan kembali (memakai metode 'Plus') persis seperti potongan jigsaw. Sebagai contoh, di sini kita 'menjumlahkan' (memakai komposisi 'Plus') dua gambar terakhir yang kita hasilkan di atas. Gambar ini sama persis (sampai ke pikselnya) dengan gambar 'rose:' aslinya. |
magick composite -compose Plus compose_mask.png compose_erase.png \
compose_rejoin.png
![[IM Output]](../static/img/compose/compose_rejoin.png)
Menghapus sebagian gambar bukan pekerjaan mudah di program grafis mana pun. Operasi "-draw", misalnya, hanya bisa menambahkan warna ke gambar. Ia tidak bisa menghapus warna yang sudah dibubuhkan ke kanvas. Bayangkan seorang pelukis yang mengecat iklan pada pintu atau jendela kaca. Ia bisa membubuhkan cat, tetapi tidak bisa menghapus cat dengan mengecat di atasnya. Dengan menggambar bentuk yang ingin dihapus ke atas kanvas transparan, 'Dst_Out' lalu bisa dipakai untuk membuangnya dari gambar kerja. Kira-kira seperti pelukis tadi mengelap cat basah dengan kain yang bentuknya khusus. Bentuk itu bisa dipakai untuk membuang seluruh atau sebagian warnanya sehingga hasilnya sepenuhnya transparan atau semitransparan. Misalnya, kita ingin menggambar simbol bulan sabit pada kanvas transparan. Metode komposisi alpha ini membuat bentuk yang sulit itu mudah digambar dengan menimpakan dua lingkaran. |
magick -size 70x70 xc:none -fill white -draw 'circle 35,35 35,5' \
\( -size 70x70 xc:none -fill black -draw 'circle 28,30 35,5' \) \
-alpha Set -compose Dst_Out -composite moon_crescent.png
![[IM Output]](../static/img/compose/moon_crescent.png)
| Gambar kedua harus dibuat dan digambar di dalam tanda kurung. Kalau tidak, "-draw" akan menggambar pada KEDUANYA, yaitu gambar overlay DAN latar belakang asli, yang jelas keliru. Tanpa tanda kurung akan muncul lingkaran piksel hitam semitransparan di sekeliling bagian gambar yang terhapus. Saya tahu betul, itu terjadi pada saya saat membuat contoh ini, dan cukup menjengkelkan.
ATop ('Over', tetapi dipotong ke gambar latar belakang)
Seperti 'Over' tetapi hasilnya dibatasi pada bentuk asli gambar latar belakang. Dengan kata lain, kanal alpha pada gambar tujuan tidak berubah, tetapi warna gambarnya ditimpa oleh bagian gambar sumber yang tidak transparan. Bila gambar latar belakang sepenuhnya opak (tanpa transparansi), operasi ini berperilaku persis seperti komposisi 'Over' biasa. Bedanya baru muncul ketika latar belakang memuat transparansi, yang sekaligus memotong overlay. Yang membuatnya berguna adalah untuk menimpakan efek pencahayaan dan shading yang terbatas pada objek (bentuk) gambar tujuan. Misalnya, kita punya lingkaran merah dan ingin menambahkan sorotan seolah-olah itu bola tiga dimensi. Kita bisa membuat lingkaran dan sorotannya, lalu menimpakan sorotan itu memakai 'ATop' agar terbatas pada lingkaran. |
magick -size 70x70 xc:none \
-fill red -draw 'circle 35,35 10,30' red_circle.png
magick -size 70x70 xc:none -draw 'circle 35,35 35,20' \
-negate -channel A -blur 0x8 red_highlight.png
magick composite -compose ATop -geometry -13-17 red_highlight.png \
red_circle.png red_ball.png
![[IM Output]](../static/img/compose/red_ball.png)
| Sorotan putih itu dibuat memakai "-negate" untuk memastikan seluruh gambarnya benar-benar putih. Cara ini dipakai untuk menghindari bug pada operator "-blur", yang kini sudah diperbaiki di IM versi 6.2.4. Lihat Bug blur dengan transparansi untuk rincian bug lama itu.
Dengan cara serupa kita bisa menambahkan bayangan kabur pada bola tadi, dipotong pada batas bola itu sendiri, supaya tampilannya makin terasa 3-D. Bagaimana perintah berikut mencapai hasil itu, saya tinggalkan sebagai latihan bagi pembaca. |
magick moon_crescent.png -fx 0 -channel A -blur 0x7 \
red_ball.png +swap -compose ATop -composite red_ball2.png
![[IM Output]](../static/img/compose/red_ball2.png)
Dengan sedikit lebih teliti menyiapkan gambar bahan, gambar di atas bisa dibuat lebih realistis lagi. Untuk memperlihatkan pemakaian metode compose ini, hasilnya lumayan. Contoh lain pemakaian metode compose 'ATop' bisa dilihat di Membuat logo jadi 3-D.
Clear (mengosongkan latar belakang. Mengabaikan gambar overlay)
Ini metode compose yang tidak biasa: pada dasarnya ia mengabaikan gambar overlay sepenuhnya dan hanya mengosongkan gambar latar belakang. Karena itu metode ini ideal untuk membuat kanvas transparan atau hitam seukuran gambar latar belakang, untuk proyek yang rumit. Karena gambar overlay tidak dipakai, gambar "null:" berukuran satu piksel cocok dijadikan overlay. |
magick composite -compose Clear null: rose: -alpha Set compose_clear.png
![[IM Output]](../static/img/compose/compose_clear.png)
Tentu saja operasi Alpha Set (meski tidak diperlukan dalam kasus ini) memastikan gambar tujuan punya kanal alpha yang bisa dipakai saat gambar dikosongkan menjadi transparan. Bila kanal alpha secara khusus dimatikan, operator ini akan mengosongkan gambar menjadi hitam, karena matematika yang terlibat. |
magick composite -compose Clear null: rose: -alpha Off compose_black.png
![[IM Output]](../static/img/compose/compose_black.png)
Pengaturan define khusus "compose:outside-overlay" memungkinkan pengosongan ini dibatasi hanya pada area yang ditimpa, terlepas dari apakah gambar overlay memuat transparansi atau tidak. Contohnya: |
magick rose: hand_point.gif -alpha Set -gravity South \
-define compose:outside-overlay=false \
-compose Clear -composite compose_clear_limited.gif
Xor (mengosongkan area yang bertindihan)
Ini metode komposisi yang sangat aneh dan jarang dipakai. Ia menimpakan dua gambar lalu mengosongkan area yang bertindihan menjadi transparan. |
magick -size 60x60 \
\( xc:none -fill blue -draw 'circle 21,39 24,57' \) \
\( xc:none -fill red -draw 'circle 39,39 36,57' \) \
-compose Xor -composite compose_xor_2.png
![[IM Output]](../static/img/compose/compose_xor_2.png)
Keadaan jadi makin menarik ketika gambar ketiga di-xor pada hasil di atas. |
magick -size 60x60 compose_xor_2.png \
\( xc:none -fill green -draw 'circle 30,21 30,3' \) \
-compose Xor -composite compose_xor_3.png
![[IM Output]](../static/img/compose/compose_xor_3.png)
Seperti terlihat, menumpuk banyak gambar bisa menghasilkan efek yang menawan: setiap tumpang tindih dengan jumlah gambar genap akan menjadi kosong, sedangkan tumpang tindih dengan jumlah ganjil membuat gambar terakhir yang ditimpakan tampak menembus.
FUTURE: Xor effects on semi-transparent images get extremely weird.
Explore this and create an example demonstrating this weirdness.
Metode compose matematis
Kelompok metode compose ini memungkinkan kita melakukan operasi matematis dengan gambar. Kelihatannya kurang berguna, tetapi untuk manipulasi gambar tingkat rendah metode-metode ini memungkinkan hal-hal yang biasanya tidak terpikirkan. Berbeda dengan metode komposisi gambar Duff-Porter sebelumnya, kelompok ini umumnya metode grayscale. Artinya, biasanya diterapkan pada gambar yang salah satu atau keduanya grayscale, dan umumnya tidak memuat transparansi. Bukan berarti transparansi tidak bisa dipakai (lihat Komposisi matematis dan alpha di bawah), hanya saja itu bukan praktik yang lazim. Pemakaian bawaan komposisi matematis didefinisikan oleh spesifikasi format file gambar SVG. Keterangan lebih lanjut bisa dibaca di SVG Composition Guide (2009), juga di Pegtop Blend Modes dan SimpelFilter: Photoshop Blend Modes. Gambar gradien khusus yang tampak di samping tiap operator berikut memvisualkan operator itu dari sisi pengaruhnya terhadap nilai warna. Hasilnya dibuat dengan mengomposisikan dua gambar gradien seperti berikut...
magick -size 64x64 gradient: gradient_src.png
magick -size 64x64 gradient: -rotate 90 gradient_dst.png
magick composite gradient_src.png -compose Multiply gradient_dst.png \
gradient_result.png
Pada dasarnya, dengan memakai nilai warna piksel overlay (sumber) pada sumbu tegak dan piksel latar belakang (tujuan) pada sumbu datar, nilai hasil penerapan operator itu atas kedua nilai tersebut bisa dibaca dari bagan. Pada contoh di atas terlihat bahwa 'Multiply' umumnya membuat gambar lebih gelap, dan bahwa nilai hitam (0) pada salah satu gambar masukan akan menghasilkan hitam. Hal yang bisa sangat berguna. ![[IM Output]](../static/img/compose/gradient_op_multiply.png)
Multiply ( ) (membuat putih jadi transparan untuk diagram/teks)
Ini salah satu metode compose yang lebih berguna tetapi kurang dihargai, dan sekadar perkalian dua gambar. Rumusnya tentu saja: _Src_ *_Dest_ Artinya, bila salah satu gambar putih murni, hasilnya adalah gambar yang satu lagi. Sebaliknya bila salah satu gambar hitam, hasilnya hitam. Di antara kedua ujung itu, satu gambar akan menggelapkan gambar tujuan sebesar nilai yang diberikan. Perhatikan bahwa 'Multiply' hanya menggelapkan gambar, tidak pernah mencerahkannya. Ia 'melemahkan' gambar ke arah hitam, yang menjadikan metode compose ini komposisi bergaya 'Burn '. (Lihat Metode komposisi pencahayaan di bawah) |
magick label:Rose label_white.gif
magick composite -compose Multiply -gravity center \
label_white.gif rose: compose_multiply.gif
![[IM Output]](../static/img/compose/label_white.gif)
![[IM Output]](../static/img/compose/compose_multiply.gif)
Metode ini bekerja sangat baik dalam banyak situasi, tetapi terutama bagus bila salah satu gambar memuat garis hitam (atau grayscale) di atas latar belakang yang sebagian besar putih, seperti gambar teks. Bila kedua gambar memuat area berwarna, hasilnya bisa tak biasa. Dengan kata lain, teknik ini pas untuk menimpakan gambar dan diagram lain langsung ke atas gambar garis yang latarnya putih atau sangat terang. Sebagai contoh, saya ingin menambahkan beberapa diagram ke halaman teks yang akan disertakan dalam gambar hasil ray-tracing. 'Halaman teks' itu bisa dilihat pada gambar hasil di Studies in Polyhedra milik saya. Bila ada dua mask gambar grayscale, multiply juga cara yang bagus untuk menghapus bagian gambar menjadi hitam berdasarkan suatu mask. Ini dilakukan secara linear, jadi mask-nya boleh berupa gambar grayscale, bukan hanya gambar on/off boolean murni. Lihat Komposisi matematis. Mengalikan sebuah gambar dengan dirinya sendiri sebenarnya teknik yang berguna untuk menghasilkan penggelapan kuadrat: warna cerah tetap menonjol, sementara warna lain jadi lebih gelap. Sebenarnya ini setara dengan operator Gamma bernilai "0.5", atau operasi Evaluate PowerOf bernilai "2.0". Contohnya lihat Pembangkit bintang, untuk menghasilkan sebaran intensitas bintang yang lebih realistis. Atau bisa juga dipakai pada gambar awan satelit sebelum hasilnya ditimpakan pada peta geografis. ![[IM Output]](../static/img/compose/gradient_op_screen.png)
Screen (membuat hitam jadi transparan untuk diagram/teks)
Ini hampir persis seperti 'Multiply', hanya saja kedua gambar masukan dinegasikan sebelum compose, lalu hasil akhirnya dinegasikan lagi untuk mengembalikan gambar ke keadaan normal. Secara teknis kedua metode ini 'dual' satu sama lain. Rumusnya jadi: 1-(1-_Src_)*(1-_Dest_) Artinya, bila salah satu gambar hitam murni, hasilnya adalah gambar yang satu lagi. Sebaliknya bila salah satu gambar putih, hasilnya putih. Di antara kedua ujung itu, satu gambar akan mencerahkan gambar tujuan sebesar nilai yang diberikan. Perhatikan bahwa komposisi 'Screen' hanya membuat gambar lebih cerah, tidak pernah lebih gelap. Ini gaya komposisi yang dikenal sebagai komposisi 'Dodge '. (Lihat Metode komposisi pencahayaan di bawah) Metode komposisi ini pas untuk menimpakan teks putih di atas latar belakang hitam, lalu menimpakannya ke gambar lain... |
magick -background black -fill white label:Rose label_black.gif
magick composite -compose Screen -gravity center \
label_black.gif rose: compose_screen.gif
![[IM Output]](../static/img/compose/label_black.gif)
![[IM Output]](../static/img/compose/compose_screen.gif)
Lihat Masking matematis untuk contoh pemakaiannya menimpakan bentuk putih pada sebuah gambar. ![[IM Output]](../static/img/compose/gradient_op_bumpmap.png)
Bumpmap (multiply grayscale)
Metode 'Bumpmap' pada dasarnya sama dengan 'Multiply', kecuali gambar sumbernya diubah menjadi grayscale sebelum ditimpakan. Dengan kata lain, ia menggelapkan gambar di mana pun gambar sumbernya gelap. Anggap saja ini operator bertipe 'multiply berdasarkan intensitas'. Sebagai contoh... |
magick composite -compose Bumpmap -gravity SouthEast -geometry +3+3 \
hand_point.gif cyclops.gif -alpha Set compose_bumpmap.gif
![[IM Output]](../static/img/compose/compose_bumpmap.gif)
Perhatikan bahwa gambar "hand_point.gif" diubah ke grayscale sebelum diterapkan. Tujuan aslinya adalah menambahkan tekstur (seperti tekstur kertas atau kain) pada gambar. Namun karena ia hanya bisa menggelapkan gambar, kegunaannya kalah dibanding metode 'HardLight' yang bisa mencerahkan sekaligus menggelapkan gambar (lihat di bawah). ![[IM Output]](../static/img/compose/gradient_op_divide.png)
Divide, Divide_Dst, Divide_Src ( ) (menghapus efek shading)
Kedua gambar dibagi satu sama lain. Gambar mana yang membagi gambar mana bergantung pada apakah 'Divide_Src' atau 'Divide_Dst' yang dipakai. Rumus 'Divide_Dst' adalah _Src_ / _Dest_ dan rumus 'Divide_Src' adalah _Dest_ / _Src_ Karena urutan gambar yang lazim didefinisikan dalam komposisi gambar dan pada perintah "magick composite, metode aslinya 'Divide berarti...
**{_Source_} Divide {_background_}**
****
Artinya, nama metode aslinya "Divide' adalah sinonim "Divide_Dst" yang berarti "bagi dengan gambar tujuan". Ini juga operator yang dipakai untuk membuat bagan gradien yang ditampilkan. Perhatikan bahwa urutan gambar sangat penting, karena hasilnya jauh berbeda bila gambar atau operatornya ditukar. Hal ini terutama berlaku pada perintah "magick", yang menaruh gambar tujuan sebelum gambar sumber. Ingat, gambar tujuanlah yang menentukan ukuran akhir sebenarnya dan meta-data pada hasil komposisi kedua gambar itu. Ingat pula bahwa gambar sumberlah yang ditempatkan relatif terhadap gambar tujuan. Metode komposisi ini paling besar manfaat praktisnya pada Menghapus vignette dari foto. Pada contoh berikutnya saya akan memakainya sebagai cara menghapus latar belakang.
Karena yang dipakai adalah nilai warna ternormalisasi yang lazimnya berkisar dari 0.0 (hitam) sampai 1.0 (putih), pembagian justru mencerahkan gambar pembilangnya, sebesar kadar 'hitam' yang muncul pada gambar pembaginya. Membagi dua gambar sehingga gambar 'pembilang' (yang tidak disebut oleh operatornya) menjadi lebih cerah memang terdengar aneh. Namun operasi ini sangat berguna. Dengan begitu bercak gelap pada gambar bisa dihapus, entah akibat vignetting lensa, pemindaian yang buruk, atau perubahan warna karena usia. Sebagai contoh, saya punya gambar teks tulisan tangan yang dipindai secara asal-asalan (memakai kamera digital tanpa flash, lalu ukurannya dikecilkan untuk membuang noise digital). Tepi kertasnya pudar, dan karena flash tidak dipakai, latar belakangnya sangat gelap serta punya efek shading sebab kertasnya tidak benar-benar rata.
Sekadar menormalisasi gambar untuk mempertegas kontrasnya tidak membantu menghapus pewarnaan tepi atau efek shading lainnya.
magick text_scan.png -normalize text_scan_norm.png
Namun dengan mem-blur gambar untuk menghilangkan garis-garisnya, lalu membagi gambar asli dengan hasil blur itu, kita praktis menghapus semua efek shading yang kasar dari gambar.
magick text_scan.png \( +clone -blur 0x20 \) \
-compose Divide_Src -composite text_scan_divide.png
Hasil pembagiannya membuat warna latar belakang menjadi putih, sementara garis-garis tipis teksnya tetap jelas meski sedikit lebih 'tipis'. Seperti terlihat, hasilnya jauh lebih jernih daripada sekadar menormalisasi, meski sebagian anti-aliasing ikut hilang. Beberapa penyesuaian tambahan bisa saja dilakukan pada gambar pembaginya, tetapi hasil ini sudah sangat mendekati yang diharapkan. Memakai blur yang lebih kecil bisa menjadi cara lain untuk menghasilkan gambar garis artistik, seperti diperlihatkan di Mewarnai gambar garis. Operator ini bisa dipadukan dengan pembangkit gradien latar belakang, misalnya Gradien sparse color, untuk menghasilkan gambar 'pembagi' latar belakang yang lebih baik ketimbang sekadar mem-blur seluruh gambar.
Operator divide sebenarnya mirip metode komposisi 'Color_Dodge', tetapi gambar pembaginya dinegasikan dan dipakai sebagai gambar sumber. Inilah komposisi yang biasanya dipakai di Photoshop, meski mungkin perlu Swap dan Negate pada gambarnya. Lihat 'Color_Dodge' untuk padanannya. | Sebelum IM v6.6.8-5 hanya metode asli 'Divide' yang tersedia (setara dengan 'Divide_Dst' yang lebih baru).
![[IM Output]](../static/img/compose/gradient_op_plus.png)
Plus ( ) (menjumlahkan warna untuk membentuk campuran)
Jumlahkan warna overlay ke latar belakang. Pada dasarnya membuat kedua gambar bercampur secara setara. Rumusnya tentu: _Src_ + _Dest_ Namun perhatikan, bila warna hasil penjumlahan melampaui batas warna, warnanya akan dipotong oleh batas rentang warna normal. Itulah sebabnya separuh gambar pada gambar gradien hasilnya putih murni, karena nilai-nilai itu dipotong pada nilai maksimumnya. Sebaiknya berhati-hati agar gambar hasilnya tidak terpotong bila itu tidak dikehendaki. Operator ini punya sejumlah kegunaan utama. Menggabungkan gambar yang memuat warna kanal terpisah, yang hanya kanal tertentunya saja yang berwarna. Sebagai contoh...
magick -size 60x60 xc:none -fill red \
-draw 'circle 30,21 30,3' compose_R.png
magick -size 60x60 xc:none -fill lime \
-draw 'circle 39,39 36,57' compose_G.png
magick -size 60x60 xc:none -fill blue \
-draw 'circle 21,39 24,57' compose_B.png
magick composite -compose plus compose_R.png compose_G.png compose_plus_RG.png
magick composite -compose plus compose_R.png compose_B.png compose_plus_RB.png
magick composite -compose plus compose_G.png compose_B.png compose_plus_GB.png
magick composite -compose plus compose_R.png compose_plus_GB.png \
compose_plus_RGB.png
| Karena IM mengikuti standar SVG, 'green' bukan warna hijau sejati (seperti pada nama warna X11) melainkan hijau gelap atau setengah cerah. Hijau RGB sejati bisa ditentukan dengan warna 'lime' seperti yang kita lakukan pada contoh di atas.
Operator ini juga dipakai sebagai operator matematis untuk menjumlahkan gambar gradien yang terpisah. Misalnya saat menghitung gambar selisih 'manhattan', atau pada Matematika gradien. 'Plus' kadang dipakai untuk menambahkan teks putih ke sebuah gambar. Ini BUKAN pemakaian yang benar, dan bisa menimbulkan ketidakkonsistenan anti-aliasing. Cara yang lebih baik adalah memakai metode compose 'Screen', yang menaikkan kecerlangan lewat perkalian, bukan penjumlahan. Metode compose Linear Dodge setara dengan 'Plus', tetapi memakai pencampuran alpha 'Over' yang lebih lazim.
Plus dan pencampuran Plus
Yang membuat 'Plus' lebih penting adalah karena ia praktis satu-satunya operator matematis yang menerapkan fungsi pencampuran selain pencampuran 'Over'. Ia tidak hanya 'menjumlahkan' warna, tetapi juga 'menjumlahkan' nilai kanal alpha, dan praktis hanya operator inilah yang melakukannya secara bawaan. Ini penting karena memungkinkan penyatuan yang benar atas gambar ber-mask yang saling melengkapi. Contohnya lihat penggabungan gambar Dst In dan Out. Ia juga memungkinkan transparansi dipakai untuk menghasilkan rata-rata terbobot atau Blend dari dua gambar. Tanpa metode pencampuran khusus 'Plus' ini, teknik penanganan transparansi khusus tersebut biasanya tidak mungkin dilakukan.
Sejak IM v6.6.1-6, kemampuan memakai operator matematis pada kanal alpha ditambahkan ke semua metode compose matematis cukup dengan membuang flag 'Sync' bawaan dari pengaturan (setting) "-channel", (cukup sebutkan kanal-kanal tertentu yang ingin dikenai). Lihat Matematika kanal gambar memakai komposisi gambar di bawah. Artinya, operator 'Plus' adalah satu-satunya operator metode compose matematis yang tidak terpengaruh fitur ini, sebab pada operator itu hal tersebut sudah berlaku secara bawaan.
![[IM Output]](../static/img/compose/gradient_op_minus.png)
Minus, Minus_Dst, Minus_Src ( )
Hasilnya adalah satu gambar dikurangi gambar lainnya. Gambar mana yang dikurangkan dari gambar lainnya bergantung pada apakah 'Minus_Src' atau 'Minus_Dst' yang dipakai. Secara khusus 'Minus_Dst' berarti 'kurangi gambar tujuan', atau bila diterapkan pada perintah "magick composite".... Rumus.. 'Minus_Dst' adalah _Src_ - _Dest_ dan 'Minus_Src' adalah _Dest_ - _Src_ Karena urutan gambar yang lazim didefinisikan dalam komposisi gambar dan pada perintah "magick composite, metode aslinya 'Minus berarti...
**{_Source_} Minus {_background_}**
****
Artinya, nama metode aslinya "Minus' adalah sinonim "Minus_Dst" yang berarti "kurangi gambar tujuan". Ini juga operator yang dipakai untuk membuat bagan gradien yang ditampilkan. Sebagai contoh, kurangkan sebuah lingkaran dari hasil akhir operasi 'Plus' sebelumnya di atas. |
magick composite compose_plus_RGB.png -compose minus_dst compose_R.png \
compose_minus.png
![[IM Output]](../static/img/compose/compose_minus.png)
Perhatikan cara kanal alpha ditangani, yang sama dengan semua operator matematis lain kecuali 'Plus'. Lihat Komposisi matematis dan pencampuran alpha. Penanganan ini bisa diubah dengan memakai flag kanal 'Sync' khusus. Rinciannya lihat Matematika kanal gambar di bawah. Metode compose 'Linear Burn' juga bisa dipakai untuk pengurangan warna, tetapi cara kerjanya menuntut pengguna menegasikan dulu gambar yang akan dikurangkan. Lihat Metode compose Linear Burn untuk rinciannya. | Sebelum IM v6.6.8-5 hanya metode asli 'Minus' yang tersedia (setara dengan 'Minus_Dst' yang lebih baru).
![[IM Output]](../static/img/compose/gradient_op_modulusadd.png)
ModulusAdd
'ModulusAdd' sangat mirip 'Plus', hanya saja bila hasilnya melampaui putih, nilainya berputar (modulus) kembali ke hitam. Misalnya, bila kita menjumlahkan dua gradien grayscale, warna-warna paling cerahnya akan berputar membentuk gradien kedua. |
magick -size 60x60 gradient: gradient.png
magick composite gradient.png gradient.png -compose ModulusAdd compose_add.png
![[IM Output]](../static/img/compose/compose_add.png)
Komposisi bertipe modulus ini bisa dipakai untuk menghasilkan gradien yang sangat menarik seperti berikut. |
magick composite gradient.png \( gradient.png -rotate -90 \) \
-compose ModulusAdd gradient_diagonal.png
![[IM Output]](../static/img/compose/gradient_diagonal.png)
Dan penjumlahan modulus berkali-kali bisa membuat gradien berulang bergaya kerai venetian. |
magick gradient.png \( +clone +clone +clone +clone \) \
-background gray50 -compose ModulusAdd -flatten gradient_venetian.png
![[IM Output]](../static/img/compose/gradient_venetian.png)
Yang menghasilkan gradien berulang 5 kali. Perhatikan bagaimana saya memakai latar belakang 'gray50' untuk 'menggulirkan' gradien maju setengah siklus modulus. ![[IM Output]](../static/img/compose/gradient_op_modulussubtract.png)
ModulusSubtract
Operator 'ModulusSubtract' sama dengan 'Minus', hanya saja pengurangannya bersifat modulus. Mengurangkan 'white' dari 'gray' akan menghasilkan 'gray' semula, bukan hitam, sebab nilainya berputar kembali. Efek sampingnya, sebagian area bisa menjadi putih alih-alih hitam, dengan cara yang tampak tak terkendali. |
magick composite -compose subtract compose_plus_RGB.png compose_R.png \
compose_subtract.png
![[IM Output]](../static/img/compose/compose_subtract.png)
Melakukan 'ModulusAdd' dengan gambar yang dinegasikan akan menghasilkan hal yang sama. ![[IM Output]](../static/img/compose/gradient_op_difference.png)
Difference (perbandingan gambar, dan negasi selektif)
Gambar hasilnya adalah selisih mutlak nilai warnanya. Rumusnya: abs(_Src_ - _Dest_) Selisih 'black' dan 'white' menghasilkan nilai maksimum, yaitu putih, sedangkan warna yang sama akan menghasilkan hitam. Pada dasarnya ini bentuk sederhana perbandingan gambar. Pemakaian metode composite ini yang lebih umum adalah membandingkan dua gambar berukuran sama untuk melihat perbedaannya, bahkan menghitung persentase perbedaan itu. Operator ini biasanya dipakai untuk menghasilkan gambar selisih perbandingan. Operator ini juga bisa dipakai untuk menegasikan gambar secara selektif. Menimpakan hitam tidak berpengaruh pada latar belakang, sedangkan menimpakan putih akan menegasikan warna gambar di posisi itu. Dengan kata lain, operator ini (dan juga yang berikutnya) menyediakan operator negasi yang dipetakan lewat gambar. Sebagai contoh, mari kita negasikan separuh gambar rose. |
magick -size 2x1 pattern:gray50 -scale 70x50\! black_n_white.gif
magick composite black_n_white.gif rose: \
-gravity center -compose difference compose_negate.gif
Exclusion (selisih gambar tanpa memperhitungkan abu-abu)
Rumusnya: _Src_ + _Dest_ - 2*_Src_ *_Dest_ Ini semacam selisih yang dirata-ratakan. Putih di atas putih menghasilkan hitam (tanpa selisih), begitu pula hitam di atas hitam. Namun abu-abu di atas abu-abu menghasilkan abu-abu. Putih dan hitam tentu tetap menghasilkan putih (selisih maksimum). Cara lain memandangnya: area gambar yang terang menyebabkan pembalikan pada layer satunya. Area yang sangat gelap tidak mengubah apa pun. Dengan cara ini metode Exclusion sama dengan 'Difference' (lihat sebelumnya). Salah satu kegunaan operator ini adalah mengalikan 'gradien berbias' seperti yang dipakai untuk peta displacement. Gradien semacam itu menganggap nilai abu-abu 50% sebagai 'nol', warna yang lebih gelap mewakili nilai 'negatif', dan warna yang lebih terang mewakili nilai 'positif', dengan rentang nilai -1 sampai +1. Rinciannya lihat Mengalikan gradien berbias. Kegunaan lain metode compose ini, yang dikirimkan Joe Fry, adalah cara menggabungkan beberapa gambar selisih sekaligus. Gambar akhirnya memperlihatkan perubahan pada semua gambar, bukan hanya antara dua gambar. Jadi, bila ada gambar A, B, dan C, mula-mula hasilkan gambar selisih untuk A, B dan B, C lalu terapkan exclusion pada kedua hasil itu sehingga didapat satu gambar yang memperlihatkan bagaimana ketiga gambar berubah. Metode ini juga berkaitan erat dengan cara operator pencampuran komposisi Xor menangani nilai transparansi alpha.
![[IM Output]](../static/img/compose/gradient_op_lighten.png)
Lighten dan Darken (memilih nilai maksimum/minimum)
| Bandingkan nilai warna gambar sumber dan gambar tujuan, lalu ambil nilai yang lebih terang atau lebih gelap sesuai metodenya. Rumus Lighten adalah: | If _Src_ > _Dest_ |
then _Src_ |
|---|---|---|
else _Dest_ |
||
| Untuk yang lebih gelap, cukup balik perbandingannya. |
Salah satu kegunaan 'Lighten' adalah mengomposisikan versi ter-blur dari gambar asli sehingga 'sorotan' pada gambar asli mendapat cahaya lembut di sekelilingnya.
magick flower_sm.jpg \( +clone -blur 0x3 \) \
-compose Lighten -composite flower_softglow.jpg
Lihat Blur yang dilembutkan untuk cara yang lebih baik (memakai 'teknik blur yang dipadukan') dalam mencapai hasil serupa.
Operator ini bekerja dengan membandingkan dan memilih nilai tiap kanal RGB, sehingga bisa menimbulkan sedikit distorsi warna, terutama saat berurusan dengan warna primer gambar. Sebagai contoh, di sini saya membuat gambar gradien merah dan biru, lalu memakai lighten untuk mengomposisikan keduanya.
magick -size 100x100 gradient:red-black -rotate 90 red_gradient.png
magick -size 100x100 gradient:blue-black blue_gradient.png
magick red_gradient.png blue_gradient.png \
-compose Lighten -composite lighten_by_value.png
Karena kanal biru bernilai nol pada gambar gradien merah, dan sebaliknya, sementara komposisi 'Lighten' bekerja berdasarkan nilai warna, hasilnya hanyalah penggabungan sederhana gambar merah dan biru sehingga terbentuk gambar gradien merah-biru. Jadi perintah di atas setara dengan komposisi penyalinan kanal yang sederhana. Salah satu cara mencegah distorsi warna adalah membatasi operator agar hanya menyesuaikan kanal 'Lightness' gambar memakai ruang warna HSL. Meski cara itu tidak selalu memberi hasil bagus. | _Perhatikan bahwa "Gimp", "Photoshop", "PhotoLine", "Paint Shop Pro", semuanya membandingkan kanal secara langsung persis seperti IM.
"Photo-Paint" membandingkan gambar berdasarkan intensitas warna dan memakainya untuk memutuskan dari gambar mana warna diambil, sehingga keutuhan warna terjaga. Lihat metode Lighten-Intensity di bawah.
Sebaliknya "Picture Publisher" dan "PhotoImpact" memakai kecerahan warna (sebagaimana didefinisikan ruang warna HSL) untuk perbandingannya.
Untuk perbandingan selisih grayscale dari berbagai ruang warna, lihat contoh Grayscale memakai ruang warna.
Lighten-Intensity dan Darken-Intensity (memilih warna berdasarkan intensitas)
Sejak IM v6.6.9-5 ditambahkan varian 'Lighten_Intensity' dan 'Darken_Intensity'. Varian ini membandingkan intensitas piksel pada kedua gambar, lalu memilih nilai piksel berdasarkan hasil perbandingan itu. Artinya tidak ada warna baru yang ditambahkan ke gambar, meski gambar barunya akan berupa campuran warna dari kedua gambar. Urutan gambar juga tidak berpengaruh, kecuali bahwa ukuran dan meta-data berasal dari gambar tujuan. Sebagai contoh, di sini kita ambil yang lebih terang dari gambar-gambar bergradien merah dan biru.
magick red_gradient.png blue_gradient.png \
-compose Lighten_Intensity -composite lighten_intensity.png
| Seperti terlihat, piksel utuh diambil dari gambar yang terpilih. Tidak ada pencampuran kanal warna. Namun karena intensitas biru dianggap lebih gelap daripada merah, hanya merah yang paling gelap yang tergantikan oleh gambar gradien biru yang lebih gelap. | Metode komposisi ini tidak didefinisikan olehSVG composition guide (2009) yang dipakai semua metode komposisi yang sudah kita lihat sejauh ini. Karena itu tidak ada definisi yang sesungguhnya tentang bagaimana kanal alpha semestinya memengaruhi perbandingan piksel. |
|---|---|
Terkait alpha , metode ini punya dua mode kerja. Bila flag 'Sync' khusus pada pengaturan (setting) "-channel" aktif (bawaannya demikian), perbandingan didasarkan pada intensitas warna yang dibobot oleh kanal alpha (transparansi). Artinya, 'putih setengah transparan' punya intensitas terbobot yang kira-kira sama dengan warna 'abu-abu tengah yang opak'.
Artinya, bila hal lain setara, 'Lighten_Intensity' akan membentuk 'gabungan' dari gambar-gambar berbentuk, sedangkan 'Darken_Intensity' membentuk 'irisan' dari gambar-gambar berbentuk (setidaknya yang tidak hitam). Ini BUKAN keadaan ideal dan mungkin berubah, tetapi lebih baik daripada tanpa masukan alpha sama sekali.
Mode kerja kedua dipakai bila flag kanal 'Sync' dimatikan (lihat Memakai flag 'Sync' di bawah). Misalnya dengan memakai "-channel All". Pemilihan piksel lalu didasarkan murni pada intensitas warna, tanpa pengaruh pembobotan alpha. Namun nilai kanal alpha akan ikut disalin bersama data piksel yang benar-benar terpilih. Untuk gambar tanpa transparansi, hasilnya sama saja pada kedua mode. Mode kedua ini juga memungkinkan pemakaian "-channel" yang lebih terbatas untuk menentukan kanal mana saja yang boleh disalin dari gambar sumber ke gambar tujuan bila terpilih. Meski begitu, pemilihannya tetap murni berdasarkan intensitas warna tanpa bobot. Dengan begitu 'mask bentuk' dari hasil pemilihan itu jadi lebih mudah dibuat, berdasarkan intensitas warna pada kedua gambar. Kita membandingkan gambar berdasarkan intensitas warna, tetapi yang dipedulikan hanyalah nilai kanal alpha pada hasilnya. Untuk membuat 'mask', satu gambar dibuat sepenuhnya transparan (tetapi tetap berwarna) memakai Alpha Transparent, dan gambar satunya dibuat sepenuhnya opak (bawaannya demikian). Pada akhirnya Alpha Extract bisa dipakai untuk mendapatkan mask yang menunjukkan gambar mana yang warnanya lebih terang pada tiap posisi piksel. |
magick red_gradient.png -alpha transparent blue_gradient.png \
-compose Lighten_Intensity -composite \
-alpha extract lighten_intensity_mask.png
![[IM Output]](../static/img/compose/lighten_intensity_mask.png)
Perhatikan bahwa nilai alpha pada kedua gambar tidak harus sekadar 'on' dan 'off', melainkan bisa disetel ke suatu nilai 'acuan'. Artinya, kita bisa punya serangkaian gambar yang tiap gambarnya bernilai kanal alpha berbeda. Metode compose ini lalu bisa dipakai untuk membandingkan semua gambar sekaligus, dan mendapatkan peta gambar mana yang memuat piksel paling terang (atau paling gelap) pada tiap lokasi di dalam gambar. Dengan kata lain, metode komposisi berbasis intensitas bisa dipakai semacam operator 'pemilihan' atau 'perbandingan' untuk daftar gambar yang panjang. | Ditambahkan sejak IM v6.6.9-5. Namun definisi formal untuk metode ini belum ditemukan. Karena itu implementasi yang ada sekarang digolongkansangat eksperimental , dan bisa berubah menurut saran pengguna. Meski begitu gagasan dasarnya kokoh.
Alternatif intensitas untuk versi IM lama
Bila metode 'Lighten_Intensity' tidak tersedia pada versi ImageMagick yang Anda pasang, versi murni yang hanya menyangkut warna bisa dibuat ulang: terapkan 'Lighten' pada salinan grayscale kedua gambar, lalu bandingkan hasilnya dengan salinan grayscale itu untuk membuat mask pemilihan yang diterapkan pada gambar aslinya. Ini tidak mudah, dan berikut salah satu solusinya... |
magick red_gradient.png blue_gradient.png \
\( -clone 0--1 -colorspace Gray \
\( -clone 0--1 -compose Lighten -composite \) \
-delete 1 -compose Difference -composite -threshold 0 \
\) -compose Src -composite intensity_lightened.png
![[IM Output]](../static/img/compose/intensity_lightened.png)
Proses ini memang cukup mengerikan, tetapi seperti terlihat, ia bekerja. Untuk mendapatkan versi 'Darken_Intensity', ganti "-delete 1" dengan "-delete 0", ATAU ganti "-compose Lighten" dengan "-compose Darken". Keduanya sama-sama berhasil.
Operasi ekuivalen teori himpunan
Sejumlah metode matematis di atas juga dipakai untuk melakukan operasi teori himpunan atau boolean pada bentuk. Metode compose 'Lighten'bisa dipakai untuk mencari 'Union ' (boolean 'Or ') dari dua (atau lebih) kelompok (himpunan) piksel.
magick -size 64x64 xc: -draw 'circle 22,32 5,32' -negate circle_left.gif
magick -size 64x64 xc: -draw 'circle 41,32 58,32' -negate circle_right.gif
magick circle_left.gif circle_right.gif \
-compose Lighten -composite circle_union.gif
Metode compose 'Darken' menghasilkan 'Intersection ' (boolean 'And ') dari pikselnya.
magick circle_left.gif circle_right.gif \
-compose Darken -composite circle_intersection.gif
Metode compose 'Difference' menghasilkan 'Exclusive OR ', (boolean 'XOR ') dari kedua himpunan.
magick circle_left.gif circle_right.gif \
-compose Difference -composite circle_disjunction.gif
Metode 'Exclusion' juga bisa dipakai untuk keperluan ini, meski penanganan nilai grayscale (non-boolean)-nya berbeda. Namun metode itulah yang dipakai untuk pencampuran alpha Duff-Porter 'XOR'. Terakhir, 'Minus' bisa dipakai untuk menghasilkan 'Relative Complement ' dari dua himpunan piksel.
magick circle_left.gif circle_right.gif \
-compose Minus_Src -composite circle_complement.gif
Perhatikan bahwa "-clamp" mungkin diperlukan pada ImageMagick versi HDRI saat menerapkan metode komposisi 'himpunan' atau 'boolean' di atas, untuk mencegah munculnya nilai di luar rentang.
Komposisi matematis dan pencampuran alpha
Metode komposisi matematis di atas bisa dipakai untuk melakukan operasi matematis pada gambar. Namun ada satu peringatan besar. Kemungkinan besar hasilnya tidak sesuai keinginan pada gambar yang memuat transparansi. Secara bawaan hampir semua komposisi matematis di atas mengikuti konvensi yang ditetapkan spesifikasi SVG. SVG composition guide (2009). Artinya, bila komposisi matematis dicoba pada gambar berkanal alpha (yaitu punya semacam transparansi), yang didapat bisa jadi bukan komposisi matematis sejati, melainkan komposisi bentuk 'campuran'. Sebagai contoh, di sini saya membuat gambar gradien dengan sedikit transparansi di sekelilingnya. Lalu keduanya saya 'Multiply' bersama.
magick -size 64x64 xc:none -draw 'rectangle 20,0 43,63' \
gradient: -compose In -composite alpha_src.png
magick alpha_src.png -transverse alpha_dst.png
magick alpha_dst.png alpha_src.png \
-compose Multiply -composite alpha_result.png
Perhatikan bahwa bagian gambar yang tidak bertindihan begitu saja disertakan ke gambar hasil, apa adanya, tanpa modifikasi. Jadi, kedua gambar itu 'dicampur'. Lebih buruk lagi, bila gambar memuat transparansi parsial, nilai warnanya akan 'dibobot' oleh kanal alpha. Hal ini berguna untuk komposisi Plus, yang memberi 'penjumlahan warna terbobot' atau operasi Blend, tetapi sampai sekarang saya belum menemukan kegunaan 'perkalian warna terbobot' pada gambar. Ada yang tahu? Bila yang dikerjakan adalah matematika gambar, perilaku ini umumnya tidak diinginkan. Meski begitu, saat mengerjakan matematika semacam itu biasanya memang tidak ada kanal alpha, sehingga masalah 'pencampuran alpha' dan 'warna terbobot' jarang muncul. | _Komposisi Plus adalah satu-satunya metode compose matematis yang tidak melakukan 'pencampuran alpha over'. Sebagai gantinya, sesuai spesifikasi SVG, ia menjumlahkan tiap kanal secara terpisah. Namun kanal warnanya tetap dibobot oleh nilai alpha sebelum dijumlahkan; yang berbeda hanyalah penanganan nilai alpha itu sendiri (pencampurannya).
Ini penting untuk memberikan 'penjumlahan' yang benar pada bentuk ber-mask, seperti diperagakan di komposisi DstOut._
Matematika kanal gambar memakai komposisi gambar
Bila gambar yang dikenai metode compose matematis berupa gambar grayscale yang sepenuhnya opak, metode di atas bisa langsung dipakai tanpa masalah. Namun secara bawaan metode compose diterapkan ke semua kanal warna dengan pencampuran alpha, persis seperti yang terlihat di atas. Hal ini menyulitkan penerapan pada satu kanal tertentu saja, misalnya kanal alpha. Sebagai contoh, di sini saya me-'Multiply' dua gambar hitam yang memuat gradien transparan. Memakai pengaturan (setting) "-channel" bawaan.
magick -size 64x64 gradient:black-none alpha_grad_src.png
magick alpha_grad_src.png -transverse alpha_grad_dst.png
magick alpha_grad_dst.png alpha_grad_src.png \
-compose Multiply -composite alpha_grad_result.png
Perhatikan bahwa mengalikan 'Black' dengan 'Black' menghasilkan 'Black', jadi warnanya tidak berubah pada contoh ini. Hanya transparansi hasilnya yang berubah. Namun hasilnya jelas bukan perkalian nilai kanal alpha kedua gambar, sebab menurut definisi SVG transparansi parsialnya dicampur memakai metode 'over'. Secara matematis ini setara dengan komposisi 'Screen' pada kanal alpha, bukan perkalian.
Flag kanal Sync dan komposisi matematis
Sejak IM v6.6.1-6, metode compose matematis diubah agar menuruti flag 'Sync' pada pengaturan (setting) "-channel". Flag ini pada dasarnya berarti "selaraskan operasi kanal warna dan kanal alpha". Pengaturan "-channel" bawaannya adalah 'RGBK,Sync'. Jadi secara bawaan kanal warna dan alpha ditangani sebagaimana mestinya, 'selaras', sesuai spesifikasi SVG. Namun dengan membuang flag 'Sync', metode compose matematis berubah menjadi 'operator kanal' yang menerapkan fungsi matematisnya pada tiap kanal secara terpisah. |
magick alpha_grad_dst.png alpha_grad_src.png \
-channel RGBA -compose Multiply -composite alpha_grad_nosync.png
![[IM Output]](../static/img/compose/alpha_grad_nosync.png)
Dan inilah perkalian kanal alpha yang benar.
Semua ini hanya berlaku untuk metode compose matematis (sebagaimana dirinci di atas) serta metode compose khusus 'Mathematics' (lihat di bawah). Ini tidak berlaku untuk metode komposisi lain, seperti metode komposisi pencahayaan (lihat berikutnya). Setidaknya belum. Flag 'Sync' juga memengaruhi cara metode komposisi Lighten/Darken berdasarkan intensitas (bukan metode komposisi yang didefinisikan SVG) menangani kanal alpha (di atas). Keterangan lebih lanjut tentang pemakaian matematika gambar bisa dilihat di Matematika pada gradien. Lebih khusus lagi, contoh-contoh di situ membahas pemakaian komposisi matematis untuk menghasilkan gambar gradien berbias , yang sedikit lebih rumit.
Metode komposisi pencahayaan -- Light, Dodge, Burn
Metode-metode ini memodifikasi warna gambar dengan cara yang sangat rumit dan biasanya dipakai untuk menyesuaikan shade atau intensitas gambar sehingga sebagian area jadi lebih cerah dan sebagian lain lebih gelap.
- Metode komposisi pencahayaan terbagi menjadi tiga subkategori operator yang berkaitan.
- 'Burn ', yang umumnya menggelapkan gambar.
- 'Dodge ', yang umumnya mencerahkan gambar.
- 'Light ', yang menggelapkan sekaligus mencerahkan gambar berdasarkan gelap dan terangnya salah satu gambar.
'Multiply' (menggelapkan warna) umumnya dianggap operasi komposisi 'Burn ' murni, sedangkan 'Screen' (mencerahkan) adalah operator komposisi 'Dodge '. Umumnya salah satu gambar berupa pola warna atau foto, sementara yang lain gambar grayscale yang dipakai untuk mencerahkan atau menggelapkan gambar itu sebagaimana mestinya. Gambar mana yang seharusnya berwarna dan mana yang grayscale masih bisa diperdebatkan, dan bergantung pada bagaimana metodenya diimplementasikan. Tidak ada standar dalam hal ini, jadi sebaiknya berhati-hati dan banyak bereksperimen. Akibat tidak adanya standar untuk operator-operator ini, banyak pengguna tidak memahaminya atau salah memakainya. Saya pun belum menemukan panduan pemakaian metode compose ini secara benar; panduan semacam itu praktis tidak ada, jadi saya harus berusaha sebisanya lewat contoh-contoh di bawah. ![[IM Output]](../static/img/compose/gradient_op_overlay.png)
Overlay (menambahkan warna ke objek grayscale)
Metode compose ini sangat tidak biasa karena dirancang untuk sekaligus me-'Multiply' (menggelapkan) dan me-'Screen' (mencerahkan) sebuah gambar pada saat yang sama. Metode mana yang diterapkan pada piksel tertentu ditentukan oleh nilai gambar tujuan, yang bisa dianggap sebagai 'mask pencahayaan'. Karena itu gambar tujuan umumnya berupa gambar grayscale yang diberi warna. Rumusnya: |
If _Dest_ <= 0.5 |
then | 2*_Src_ *_Dest_ |
|---|---|---|---|
| else | 1-2*(1-_Src_)*(1-_Dest_) |
||
| Hasilnya adalah metode compose khusus yang mempertahankan putih dan hitam murni (highlight) yang ada pada gambar tujuan, sekaligus mewarnai abu-abu nada tengah gambar itu dengan warna yang ada pada gambar overlay. Jadi, bila gambar tujuannya grayscale, operator ini akan mewarnai latar itu memakai gambar sumber sambil mempertahankan efek bayangan dan highlight yang ada pada gambar tujuan. |
magick -size 64x64 gradient:yellow-blue gradient_yell-blue.jpg
magick -size 64x64 gradient: -rotate 90 gradient_grey.jpg
magick gradient_grey.jpg gradient_yell-blue.jpg \
-compose Overlay -composite compose_overlay_gradients.jpg
Seperti terlihat, abu-abu nada tengah pada gambar gradien diwarnai dengan warna dari gambar yang diberikan. Inilah pemakaian normal metode komposisi ini, yaitu menambahkan warna pada mask pencahayaan grayscale. Berbeda dengan 'Multiply' atau 'Screen', metode ini tidak asosiatif.
magick gradient_yell-blue.jpg gradient_grey.jpg \
-compose Overlay -composite compose_overlay_gradients2.jpg
'Menimpakan warna' pada gambar bersorotan abu-abu inilah yang membuat metode ini pas untuk menambahkan warna pada keluaran operator "-shade". Namun perlu sangat berhati-hati agar operator itu menghasilkan abu-abu nada tengah yang sempurna, supaya area tanpa sorotan pun terwarnai dengan benar. Rinciannya lihat Sorotan overlay shade. Sebagai contoh, sebuah lingkaran bisa kita shade untuk menghasilkan efek tiga dimensi, lalu hasilnya kita warnai dengan gambar aslinya untuk memulihkan warna semula.
magick -size 64x64 xc:dodgerblue \
-draw 'fill skyblue circle 32,32 7,27' circle_blue.jpg
magick circle_blue.jpg -shade 120x30 -auto-level circle_shaded.jpg
magick circle_shaded.jpg circle_blue.jpg \
-compose Overlay -composite circle_shaded_tinted.jpg
Contoh pemakaian metode 'Overlay' yang lebih praktis bisa dilihat pada gambar "levels_3d" di halaman Contoh pembangkit latar belakang. Masalah terbesar metode compose ini adalah transparansi pada gambar mana pun tidak dipertahankan. Artinya, apa yang terlihat pada salah satu gambar akan terlihat pada hasilnya. Operator ini biasanya dipakai pada gambar tanpa transparansi, sehingga umumnya perlu langkah tambahan untuk memulihkan transparansi gambar tujuan atau latar belakang. Salah satu cara sederhana mempertahankan transparansi adalah cukup matikan kanal alpha gambar tujuan sehingga kanal itu tidak bisa diakses. Setelah komposisinya selesai, kanal tersebut tinggal dinyalakan lagi. Contohnya diberikan di Gambar bentuk ber-shade. Cara lain adalah menyimpan 'mask', atau salinan gambar aslinya, lalu memakai mask atau gambar itu untuk memulihkan transparansi. Contoh caranya tersedia di Pewarnaan overlay. Atau pada contoh yang lebih rumit, Pembuatan logo 3-D yang lebih baik. |
Sampai IM versi 6.1.6 metode compose 'Overlay' rusak: hasilnya hanya hitam atau putih murni (kemungkinan besar hanya hitam murni). Akibatnya sebagian besar pengguna IM nyaris tak berkesempatan memahami operator ini. Sekarang setelah diperbaiki, pengguna akhirnya bisa memanfaatkan metode ini dengan baik. |
|---|---|
![]() |
Hard_Light (menambahkan tekstur atau highlight/bayangan ke gambar)
Ini sama dengan 'Overlay' kecuali gambar sumber dan gambar tujuannya ditukar. Bandingkan gambar gradien kedua operator ini dan akan terlihat bahwa gradiennya tertranspos secara diagonal, memperlihatkan pertukaran masukan sumber dan tujuan. Rumusnya: |
If _Src_ <= 0.5 |
then | 2*_Src_ *_Dest_ |
|---|---|---|---|
| else | 1-2*(1-_Src_)*(1-_Dest_) |
||
Jadi, kalau 'Overlay' bisa menambahkan warna ke objek berbayang grayscale, 'Hard_Light' menambahkan efek pencahayaan grayscale ke sebuah gambar. Metode mana yang dipakai bergantung pada cara Anda memandang penambahan efek cahaya pada gambar. Perbedaan pentingnya terletak pada gambar mana yang menjadi gambar 'tujuan', supaya meta-data gambar tetap terjaga, atau bahkan mematikan kanal alpha untuk sementara agar meta-data itu terjaga selama operasi berlangsung. Sebagai contoh, di sini saya membangkitkan 'efek pencahayaan' memakai operasi "-raise" yang di-blur pada gambar abu-abu murni seukuran gambar aslinya. Hasilnya lalu dikomposisikan memakai 'Hard_Light' untuk menambahkan efek cahaya itu ke gambar. |
magick rose: -fill gray50 -colorize 100% \
-raise 4 -normalize -blur 0x4 lighting_effect.png
magick rose: lighting_effect.png \
-compose hardlight -composite compose_hardlight.png
Metode ini memudahkan penambahan highlight (seperti pantulan cahaya) maupun efek bayangan gelap ke gambar yang sudah ada, cukup dengan satu operasi. Berikut contoh penambahan 'tekstur' cahaya secara langsung ke sebuah gambar. |
magick rose: \( granite: -blur 0x.5 -normalize \) \
-compose hardlight -composite compose_texture.png
![[IM Output]](../static/img/compose/compose_texture.png)
Perhatikan betapa kuatnya tekstur yang dihasilkan, nyaris menenggelamkan gambar aslinya dengan area terang dan gelap. Inilah kelemahan memakai 'Hard_Light'. Untuk meredamnya, kontras tekstur yang ditimpakan sebaiknya diredupkan. |
magick rose: \
\( granite: -blur 0x.5 -normalize +level 30,70% \) \
-compose hardlight -composite compose_texture_muted.png
![[IM Output]](../static/img/compose/compose_texture_muted.png)
Metode compose pencahayaan lain, seperti 'Soft_Light', mungkin juga memberi hasil yang lebih baik secara lebih langsung. Untuk contoh yang lebih bagus lihat Menambahkan tekstur ke sebuah gambar di Buku resep konversi foto. Contoh nyata pemakaian pembayangan 'Hard_Light' ada di forum diskusi IM, tentang pembuatan sampul DVD 3D dari gambar sumber yang datar. Ingat bahwa pembayangan 'Overlay' dan 'Hard_Light' pada dasarnya metode komposisi yang sama. Bedanya hanya urutan gambarnya. ![[IM Output]](../static/img/compose/gradient_op_softlight.png)
Soft_Light (pencahayaan gambar yang lebih lembut)
Metode compose 'Soft_Light ' juga menambahkan highlight dan bayangan ke gambar berwarna yang sudah ada. Namun warna gambar tujuan dimodifikasi sehingga kontrasnya lebih lembut dan gradien efek cahayanya lebih halus. Kalau 'gambar peta grayscale' di sebelah kanan diperhatikan baik-baik, tidak akan terlihat diskontinuitas yang tajam, padahal sebenarnya ada dua. (Lihat juga 'Pegtop_Light' berikutnya). Metode ini lebih dekat ke komposisi 'Overlay' daripada ke 'Hard_Light', jadi gambar tujuannya biasanya adalah mask pencahayaan grayscale. Entah ini disengaja atau tidak, yang jelas hal itu membedakannya dari 'Hard_Light', dan berarti lebih baik mengomposisikan gambar utama ke atas gambar pembayangan, bukan sebaliknya. :-( | _PERINGATAN: Efek pencahayaan ini didefinisikan lebih mirip 'Overlay' daripada 'Hardlight'. Namun gambar mana yang seharusnya memuat gambar pencahayaan grayscale masih belum jelas. Memakai sumber bisa menghasilkan hitam dan putih penuh, sedangkan memakai tujuan tidak bisa menghasilkan ekstrem itu.
Kalau ada yang punya rujukan yang pasti, tolong beri tahu saya._
Sebagai contoh, berikut pemetaan tekstur 'Soft_Light'. |
magick rose: \( granite: -blur 0x.5 -normalize \) \
-compose softlight -composite compose_softlight.jpg
![[IM Output]](../static/img/compose/compose_softlight.jpg)
Seperti terlihat, bahkan dengan gambar "granite:" yang ternormalisasi, perubahan warnanya lebih lembut dan tidak seintens 'Hard_Light', atau bahkan 'Overlay'. Namun bayangan hitam murni atau highlight putih murni juga tidak akan pernah ditambahkan ke gambar hasilnya. Pada dasarnya 'Soft_Light' memberi efek tekstur yang lebih lembut, yang mempertahankan pewarnaan asli gambar sumber. Di sini saya perlihatkan perubahan warna yang didapat dari overlay warna hitam murni, putih murni, dan abu-abu sempurna. |
magick -size 1x3 gradient: -sample 70x46\! grayscale_3.gif
magick composite grayscale_3.gif rose: -compose softlight compose_softlight_2.gif
![[IM Output]](../static/img/compose/grayscale_3.gif)
![[IM Output]](../static/img/compose/compose_softlight_2.gif)
Kalau ini dikerjakan dengan 'Hard_Light', sisi-sisi gambarnya akan menjadi hitam dan putih murni, bukan sekadar penggelapan atau pencerahan 50%. | _Sebelum IM v6.5.4-3, 'Soft_Light' tidak bekerja sebagaimana diharapkan: overlay gambar berbayang non-abu-abu apa pun justru mencerahkan. Saya sendiri memastikan bahwa implementasinya sudah benar menurut spesifikasi SVG 2004 yang resmi.
Sayangnya yang keliru justru spesifikasinya, bukan implementasinya. Hal itu diperbaiki pada spesifikasi SVG Maret 2009. Karena itu, pada IM v6.5.4-3 dan sesudahnya operator ini kini bekerja seperti yang diharapkan dari sebuah operator pembayangan cahaya._
![[IM Output]](../static/img/compose/gradient_op_pegtoplight.png)
Pegtop_Light (variasi soft light yang lebih halus)
Meski 'Soft_Light' jauh lebih halus daripada 'Hard_Light' maupun 'Overlay', metode itu sebenarnya masih bertumpu pada dua fungsi terpisah yang disambung. Metode 'Pegtop_Light ' memberi hasil yang nyaris identik dengan 'Soft_Light' tetapi memakai satu fungsi mulus tanpa diskontinuitas sama sekali, bahkan tanpa dua diskontinuitas kecil yang dipakai 'Soft_Light'. Karena itu metode ini sebenarnya jauh lebih sederhana dan lebih cepat. Rumusnya: 2*_Src_ *_Dest_ + _Src_ 2*(1 - 2*_Dest_) Untuk detailnya lihat halaman Pegtop SoftLight Alternative. |
PERINGATAN: Efek pencahayaan ini didefinisikan lebih mirip 'Overlay' daripada 'Hard Light'. |
|---|---|
Metode compose 'Pegtop_Light' ditambahkan pada IM versi 6.5.4-3. |
|
| --- | --- |
![]() |
Linear_Light (skema pembayangan yang sangat sederhana tetapi kuat)
Metode pembayangan gambar lain yang sangat peka terhadap gambar pembayangan yang ditimpakan. Zona batas hitam dan putih murninya jauh lebih luas. Rumusnya: 2*_Src_ + _Dest_ - 1 Meski merupakan fungsi kontinu, metode ini sebenarnya bisa dianggap gabungan 'LinearDodge' (setara dengan komposisi 'Plus') dan 'LinearBurn' (yaitu 'plus' ber-offset yang kadang dipakai untuk mengurangkan gambar). |
Sebelum IM v6.5.4-3, 'Linear_Light' terbukti diimplementasikan secara keliru. |
|---|---|
![]() |
Vivid_Light (varian dari Linear Light)
Metode 'Vivid_Light ' sama dengan yang diimplementasikan di Photoshop 7, dan pada dasarnya merupakan penyempurnaan kecil atas metode 'Linear_Light'. Yang dilakukannya adalah menghindari pembayangan pada bagian ekstrem, agar warna primer yang kuat pada gambar tampak lebih 'vivid'. Rumusnya: |
If _Src_ <= 0.5 |
then | 1-(1-_Dest_)/(2*_Src_) |
|---|---|---|---|
| else | _Dest_ /(2*(1-_Src_)) |
||
Cara lain memandangnya: campuran 'Color_Dodge' dan 'Color_Burn' untuk bagian ekstrem, tetapi 'Linear_Light' untuk nada tengah. |
Metode compose 'Vivid_Light' ditambahkan pada IM versi 6.5.4-3. |
||
| --- | --- | ||
![]() |
Pin_Light
Fungsi 'Pin_Light ' dirancang untuk lebih menjaga nada tengah gambar tujuan, dengan membatasi pembayangannya pada bagian overlay yang lebih terang dan lebih gelap. Konon ini menyimulasikan perubahan cahaya yang keras dan tajam dari sumber cahaya lubang jarum yang mungil, bukan dari sumber cahaya yang lebih baur dan 'lembut'. Rumusnya: |
If | _Dest_ < 2*_Src_ -1 |
then | 2*_Src_ - 1 |
|---|---|---|---|---|
| elif | _Dest_ > 2*_Src_ |
then | _Dest_ |
|
| else | 2*_Src_ |
|||
Metode compose 'Pin_Light' ditambahkan pada IM versi 6.5.4-3. |
||||
| --- | --- | |||
![]() |
Linear_Dodge (compose 'Add' ala Photoshop)
Bandingkan gambar gradien 'Linear Dodge ' (kanan) dengan gambar gradien 'Plus', dan akan terlihat bahwa untuk dua gambar opak keduanya memberi efek yang persis sama. Rumusnya tentu saja: Src + Dest Artinya, untuk gambar tanpa transparansi, kedua perintah ini dengan gambar 'A' dan 'B menghasilkan gambar hasil 'R' yang sama...
magick A B -compose Plus -composite R
magick A B -compose LinearDodge -composite R
| Metode ini setara dengan mode komposisi Photoshop bernama sama. Satu-satunya perbedaan nyata antara kedua metode itu terletak pada cara keduanya menangani gambar yang memuat warna semitransparan. Pada dasarnya komposisi Linear_Dodge memakai alpha-blending 'Over', sedangkan komposisi Plus memakai alpha-blending 'Plus". Untuk detailnya lihat Plus Blending. | Metode compose 'Linear_Dodge' ditambahkan pada IM versi 6.5.4-3. |
|---|---|
![]() |
Linear_Burn (metode 'Subtract' ala Photoshop)
Metode compose 'Linear Burn ' adalah komposisi 'Add Minus One', yang memberi hasil sama seperti jika semua gambar masukan dan keluaran metode compose 'Linear Dodge' atau 'Plus' dinegasikan. Rumusnya: _Src_ + _Dest_ - 1 Di Photoshop metode ini dikenal bukan hanya sebagai 'Linear Burn' tetapi juga 'Subtract'. Sebabnya, jika salah satu gambar masukan (misalnya gambar sumber) dinegasikan, gambar itu dikurangkan dari gambar yang lain. Sebagai contoh, inilah matematika yang dihasilkan ketika gambar sumber dinegasikan...
(1-_Src_) + _Dest_ - 1 ==> _Dest_ - _Src_
Artinya, tanpa transparansi, gambar 'A' bisa diambil lalu gambar 'B dikurangkan darinya untuk menghasilkan gambar hasil 'R' yang sama...
magick A B -compose minus_src -composite R
magick B A -compose minus_dst -composite R
magick A \( B -negate \) -compose linear_burn -composite R
magick B -negate A -compose linear_burn -composite R
Pada dasarnya gambar mana pun yang dinegasikan, itulah gambar yang akan dikurangkan 'Linear Burn' dari gambar yang lain. Tidak jadi soal apakah gambar itu gambar sumber atau gambar tujuan. Dalam beberapa hal, hal ini membuat metode compose tersebut lebih serbaguna. Sebagai contoh, di sini saya mengurangkan gambar lingkaran di sebelah kanan (yang saya negasikan) dari lingkaran di sebelah kiri.
magick circle_left.gif \( circle_right.gif -negate \) \
-compose LinearBurn -composite circle_subtract.gif
Metode komposisi ini juga berguna sebagai alternatif bagi metode mengurangkan banyak gambar dari satu gambar awal. Namun perhatikan bahwa 'Linear Burn' tidak bisa diterapkan langsung ke kanal alpha gambar, sedangkan metode compose matematis Minus bisa. |
Metode compose 'Linear_Burn' ditambahkan pada IM versi 6.5.4-3. |
|---|---|
![]() |
Color_Dodge (pembagian ala Photoshop)
Metode komposisi ini memakai gambar overlay sumber sebagai mask yang seolah melindungi gambar latar belakang dari "paparan cahaya" dalam jangka waktu lama. Bagian yang terpapar mask yang lebih terang dibuat lebih terang (atau di-dodge), sementara area hitam tidak berubah. Bayangkan sebuah benda diletakkan di atas foto dalam waktu yang sangat lama, sehingga bagian yang terpapar cahaya perlahan memutih seiring usia, sementara bagian yang tertutup tetap seperti semula. Overlay hitam murni tidak mengubah gambar, sedangkan overlay putih murni akan memutihkan semua warna latar belakang, kecuali warna yang tadinya hitam murni. Namun berbeda dari metode compose dodge 'Screen' (multiply terbalik) atau 'Linear_Dodge' (add), gambar tujuan yang hitam murni atau putih seluruhnya tetap tidak terpengaruh mask pencahayaan. Dengan kata lain, hanya area yang memuat abu-abu dan warna tidak murni yang terpengaruh. Rumusnya: _Dest_ / (1-_Src_) di sini perlu contoh dan pemakaian praktis Sebenarnya 'ColorDodge' dan kedua operator 'Divide' bisa memberi hasil yang sama. Hanya saja 'ColorDodge' menuntut gambar yang dipakai sebagai 'pembagi' dinegasikan lebih dulu lalu dipakai sebagai gambar 'sumber' bagi operator itu. Sebagai contoh, semua perintah berikut, yang mengoperasikan gambar 'N' (pembilang) dibagi 'D' (penyebut), menghasilkan gambar hasil 'R' yang sama... Dengan asumsi semua gambarnya berukuran sama.
magick N \( D -negate \) -compose ColorDodge -composite R
magick N D -compose DivideSrc -composite R
magick D N -compose DivideDst -composite R
Lihat 'Divide' untuk contoh bagaimana pembagian gambar dapat dipakai untuk menghilangkan gradien latar belakang. ![[IM Output]](../static/img/compose/gradient_op_colorburn.png)
Color_Burn
Ini kebalikan dari 'Color_Dodge', setara dengan membalik semua gambar masukan dan keluaran. Hasilnya, gambar latar belakang digelapkan oleh gambar mask yang gelap, sementara putih tidak menggelapkan apa pun. Namun berbeda dari metode compose burn 'Multiply' atau 'Linear_Burn', gambar tujuan yang hitam murni atau putih seluruhnya tetap tidak terpengaruh mask pencahayaan. Dengan kata lain, hanya area yang memuat abu-abu dan warna tidak murni yang terpengaruh. Rumusnya: 1 - ( (1-_Dest_) / _Src_) di sini perlu contoh dan pemakaian praktis Perintah ini setara dengan rangkaian rumus sebelumnya untuk mengimplementasikan pembagian gambar. Perhatikan negasi terakhir pada perintahnya.
magick N -negate D -compose ColorBurn -composite -negate R
Satu pemakaian 'Color_Burn' adalah membersihkan latar belakang bergradien gelap menjadi hitam murni. Mirip dengan 'Color_Dodge' yang bisa membagi latar belakang menjadi putih. |
Sebelum IM v6.5.4-3, 'Color_Burn' terbukti diimplementasikan secara keliru. |
|---|---|
Metode penyalinan kanal
Metode komposisi gambar ini dirancang untuk memindahkan informasi kanal gambar dari satu gambar ke gambar lain. Namun ada beberapa asumsi yang dibuat tentang gambar yang 'kanal'-nya disalin. Sebaiknya baca dulu bagian Ruang warna dan penamaan kanal dan Kanal warna untuk memahami bagaimana IM merepresentasikan kanal warna gambar di memori sebelum memakainya. Metode komposisi penyalinan kanal yang paling berguna adalah 'Copy_Opacity' (lihat di bawah). Inilah cara paling sederhana untuk mengganti (atau menambahkan) hanya kanal alpha sebuah gambar yang sudah ada, memakai gambar mask grayscale terpisah.
Copy_Opacity (menyetel transparansi dari mask grayscale)
Tujuan awal operator 'Copy_Opacity' adalah menyalin kanal transparansi gambar sumber ke gambar tujuan, untuk menentukan bagian mana dari gambar itu yang transparan. Pekerjaan ini lebih lazim dilakukan memakai operator Duff-Porter, yang memang dirancang khusus untuk mengomposisikan gambar bertransparansi alpha. Sebagai contoh, jika gambar tujuannya opak penuh, yang lazim pada pemakaian operator ini, operator 'Dst_In', atau bahkan 'Dst_ATop', akan memberi hasil yang sama. Lalu kenapa operator 'Copy_Opacity' begitu penting kalau ada alternatifnya? Jawabannya terletak pada cara operator ini menangani satu kasus khusus. Ketika gambar overlay (sumber) tidak punya kanal alpha, operator ini memperlakukannya sebagai mask gambar grayscale biasa. Artinya, kanal alpha gambar yang ada akan diganti dengan gambar grayscale yang diberikan. Singkatnya, apa pun yang hitam pada gambar grayscale itu dianggap transparan penuh, dan yang putih opak penuh. Hal ini begitu penting dan begitu sering dipakai sampai saya jadikan pedoman...
Gambar yang dipakai dengan operator ini TIDAK boleh memuat kanal alpha apa pun.
Pastikan kedua gambar masukan tidak punya kanal alpha dengan mematikan kanal alpha pada keduanya sebelum dikomposisikan memakai pengaturan compose 'Copy_Opacity'. Sebagai contoh, buat gambar bulan grayscale (yang mudah digambar), lalu pakai sebagai mask untuk gradien plasma biru, sehingga dihasilkan bulan biru yang tampak berbintik-bintik indah. |
magick -size 70x70 xc:black -fill white -draw 'circle 35,35 35,5' \
-fill black -draw 'circle 28,30 35,5' \
moon_mask.gif
magick -size 70x70 plasma:white-dodgerblue moon_mask.gif \
-alpha Off -compose CopyOpacity -composite moon_gradient.png
![[IM Output]](../static/img/compose/moon_mask.gif)
![[IM Output]](../static/img/compose/moon_gradient.png)
Kalau gambar Anda punya komponen transparan yang harus dipertahankan, operator komposisi alpha ini bukan yang dibutuhkan. Kemungkinan besar yang diperlukan justru 'Dst_In', untuk mengurangkan area transparan overlay sumber dari gambar tujuan (dalam hal itu kedua gambar perlu punya kanal alpha yang aktif dan terpakai. Operator ini dijelaskan lebih rinci lagi di Menggunakan gambar mask dengan font dan di Menyunting mask gambar. Operator ini juga dipakai di banyak contoh lain sepanjang halaman-halaman ini.
Copy_Red, Copy_Green, Copy_Blue
Menyalin kanal warna tertentu dari gambar sumber ke gambar tujuan. Karena gambar RGB grayscale punya data yang sama di ketiga kanal warnanya, metode-metode ini bisa dianggap menyalin gambar kanal grayscale untuk menggantikan kanal yang ditunjuk pada gambar tujuan. Mirip seperti 'Copy_Opacity' (lihat di atas) yang bisa mengganti 'kanal alpha' sebuah gambar dengan gambar grayscale. Metode penyalinan kanal ini jarang dipakai sekarang berkat adanya berbagai operator kanal warna yang memisahkan lalu menggabungkan kembali kanal warna lewat gambar kanal grayscale. Perhatikan bahwa saat berbagai pola gradien grayscale digabungkan, operator-operator ini bisa membangkitkan gambar berwarna yang sangat menarik. Untuk beberapa contohnya, lihat kombinasi gradien warna di tabel operator compose mentah.
Copy_Cyan, Copy_Magenta, Copy_Yellow
Ini sinonim dari metode yang sama pada bagian sebelumnya. Intinya, kanal 'Red' pada gambar RGB juga dipakai sebagai kanal 'Cyan' pada gambar CYMK. Begitu pula kanal 'Green' dan 'Magenta', serta kanal 'Blue' dan 'Yellow'. Karena itu menyalin kanal 'Cyan' sama saja dengan menyalin kanal 'Red'. Jenis kanal apa yang diwakili data gambar bergantung pada ruang warna gambar di memori saat itu.
Copy_Black
Ini juga sekadar menyalin kanal 'Black' dari sumber ke tujuan, bila kanal itu ada. Namun kanal tersebut hanya ada pada gambar CMYK. Jika kanal 'Black' tidak ada, operasi ini tidak melakukan apa-apa, dan itu mungkin sebuah bug. Yang mestinya dilakukan barangkali adalah menyalin gambar kanal 'Black' grayscale ke kanal black gambar tujuan (dengan asumsi kanal itu ada).
Hue (menyalin rona gambar RGB ke gambar tujuan)
Operator ini menyalin rona H gambar sumber untuk menggantikan rona gambar tujuan, sementara saturasi S dan luminans L (ATAU luminans Y?) latar belakangnya dibiarkan. Ini mengandaikan kedua gambar berada di ruang warna RGB. Saya belum mengujinya dengan gambar yang ruang warnanya non-RGB.
Saturate (menyalin saturasi gambar RGB ke gambar tujuan)
Menyalin saturasi S dari sumber ke tujuan (dengan asumsi gambarnya berada di ruang warna RGB), sementara rona warna H dan luminans L (ATAU luminans Y?) dibiarkan. Ini mengandaikan kedua gambar berada di ruang warna RGB. Saya belum mengujinya dengan gambar yang ruang warnanya non-RGB.
Luminize (menyalin luminans gambar RGB ke gambar tujuan)
Menyalin luminans L (ATAU luminans Y?) dari sumber ke tujuan, sementara rona warna H dan saturasi S dibiarkan. Ini mengandaikan kedua gambar disimpan memakai ruang warna RGB. Saya belum mengujinya dengan gambar yang ruang warnanya non-RGB.
Colorize (menyalin rona dan saturasi warna ke gambar tujuan)
Menyalin rona H dan saturasi S dari sumber ke tujuan, sementara luminans warna L (ATAU luminans Y?) dibiarkan. Ini mengandaikan kedua gambar disimpan memakai ruang warna RGB. Saya belum mengujinya dengan gambar yang ruang warnanya non-RGB.
Melarutkan satu gambar di atas gambar lain
Yang dilakukan operator "-dissolve" adalah menyediakan metode compose 'Over' yang terkendali. Ia menyesuaikan transparansi gambar overlay, sebelum gambar itu ditimpakan ke atas latar belakang, sesuai persentase yang diberikan.
**magick composite -dissolve {_percent_} overlay bgnd result
magick composite -dissolve {_src_percent_}x{_dst_percent_} overlay bgnd result
magick bgnd overlay -compose dissolve \
-define compose:args={_src_percent_},{_dst_percent_} \
-composite result
**
Dengan memberi dua argumen (baru di IM v6), dapat ditentukan secara persis seberapa banyak gambar overlay dan gambar latar belakang dilarutkan sebelum keduanya ditimpakan. Jika hanya satu argumen persentase yang diberikan, hanya overlay yang dilarutkan hingga tersisa sebanyak itu (0 persen berarti transparan sepenuhnya, 100 berarti sumber tidak berubah) sebelum ditimpakan (memakai metode compose 'Over') ke latar belakang. Lebih jauh lagi, jika nilainya diteruskan melewati 100% (juga baru di IM v6), gambar latar belakang mulai ikut dilarutkan. Dengan kata lain, pada rentang 0 sampai 100 persen latar belakang sama sekali tidak dilarutkan (dst_percent bernilai 100%), sedangkan pada rentang 100 sampai 200 overlay dibiarkan apa adanya (src_percent disetel 100%) dan latar belakanglah yang dilarutkan, sehingga hilang sama sekali ketika argumennya mencapai 200%). Berikut tabel hasil dengan berbagai argumen dissolve... |
magick composite -dissolve {_argument_} -gravity South \
star.gif dragon_sm.gif -alpha Set {_result_}
Seperti terlihat, "-dissolve" mula-mula melarutkan gambar baru secara perlahan di atas latar belakang, lalu perlahan melarutkan gambar latar belakang aslinya. Cara ini sangat cocok untuk gambar yang punya area transparan. Pelarutan latar belakang juga bisa dikendalikan, sehingga sementara satu gambar melarut di atas, latar belakang di bawahnya dapat diatur untuk ikut melarut. Ini bagus sekali, tetapi sebenarnya kurang cocok untuk pelarutan antargambar bergaya slide show yang sesungguhnya. Karena satu gambar ditimpakan, kedua gambar tidak dilebur secara setara, dan menukar argumen gambar (beserta argumen dissolve yang bersesuaian) akan memberi hasil yang berbeda. |
Agar rentang 100% sampai 200%, atau argumen persentase kedua, bisa bekerja, gambar latar belakang harus punya kanal alpha. Hal ini sangat penting terutama untuk gambar JPEG yang secara bawaan tidak memuat transparansi apa pun. Karena itu, ada baiknya IM disuruh memberi kanal alpha ke semua gambar memakai operator "-alpha Set" sebelum metode composite 'dissolve' diterapkan. |
|---|---|
| Kelemahan terbesar memakai dissolve pada kedua gambar adalah transparansi ikut memengaruhi rata-ratanya. Artinya, melarutkan dua gambar sebesar 50% akan selalu membuat warnanya semitransparan, bahkan ketika kedua gambar masukan opak penuh. Sebagai contoh: |
magick dragon_sm.gif star.gif -alpha on \
-compose dissolve -define compose:args='50,50' \
-gravity South -composite dissolve_50_50.png
magick composite -compose Dst_Over -tile pattern:checkerboard \
dissolve_50_50.png dissolve_50_50_bg.png
![[IM Output]](../static/img/compose/dissolve_50_50_bg.png)
Terlihat bahwa setelah gambar ditimpakan ke pola checkerboard, semua bagian gambar setidaknya semitransparan. Meski bagian yang benar-benar tertimpa memang kurang transparan dibanding bagian mana pun tempat salah satu gambar sumbernya transparan. Gambar opak penuh hanya akan didapat dari komposisi 'Dissolve' bila salah satu gambar (biasanya 'latar belakang') tidak dilarutkan (nilai 100 persen) sehingga tetap opak. Karena itulah nilai bawaan untuk 'latar belakang' adalah 100, setidaknya pada awalnya. Berikut kasus-kasus khusus untuk argumen "-dissolve" tertentu... 0x0 | | Kedua gambar dilarutkan hingga transparan penuh.
Setara dengan metode compose 'Clear'.
0 | Hanya gambar latar belakang, tidak berubah (sumber dibuat transparan).
Setara dengan metode compose 'Dst'.
100 | Penimpaan biasa gambar overlay ke latar belakang.
Setara dengan metode compose 'Over'.
200 | Gambar overlay di atas kanvas kosong (latar belakang dibuat transparan).
Setara dengan metode compose 'Src'.
Metode komposisi "-dissolve" lazim dipakai sebagai cara alternatif untuk Watermark dengan gambar, terutama untuk watermark berwarna.
Memadukan dua gambar
Metode komposisi "-blend" menyediakan apa yang semula dimaksudkan disediakan oleh metode komposisi "-dissolve", sebelum metode itu dibajak untuk operasi lain yang lebih mendasar. Kalau metode "-dissolve" menimpakan gambar satu di atas yang lain, "-blend" melebur gambar sedemikian rupa sehingga keduanya diperlakukan setara (sekadar dijumlahkan), sesuai argumen persentase yang diberikan. Karena itu hasil yang sama (kecuali ukuran gambar akhirnya) bisa didapat dengan menukar persentase dan argumen gambarnya. Hal ini tidak berlaku pada metode "-dissolve". Dengan kata lain, "-blend" bersifat asosiatif (argumennya bisa ditukar), sedangkan "-dissolve" tidak.
**magick composite -blend {_percent_} overlay bgnd result
magick composite -blend {_src_percent_}x{_dst_percent_} overlay bgnd result
magick bgnd overlay -compose blend \
-define compose:args={_src_percent_},{_dst_percent_} \
-composite result
**
Jika hanya satu nilai persentase yang diberikan, nilai itu dipakai sebagai persentase pelarutan bagi overlay, sedangkan gambar latar belakang dilarutkan sebesar kebalikannya persis. Artinya, "-blend 30" akan melarutkan overlay sebesar 30% dan latar belakang sebesar 70% sebelum kedua gambar dijumlahkan. Jadi perintah itu setara dengan "-blend 30x70". Akibatnya, opasitas kedua gambar (di area yang tertimpa) tetap berjumlah 100%.
Dengan memberi dua persentase, dapat dikendalikan secara persis seberapa banyak kedua gambar itu dilebur. Berikut tabel hasil dengan berbagai argumen dissolve... |
magick composite -blend {_argument_} -gravity South \
compose_R.png compose_plus_GB.png -alpha Set {_result_}
Dari hasilnya terlihat bahwa "-blend" memungkinkan satu gambar diganti perlahan oleh gambar lain secara setara tanpa penimpaan. Kalau hasil blend ditimpakan ke kanvas hitam, katakanlah seukuran layar Anda, program slide show yang lumayan bisa dibuat dengan mudah, tempat satu gambar perlahan melarut menjadi gambar lain. Terlihat pula bahwa karena kedua gambar dijumlahkan (di dalamnya dipakai operator compose 'Plus'), nilai maksimum kanal warna gampang terlampaui sehingga muncul artefak. Warna putih 100% khususnya akan membuat tidak ada satu pun bagian gambar lain yang terlihat, karena semua kanal warnanya sudah berada di nilai maksimum. Untuk sebagian besar situasi, disarankan cukup memakai blend versi satu argumen. |
Sama seperti "-dissolve", gambar latar belakang harus punya kanal alpha agar "-blend" bekerja dengan benar dan bisa melarutkan gambar latar belakang. Karena itu ada baiknya IM disuruh menyetel kanal alpha pada semua gambar sebelum komposisi 'Blend' diterapkan. |
|---|---|
Berikut kasus-kasus khusus untuk argumen "-blend" tertentu... 0x0 |
|
Setara dengan metode compose 'Clear'. |
|
| --- | --- |
0 |
Hanya gambar latar belakang, tidak berubah. |
Setara dengan metode compose 'Dst'. |
|
100 |
Gambar overlay di atas kanvas kosong. |
Setara dengan metode compose 'Src'. |
|
100x100 |
Kedua gambar sekadar dijumlahkan. |
Setara dengan metode compose 'Plus'. |
|
50 |
Rata-rata kedua gambar. Ini setara dengan operator urutan gambar "-evaluate-sequence mean", tetapi dengan dua gambar. (Lihat juga Mean (rata-rata) dari banyak gambar) |
Blend versus Dissolve
Meski Dissolve dan Blend sama-sama membuat gambar menjadi semitransparan, "-dissolve" mengomposisikan gambar memakai 'Over', sedangkan "-blend" melebur gambar memakai 'Plus'. Bedanya mungkin tampak sepele, tetapi bisa sangat penting, karena hal itulah yang menentukan bagaimana kedua metode komposisi menangani bagian gambar yang tidak tertimpa, atau area tempat overlay-nya transparan. Sebagai contoh.
magick dragon_sm.gif star.gif -alpha on \
-compose dissolve -define compose:args=50 \
-gravity South -composite dissolve_50.png
magick dragon_sm.gif star.gif -alpha on \
-compose blend -define compose:args=50 \
-gravity South -composite blend_50.png
Perhatikan bahwa meskipun bagian latar belakang 'dragon' yang tidak tertimpa tampak semitransparan pada gambar hasil Blend, area bintangnya opak penuh pada keduanya dan memuat hasil warna yang sama! Artinya, untuk area tempat kedua gambarnya opak penuh, dan IM dibiarkan menghitung sendiri argumen '{_dst_percent_}' kedua yang tepat, hasilnya juga opak penuh dan sama persis. Sebagai contoh, di sini saya melebur gambar 'dragon' dengan gambar bawaan 'rose'. Kedua gambar saya pangkas ke ukuran yang sama, supaya dua gambar opak penuh itu bisa saling menutupi sepenuhnya.
magick dragon_sm.gif rose: -crop 70x46+0+0 +repage -alpha on \
-compose dissolve -define compose:args=50 \
-gravity South -composite dissolve_50_opaque.png
magick dragon_sm.gif rose: -crop 70x46+0+0 +repage -alpha on \
-compose blend -define compose:args=50 \
-gravity South -composite blend_50_opaque.png
Kalau kedua gambar ini dibandingkan, keduanya akan sama persis. Ringkasnya, Dissolve (over dengan hanya gambar overlay yang diberi persentase transparansi) sama dengan Blend (penjumlahan berbobot kedua gambar, masing-masing dengan persentase yang sesuai): keduanya memberi hasil yang sama untuk gambar apa pun yang opak penuh. Barulah ketika salah satu atau kedua gambar memuat transparansi, kedua metode itu berbeda.
Memakai Blend untuk memodifikasi satu gambar
| Blend pada dasarnya adalah 'fungsi interpolasi', atau 'rata-rata berbobot', yang memungkinkan dua gambar opak penuh digabungkan secara linear dan terkendali. Yaitu 30% gambar sumber ditambah 70% gambar latar belakang, sehingga dihasilkan gambar baru yang 100% opak. Namun kemampuannya lebih dari sekadar menggabungkan dua gambar. Blend juga bisa dipakai untuk mencerahkan, menyetel kontras, saturasi, mewarnai, bahkan menajamkan sebuah gambar. Pemakaian blend semacam ini dibahas lebih lanjut dalam sebuah dokumen yang ditemukan BugBear bugbear@papermule.co.uk di WWW, Image Processing by Interpolation and Extrapolation, salinan dari dokumen di Grafica Obscura (yang tidak bisa ditautkan langsung dari sumber luar). Dokumen itu direkomendasikan sebagai bacaan lanjutan tentang pemakaian fungsi ini. | Kemampuan ekstrapolasi ditambahkan ke operator "-blend" pada IM v6.3.5-10. |
|---|---|
| Sebagai contoh, di sini kita bisa membuat gambar rose lebih terang atau lebih gelap dengan memadukannya dengan gambar hitam murni berukuran sama. |
magick composite -blend 0 rose: -size 70x46 xc:black -alpha Set blend_dark_0.jpg
magick composite -blend 50 rose: -size 70x46 xc:black -alpha Set blend_dark_50.jpg
magick composite -blend 100 rose: -size 70x46 xc:black -alpha Set blend_dark_100.jpg
magick composite -blend 150 rose: -size 70x46 xc:black -alpha Set blend_dark_150.jpg
magick composite -blend 200 rose: -size 70x46 xc:black -alpha Set blend_dark_200.jpg
Seperti pada pemakaian metode komposisi Blend mana pun, 0% menghasilkan gambar 'tujuan', sedangkan pada 100% hasilnya adalah gambar 'sumber' asli yang tidak berubah. Yang lebih menarik di sini justru gambar hasil paduan dan hasil ekstrapolasinya. Dengan cara serupa, memadukan dengan gambar abu-abu murni memungkinkan kontras gambar apa pun disesuaikan.
magick composite -blend 0 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_0.jpg
magick composite -blend 50 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_50.jpg
magick composite -blend 80 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_80.jpg
magick composite -blend 100 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_100.jpg
magick composite -blend 120 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_120.jpg
magick composite -blend 150 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_150.jpg
![[IM Output]](../static/img/compose/blend_gray_0.jpg)
0% | ![[IM Output]](../static/img/compose/blend_gray_50.jpg)
50% | ![[IM Output]](../static/img/compose/blend_gray_80.jpg)
80% | ![[IM Output]](../static/img/compose/blend_gray_100.jpg)
100% | ![[IM Output]](../static/img/compose/blend_gray_120.jpg)
120% | ![[IM Output]](../static/img/compose/blend_gray_150.jpg)
150%
Di sini saya memadukan gambar dengan versi grayscale-nya, sehingga saturasi warnanya bisa dikendalikan.
magick rose: -type grayscale rose_gray.png
magick composite -blend 0 rose: rose_gray.png -alpha Set blend_color_0.jpg
magick composite -blend 50 rose: rose_gray.png -alpha Set blend_color_50.jpg
magick composite -blend 100 rose: rose_gray.png -alpha Set blend_color_100.jpg
magick composite -blend 150 rose: rose_gray.png -alpha Set blend_color_150.jpg
magick composite -blend 200 rose: rose_gray.png -alpha Set blend_color_200.jpg
Di sini saya memadukan gambar rose dengan versi blur-nya, sehingga menghasilkan blur yang dilembutkan saat menginterpolasi, dan un-sharpen saat mengekstrapolasi dari bentuk blur itu.
magick rose: -blur 0x5 rose_blurred.png
magick composite -blend 0 rose: rose_blurred.png -alpha Set blend_blur_0.jpg
magick composite -blend 50 rose: rose_blurred.png -alpha Set blend_blur_50.jpg
magick composite -blend 100 rose: rose_blurred.png -alpha Set blend_blur_100.jpg
magick composite -blend 150 rose: rose_blurred.png -alpha Set blend_blur_150.jpg
magick composite -blend 200 rose: rose_blurred.png -alpha Set blend_blur_200.jpg
Opsi watermark - compose 'Modulate'
Opsi composite "-watermark" atau metode compose "modulate" dimaksudkan untuk melunturkan warna gambar di ruang HSB demi keperluan hak cipta.
**magick composite -watermark {_brightness_}[x{_saturation_}] overlay bgnd result \
magick bgnd overlay -compose modulate \
-define compose:args={_brigthness_}[,{_saturation_}] \
-composite result
**
Gambar 'overlay' adalah gambar hitam-putih ber-mask alpha, yang dipakai untuk mencerahkan/menggelapkan gambar tujuan sebesar persentase 'brightness ' yang diberikan. 'brightness ' bernilai '0' tidak mengubah kecerlangan gambar, sedangkan nilai '100' menggantikan kecerlangan itu dengan intensitas gambar overlay. Artinya, jika overlay-nya hitam maka gambar tujuan dibuat hitam, dan jika putih maka warna gambar tujuan akan tersaturasi penuh. 'saturation ' bawaannya '100', yang menghasilkan saturasi warna maksimum. Jika disetel '0', area ber-mask akan didesaturasi menjadi hitam-putih. Berikut tabel hasil dengan berbagai argumen... |
magick composite -watermark {_argument_} -gravity South \
sphinx.gif cyclops.gif {_result_}
Nilai yang bagus untuk memberi watermark tipis pada gambar adalah brightness sekitar 15 sampai 30 persen. Berikut kasus-kasus khusus untuk argumen "-watermark" tertentu... 0 |
Gambar tujuan sama sekali tidak berubah. | |
|---|---|---|
100 |
Gambar tujuan dibuat hitam di tempat overlay-nya hitam, dan rona warnanya tersaturasi penuh di tempat overlay-nya putih | |
0x0 |
Area overlay ber-mask didesaturasi menjadi grayscale | |
100x0 |
Overlay grayscale sekadar ditimpakan 'ATop' gambar tujuan. |
|
| Untuk teknik watermark lainnya, lihat Watermark dengan gambar. |
Memakai mask compose untuk membatasi area yang dikomposisikan
Perintah "magick composite" dan operator "-composite" juga menerima gambar mask ketiga yang membatasi area yang terkena metode "-compose". Sebagai contoh, dengan dua gambar dan sebuah gambar mask, sebagian gambar sumber dapat ditimpakan ke gambar latar belakang sesuai batas yang ditentukan mask itu. Namun perhatikan bahwa gambar latar belakang-lah yang tetap menentukan ukuran akhir gambar hasilnya.
magick composite tile_water.jpg tile_aqua.jpg moon_mask.gif mask_over.jpg
Gambar mask dianggap bagian dari gambar tujuan, dan menentukan bagian mana dari gambar tujuan yang boleh diubah oleh hasil komposisi alpha. Artinya, bagian yang putih boleh diubah, sementara bagian yang hitam (dan bagian di luar gambar mask) dibiarkan apa adanya. Sayangnya, meski pengaturan "-gravity" dan "-geometry" bisa memindahkan posisi gambar sumber, gambar mask TIDAK ikut dipindahkan dan tetap sejajar dengan gambar tujuan. Jadi mari kita perjelas soal ini...
Mask disejajarkan dengan gambar latar belakang aslinya.
Pengaturan gravity/geometry apa pun tidak diterapkan padanya.
Artinya, kalau saya ingin memindahkan posisi mask, gambar mask harus saya perbesar dengan sejumlah baris dan kolom hitam secukupnya. Lihat Splice, menambah baris dan kolom piksel. Sebagai contoh, berikut versi "magick"-nya (argumen gambar sumber dan latar belakangnya ditukar), dengan gambar mask yang disesuaikan supaya bergeser relatif terhadap gambar latar belakang. |
magick tile_aqua.jpg tile_water.jpg \
\( -background black -splice 10x25+0+0 moon_mask.gif \) \
-composite mask_offset.jpg
![[IM Output]](../static/img/compose/mask_offset.jpg)
Ingat bahwa operator "-composite" pada perintah "magick" menyebutkan gambar tujuan atau latar belakang lebih dulu. Hasilnya seperti memberi mask offset '+10+25', tetapi tanpa gambar sumber maupun latar belakang yang bergeser. Kalau mask ingin disejajarkan dengan gambar sumber, sebaiknya gambar sumber di-mask secara terpisah (memakai 'Copy_Opacity' atau teknik lain). Setelah itu hasilnya bisa ditempatkan di atas latar belakang tanpa masalah penyejajaran. Berikut contoh serupa, tetapi kali ini saya memakai mask gradien seukuran gambar latar belakang agar kedua gambarnya berpadu, sehingga muncul efek 'perairan dangkal'. |
magick tile_aqua.jpg tile_water.jpg -size 94x94 gradient: \
-composite water_shallows.jpg
![[IM Output]](../static/img/compose/water_shallows.jpg)
Ini memberi cara sederhana untuk menumpangtindihkan dua gambar. Lihat Foto yang bertumpang tindih.
Mask compose dan transparansi
Dari uraian di atas Anda mungkin mengira bahwa memakai mask composite tiga gambar sangat mirip dengan memakai 'Copy_Opacity' untuk menyetel transparansi gambar overlay lalu mengomposisikannya ke latar belakang. Untuk gambar tanpa transparansi (seperti di atas) dugaan itu benar. Tetapi itu belum keseluruhan ceritanya. Pertama, mask terikat pada gambar tujuan, bukan pada gambar sumber, jadi ia tidak terpengaruh offset maupun gravity. Selain itu, tidak seperti 'Copy_Opacity', gambar mask diperlakukan murni sebagai gambar grayscale. IM mengabaikan transparansi alpha apa pun yang mungkin dimiliki mask. Karena itu tidak perlu repot mematikan kanal alpha pada gambar mask. Terakhir, mask bekerja dengan membatasi area yang dimodifikasi, dan itu sangat berbeda dari sekadar me-mask gambar sumber. Untuk komposisi 'Over' yang sederhana, hasilnya sama seperti jika mask dikalikan dengan transparansi apa pun pada gambar sumber, sehingga membatasi apa yang ditimpakan. Jadi untuk gambar sumber yang sepenuhnya opak, mask bisa dianggap sebagai transparansi gambar sumber itu. Sebagai contoh, timpakan dua lingkaran seperti biasa, lalu timpakan lagi dengan sebuah mask yang membatasi area gambar tujuan yang berubah.
magick -size 60x60 xc:none -fill red -draw 'circle 35,21 35,3' m_src.png
magick -size 60x60 xc:none -fill blue -draw 'circle 21,39 24,57' m_bgnd.png
magick -size 60x60 xc: -draw 'polygon 0,59 59,0, 0,0' m_mask.png
magick composite m_src.png m_bgnd.png m_over.png
magick composite m_src.png m_bgnd.png m_mask.png m_over_masked.png
Hasilnya setara dengan gambar lingkaran merah yang di-mask oleh mask grayscale yang diberikan, lalu ditimpakan ke gambar tujuan. Namun dengan jenis metode komposisi alpha yang lain, lebih baik mask dianggap sekadar membatasi area yang terkena efek, bukan sebagai mask transparansi gambar sumber. Di sini saya memakai metode 'Src' untuk mengganti area ber-mask pada gambar tujuan dengan isi gambar sumber. |
magick composite m_src.png m_bgnd.png m_mask.png -compose Src m_src_masked.png
![[IM Output]](../static/img/compose/m_src_masked.png)
Seperti terlihat, hanya area yang ditentukan mask yang benar-benar diganti oleh hasil komposisi alpha. Kalau mask itu hanya dipakai untuk mengubah transparansi gambar sumber, contoh di atas hanya akan menampilkan gambar sumber dan tidak menampilkan apa pun dari gambar latar belakang.
FUTURE: Using masked composition to overlay an object in front of a
backdrop, but behind some foreground object. Also develop an animated example,
of something being obscured by foreground objects in the destination.
| _Hal di atas dulunya adalah bug besar yang berlangsung lama pada masking composite, yaitu ketika gambar sumber atau overlay yang dipakai punya transparansi, dan/atau ketika dicoba komposisi alpha selain metode compose 'Over'. Lihat Composite Mask Bug untuk detailnya.
_
Compose memakai tile gambar
Pengaturan "-tile" pada "magick composite" sangat berbeda dari pengaturan bernama sama pada "magick" atau "magick montage". Jika diberikan, artinya gambar sumber akan di-tile di atas gambar latar belakang. Sebagai contoh, di sini kita men-tile 'bintang berwarna' di atas gambar colormap netscape... |
magick composite -tile star.gif netscape: tile.gif
![[IM Output]](../static/img/compose/tile.gif)
Satu pemakaian umum tiling composite adalah men-tile pemberitahuan hak cipta atau catatan lain yang semitransparan di atas gambar sebelum gambar itu dipublikasikan di internet. Untuk contohnya, lihat contoh-contoh terakhir pada Watermark dengan teks. Perhatikan bahwa pengaturan ini pada dasarnya (setidaknya untuk saat ini) tanpa argumen. Ia hanya flag Boolean hidup-mati bagi operasi "magick composite" terakhir. Akibatnya, pengaturan ini tidak bisa dipakai untuk men-tile gambar latar belakang, sebab itu berarti IM tidak bisa memakai gambar latar belakang untuk menentukan ukuran akhir hasilnya. Namun sebuah gambar bisa di-tile di bawah gambar lain memakai 'Dst_Over'. |
magick -background none -pointsize 36 label:'Tile Under' png:- |\
magick composite -tile bg.gif - -compose Dst_Over tile_under.gif
![[IM Output]](../static/img/compose/tile_under.gif)
Banyak juga operator matematis yang bersifat asosiatif, artinya sumber dan tujuan bisa ditukar tanpa memengaruhi hasilnya (kecuali ukuran gambar akhirnya). Saat ini belum ada cara sederhana untuk melakukan komposisi alpha yang di-tile di dalam perintah "magick". Sayang sekali, sebab hal itu akan membuat tiling dengan gambar yang sudah ada di memori jauh lebih mudah daripada sekarang. Teknik dasar untuk tiling komposisi memakai "magick" adalah mengklona gambar aslinya, lalu men-tile-nya dengan salah satu metode di Kanvas yang di-tile. Sebagai contoh... |
magick -gravity center -pointsize 32 -font Corsiva \
label:'Tile White\nBackgrounds' -bordercolor white -border 5 \
\( -clone 0 -tile tile_aqua.jpg -draw "color 0,0 reset" \) \
-compose Multiply -composite tile_convert.gif
![[IM Output]](../static/img/compose/tile_convert.gif)
Contoh di atas mengganti 'latar belakang putih' label memakai metode compose matematis "Multiply". Lihat juga Memakai mask gambar, komposisi matematis.
Metode komposisi khusus
Ada juga beberapa metode komposisi bertujuan khusus yang ditambahkan karena satu dan lain alasan.
Mathematics (metode compose matematis yang ditentukan pengguna)
Metode composite ini menerima 4 nilai numerik sehingga pengguna dapat mendefinisikan banyak metode compose matematis yang berbeda. Keempat argumennya, "A", "B", "C", dan "D", mendefinisikan rumus...
A*Sc*Dc + B*Sc + C*Dc + D
dengan "Sc" adalah gambar sumber atau overlay, dan "Dc" gambar latar belakang atau tujuan. Keempat nilai itu harus diberikan semua. Sebagai contoh, kita bisa membangkitkan padanan metode compose 'Multiply' memakai nilai "1,0,0,0".
magick gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='1,0,0,0' -composite \
mathematics_multiply.png
Dengan cara serupa, dengan mencari atau menurunkan rumus yang dibutuhkan, metode komposisi lain juga bisa dibangkitkan, misalnya... Screen: 1-(1-Sc)*(1-Dc) => -Sc*Dc + Sc + Dc => -1,1,1,0 |
magick gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='-1,1,1,0' -composite \
mathematics_screen.png
![[IM Output]](../static/img/compose/mathematics_screen.png)
Atau 'LinearLight' yang langsung didefinisikan memakai argumen "0,2,1,-1"... |
magick gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,2,1,-1' -composite \
mathematics_linearlight.png
![[IM Output]](../static/img/compose/mathematics_linearlight.png)
Dengan cara serupa, metode compose lain juga bisa dibangkitkan, misalnya... Metode compose | Argumen Mathematics
Multiply | 1,0,0,0
Screen | -1,1,1,0
Exclusion | 0,1,1,-1
Linear_Dodge | 0,1,1,0
Linear_Burn | 0,1,1,-1
Linear_Light | 0,2,1,-1
Metode compose lain menuntut pemakaian kuadrat, akar kuadrat, pembagian, atau bahkan beberapa fungsi piecewise khusus dan pengondisian, sehingga tidak bisa didefinisikan dengan fungsi polinomial mulus sederhana yang disediakan metode ini. Metode compose baru juga bisa dibuat, misalnya alternatif yang diperluas dari LinearLight... |
magick gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,1,1,-0.5' \
-composite mathematics_linearlight_2.png
![[IM Output]](../static/img/compose/mathematics_linearlight_2.png)
Komposisi buatan sendiri yang satu ini penting sebagai cara menambahkan gradien berbias seperti gelombang sinus. Atau varian lain yang bisa dipakai untuk 'efek pencahayaan'... |
magick gradient_dst.png gradient_src.png \
-compose Mathematics -define compose:args='0,1,.5,-.25' \
-composite mathematics_linearlight_3.png
![[IM Output]](../static/img/compose/mathematics_linearlight_3.png)
Metode komposisi matematis ini sangat penting karena memungkinkan jenis-jenis matematika gradien khusus yang kalau tidak begitu akan sangat rumit dicapai lewat banyak langkah terpisah. | Metode compose 'Mathematics' ditambahkan pada IM versi 6.5.4-3. Saat ini metode itu hanya tersedia lewat operator "-compose". Metode itu tidak tersedia dari perintah "magick composite" karena butuh argumen.
Change_Mask (membuat piksel yang mirip menjadi transparan)
Ini metode yang tidak biasa: ia hanya membuat piksel tertentu pada gambar tujuan menjadi transparan penuh. Yaitu piksel gambar tujuan yang cocok dengan gambar sumber yang diberikan, menurut pengaturan faktor fuzz saat itu. Cara ini bisa dipakai, misalnya, untuk mengembalikan transparansi pada gambar yang sudah ditimpakan ke latar belakang yang rumit (tetapi sangat berbeda). Persoalan inilah yang persis diajukan Jesper Eije...
magick overlay_figure.gif overlay_bgnd.gif \
-compose ChangeMask -composite overlay_removed.png
Gampang. Perhatikan bahwa karena warna gambar JPEG sering sedikit berubah akibat sifat lossy dari format file itu, pengaturan faktor fuzz yang kecil akan dibutuhkan untuk mencocokkan warna yang sangat mirip. Selain itu, kalau bagian gambar yang berubah kebetulan cocok dengan warna atau pola latar belakang, akan muncul 'lubang' pada gambar atau mask hasilnya; karena itu berhati-hatilah bila memakai cara ini pada gambar yang sangat mirip. Dengan menukar kedua gambar, sehingga gambar latar belakang diberikan sebagai gambar tujuan, bagian latar belakang yang diganti atau diubah oleh gambar yang ditimpakan dapat diekstrak. |
magick overlay_bgnd.gif overlay_figure.gif \
-compose ChangeMask -composite overlay_changed.png
![[IM Output]](../static/img/compose/overlay_changed.png)
Perhatikan bahwa hasilnya hanyalah mask bentuk transparan dari gambar latar belakang aslinya, tempat piksel yang mirip sekadar dibersihkan menjadi transparan. Tidak ada upaya membangkitkan transparansi parsial atau mengubah warna, sehingga bisa tersisa 'halo' berupa warna latar belakang yang sedikit berbeda di sekeliling gambar, yaitu tempat overlay asli dan warna latar belakang berbaur. Karena metode komposisi ini hanya 'membersihkan' piksel menjadi transparan penuh, kanal alpha akan selalu ditambahkan ke gambar hasilnya. Namun warna gambar tujuan tidak ikut dibersihkan seperti pada kebanyakan metode komposisi alpha lain. Karena itu kanal alpha bisa dinegasikan untuk mendapatkan warna yang tidak berubah. |
magick overlay_figure.gif overlay_bgnd.gif -compose ChangeMask -composite \
-channel A -negate overlay_unchanged.png
![[IM Output]](../static/img/compose/overlay_unchanged.png)
Dalam kasus ini urutan gambar masukan tidak jadi soal, kecuali bila faktor fuzz yang besar disetel. Ingat, warnanya datang dari gambar tujuan, sementara selisih antara kedua gambar itulah yang menentukan mask bentuk hasilnya. Untuk keterangan lebih lanjut tentang persoalan ini lihat Penghapusan latar belakang. Hasilnya sering kali terbatas kegunaan langsungnya. Namun hasil itu bisa dipakai untuk membangkitkan mask bitmap dari perubahan antara kedua gambar (dari sinilah namanya). | _Metode komposisi 'ChangeMask' ditambahkan pada IM v6.3.4, untuk menyediakan cara optimisasi transparansi bagi animasi GIF. Tidak ada metode komposisi lain yang memenuhi kebutuhan itu tanpa menggabungkan 3 metode komposisi atau lebih. Khususnya kebutuhan Boolean (atau thresholding faktor fuzz) yang diperlukan untuk optimisasi transparansi.
Namun hasilnya sendiri begitu berguna sehingga disediakan untuk dipakai langsung oleh pengguna, dan dari situlah nama metode komposisi yang cukup rumit ini ditetapkan._
Metode efek pemetaan gambar
Ada pula beberapa metode khusus yang sebenarnya bukan metode komposisi. Alih-alih langsung menggabungkan kedua gambar piksel demi piksel, gambar sumber atau overlap-nya berfungsi sebagai peta kendali khusus untuk suatu efek yang lebih besar. Meski metode yang diwakilinya relatif sederhana, pemakaiannya begitu rumit sehingga punya bagian contoh tersendiri, yaitu Efek pemetaan gambar. Metode khusus itu antara lain... Metode 'Blur ' menyediakan cara mem-blur gambar dengan berbagai cara, piksel demi piksel. Ia bisa membangkitkan bermacam efek blur gambar buatan sendiri. Lihat Variable Blur Mapping untuk detailnya. Metode 'Displace ' sebaliknya menyediakan teknik pergeseran pencarian piksel, baik absolut maupun relatif, yang tidak hanya menghasilkan metode distorsi gambar tertentu tetapi juga efek kaca, lensa, dan riak. Lihat Distort and Displacement Mapping untuk detailnya.
![[IM Output]](../static/img/compose/convert_over.gif)
![[IM Output]](../static/img/compose/compose_under_tiled.jpg)
![[IM Output]](../static/img/images/hand_point.gif)
![[IM Output]](../static/img/compose/compose_expand.gif)
![[IM Output]](../static/img/compose/compose_clear_limited.gif)
![[IM Output]](../static/img/compose/gradient_src.png)
![[IM Output]](../static/img/compose/gradient_dst.png)
![[IM Output]](../static/img/compose/gradient_result.png)
![[IM Output]](../static/img/images/text_scan.png)
![[IM Output]](../static/img/compose/text_scan_norm.png)
![[IM Output]](../static/img/compose/text_scan_divide.png)
![[IM Output]](../static/img/compose/compose_R.png)
![[IM Output]](../static/img/compose/compose_G.png)
![[IM Output]](../static/img/compose/compose_B.png)
![[IM Output]](../static/img/compose/compose_plus_RG.png)
![[IM Output]](../static/img/compose/compose_plus_RB.png)
![[IM Output]](../static/img/compose/compose_plus_GB.png)
![[IM Output]](../static/img/compose/compose_plus_RGB.png)
![[IM Output]](../static/img/compose/black_n_white.gif)
![[IM Output]](../static/img/compose/compose_negate.gif)
![[IM Output]](../static/img/compose/gradient_op_exclusion.png)
![[IM Output]](../static/img/img_photos/flower_sm.jpg)
![[IM Output]](../static/img/compose/flower_softglow.jpg)
![[IM Output]](../static/img/compose/red_gradient.png)
![[IM Output]](../static/img/compose/blue_gradient.png)
![[IM Output]](../static/img/compose/lighten_by_value.png)
![[IM Output]](../static/img/compose/lighten_intensity.png)
![[IM Output]](../static/img/compose/circle_left.gif)
![[IM Output]](../static/img/compose/circle_right.gif)
![[IM Output]](../static/img/compose/circle_union.gif)
![[IM Output]](../static/img/compose/circle_intersection.gif)
![[IM Output]](../static/img/compose/circle_disjunction.gif)
![[IM Output]](../static/img/compose/circle_complement.gif)
![[IM Output]](../static/img/compose/alpha_src.png)
![[IM Output]](../static/img/compose/alpha_dst.png)
![[IM Output]](../static/img/compose/alpha_result.png)
![[IM Output]](../static/img/compose/alpha_grad_src.png)
![[IM Output]](../static/img/compose/alpha_grad_dst.png)
![[IM Output]](../static/img/compose/alpha_grad_result.png)
![[IM Output]](../static/img/compose/gradient_grey.jpg)
![[IM Output]](../static/img/compose/gradient_yell-blue.jpg)
![[IM Output]](../static/img/compose/compose_overlay_gradients.jpg)
![[IM Output]](../static/img/compose/compose_overlay_gradients2.jpg)
![[IM Output]](../static/img/compose/circle_shaded.jpg)
![[IM Output]](../static/img/compose/circle_blue.jpg)
![[IM Output]](../static/img/compose/circle_shaded_tinted.jpg)
![[IM Output]](../static/img/compose/gradient_op_hardlight.png)
![[IM Output]](../static/img/images/rose.png)
![[IM Output]](../static/img/compose/lighting_effect.png)
![[IM Output]](../static/img/compose/compose_hardlight.png)
![[IM Output]](../static/img/compose/gradient_op_linearlight.png)
![[IM Output]](../static/img/compose/gradient_op_vividlight.png)
![[IM Output]](../static/img/compose/gradient_op_pinlight.png)
![[IM Output]](../static/img/compose/gradient_op_lineardodge.png)
![[IM Output]](../static/img/compose/gradient_op_linearburn.png)
![[IM Output]](../static/img/compose/circle_subtract.gif)
![[IM Output]](../static/img/compose/gradient_op_colordodge.png)
![[IM Output]](../static/img/images/star.gif)
![[IM Output]](../static/img/images/dragon_sm.gif)
![[IM Output]](../static/img/compose/dissolve_montage.jpg)
![[IM Output]](../static/img/compose/blend_montage.jpg)
![[IM Output]](../static/img/compose/dissolve_50.png)
![[IM Output]](../static/img/compose/blend_50.png)
![[IM Output]](../static/img/compose/dissolve_50_opaque.png)
![[IM Output]](../static/img/compose/blend_50_opaque.png)
![[IM Output]](../static/img/compose/blend_dark_0.jpg)
![[IM Output]](../static/img/compose/blend_dark_50.jpg)
![[IM Output]](../static/img/compose/blend_dark_100.jpg)
![[IM Output]](../static/img/compose/blend_dark_150.jpg)
![[IM Output]](../static/img/compose/blend_dark_200.jpg)
![[IM Output]](../static/img/compose/blend_color_0.jpg)
![[IM Output]](../static/img/compose/blend_color_50.jpg)
![[IM Output]](../static/img/compose/blend_color_100.jpg)
![[IM Output]](../static/img/compose/blend_color_150.jpg)
![[IM Output]](../static/img/compose/blend_color_200.jpg)
![[IM Output]](../static/img/compose/blend_blur_0.jpg)
![[IM Output]](../static/img/compose/blend_blur_50.jpg)
![[IM Output]](../static/img/compose/blend_blur_100.jpg)
![[IM Output]](../static/img/compose/blend_blur_150.jpg)
![[IM Output]](../static/img/compose/blend_blur_200.jpg)
![[IM Output]](../static/img/images/sphinx.gif)
![[IM Output]](../static/img/images/cyclops.gif)
![[IM Output]](../static/img/compose/wmark_montage.jpg)
![[IM Output]](../static/img/images/tile_water.jpg)
![[IM Output]](../static/img/images/tile_aqua.jpg)
![[IM Output]](../static/img/compose/mask_over.jpg)
![[IM Output]](../static/img/compose/m_src.png)
![[IM Output]](../static/img/compose/m_bgnd.png)
![[IM Output]](../static/img/compose/m_over.png)
![[IM Output]](../static/img/compose/m_mask.png)
![[IM Output]](../static/img/compose/m_over_masked.png)
![[IM Output]](../static/img/compose/mathematics_multiply.png)
![[IM Output]](../static/img/images/overlay_figure.gif)
![[IM Output]](../static/img/images/overlay_bgnd.gif)
![[IM Output]](../static/img/compose/overlay_removed.png)