Contoh penggunaan ImageMagick -- efek font gabungan
- Kata pengantar dan indeks contoh penggunaan ImageMagick
-
Font gabungan Menggambar teks sebagai gambar dalam berbagai gaya
Isian tile, Isian gradien, Terbalik, Bayangan keras, Bayangan condong, Miring, Stempel, Ekstrusi, Garis luar, Garis luar multiwarna, Stroke, Stroke tebal, Stroke tipis, Garis luar ganda, Psikedelik, Balon, Tersambung, Bertumpuk, Acak (jitter), Kabur, Bayangan kabur, Bayangan lembut, Garis luar lembut, Garis luar lembut lebih pekat, Bayangan blur menurut jarak, Cetakan kotor, Bevel, Kerucut, Bevel dalam, Lengkung, Busur, Lingkaran, Vibrato, Komet, Berasap. Menggunakan gambar mask dengan font Untuk menghapus bagian gambar sebelum di-overlay Pemrosesan font tingkat lanjut Mengembangkan font untuk memperoleh hasil yang lebih kompleks
Font yang lebih kompleks, Papan neon, Metalik Menggambar teks hanyalah awal dari apa yang mungkin dilakukan dengan ImageMagick. Di sini kita melihat cara memodifikasi kemampuan dasar menggambar teks IM untuk membuat font mewah dan efek khusus, yang kemudian dapat Anda pakai di halaman web dan dokumen.
Efek font gabungan
Teks polos biasa sebagai gambar itu membosankan, tetapi dengan sedikit sekali usaha teks dapat di-overlay dan diwarnai sehingga menghasilkan efek yang sangat aneh dan menakjubkan. Untuk itu kita perlu menggambar teks beberapa kali, menumpangkan berbagai tile dan warna, lalu menerapkan sebagian dari sekian banyak operator gambar yang tersedia untuk menghasilkan efek khusus yang lebih menarik dari teks asli yang membosankan. Perhatikan bahwa banyak dari efek ini dapat diterapkan pada gambar lain selain font dasar seperti yang kita pakai. Secara khusus, efek ini dapat dipakai pada gambar clip-art. Font yang di-tile : Anda tidak terbatas menggambar font dalam satu warna tetap. Pola tile dapat dipakai di atas font.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile pattern:checkerboard -annotate +28+68 'Anthony' \
font_tile.jpg
Perhatikan bahwa pengaturan (setting) "-tile" menggantikan warna "-fill" apa pun untuk operator "-draw" . |
Sejak IM v6.3.2 gambar tile juga dapat ditentukan lewat pengaturan "-fill". Namun cara ini tidak disarankan karena banyak operator yang memakai warna "-fill" tidak memahami gambar tile, dan kembali memakai 'black' sebagai bawaan. |
|---|---|
Gambar tile dapat di-offset relatif terhadap titik asal gambar latar belakang dengan menentukan pengaturan "-origin", SEBELUM Anda mengatur gambar "-tile". Gambar digulung sebesar nilai yang ditentukan saat ditetapkan sebagai tile isian. Font gradien : Tile yang dipakai juga tidak harus kecil; ukurannya bisa sebesar seluruh kanvas. |
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-tile gradient: -annotate +28+68 'Anthony' \
font_gradient.jpg
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -annotate 180x180+300+35 'Anthony' \
font_upsidedown.jpg
Bayangan keras : Dengan menggambar font dua kali disertai offset, kita bisa membuat efek bayangan 'keras' yang sederhana.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -draw "text 28,68 'Anthony'" \
-fill white -draw "text 25,65 'Anthony'" \
font_shadow.jpg
Bayangan condong : Karena operator penggambar font "-annotate" dapat memutar dimensi vertikal terpisah dari dimensi horizontal, dapat ditentukan rotasi ganjil berupa 'slewing' atau 'shearing' pada font. Ini bagus untuk membuat bayangan yang aneh, atau membuat font italic atau miring versi Anda sendiri.
magick -size 320x115 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -annotate 0x0+12+55 'Anthony' \
-fill RoyalBlue -annotate 0x130+25+80 'Anthony' \
font_slewed.jpg
Untuk tabel yang merangkum efek rotasi teks, lihat Opsi teks annotate. Tentu saja font Candice bukan font yang bagus untuk memperlihatkan efek ini, dan detail lain mungkin perlu ditambahkan agar hasilnya tampak lebih 3D. Misalnya mengaburkan bayangan menurut jarak. Font miring : Anda juga dapat memakai "-draw" untuk memiringkan font, meski sedikit lebih rumit karena melibatkan aksi MVG (Magick Vector graphics) tambahan untuk melengkungkan permukaan gambar. Karena permukaannya dilengkungkan, sebaiknya atur dulu posisi font dengan 'translate' sebelum pelengkungan.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill Navy -draw "translate 28,68 skewX -20 text 0,0 'Anthony'" \
font_slanted.jpg
| Untuk tabel yang merangkum efek rotasi teks, lihat Opsi teks annotate. Tentu saja font Candice bukan font yang bagus untuk memperlihatkan efek ini, dan detail lain mungkin perlu ditambahkan agar hasilnya tampak lebih 3D. Jika Anda menemukan sesuatu yang menarik, kirimkan kepada saya agar bisa dibagikan ke seluruh dunia. | Baik operasi "-annotate" maupun "-draw skew?" sebenarnya memutar sumbu X dan Y permukaan gambar. Ini berbeda dari efek "-shear" pada gambar yang sudah ada, yang memanjangkan sumbu yang digeser sehingga tinggi (atau lebar) gambar tidak berubah akibat operasi tersebut. |
|---|---|
| Font stempel : Dengan menggambar font tiga kali dalam warna lebih gelap, lebih terang, dan warna aslinya, kita bisa membuat cekungan seperti stempel. |
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill lightblue -annotate +25+65 'Anthony' \
font_stamp.jpg
Perhatikan bagaimana 'penggambaran' font yang terakhir menghapus bagian tengah font. Ini hanya bisa dilakukan pada latar belakang berwarna polos. Lihat Menggunakan gambar mask untuk melihat cara memakainya pada latar belakang acak yang tidak polos. Jika kedua warna itu ditukar, tentu Anda mendapat font timbul, bukan font cekung. Ekstrusi atau font balok 3d: dapat dihasilkan dengan mengulang font berkali-kali.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill gray -annotate +29+69 'Anthony' \
-annotate +28+68 'Anthony' \
-annotate +27+67 'Anthony' \
-annotate +26+66 'Anthony' \
-annotate +25+65 'Anthony' \
-annotate +24+64 'Anthony' \
-fill navy -annotate +23+63 'Anthony' \
font_extrude.jpg
Perhatikan bahwa ini BUKAN bayangan sederhana, melainkan penebalan sungguhan dari font yang digambar. Cara ini sangat repetitif dan dapat dipakai untuk gambar 'berbentuk' apa pun. Untuk contoh lain, lihat Menambah ketebalan thumbnail.
Font bergaris luar : Kita dapat membuat font bergaris luar dengan menggambar beberapa kali memakai offset posisi yang kecil.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-annotate +26+64 'Anthony' \
-annotate +26+66 'Anthony' \
-annotate +24+66 'Anthony' \
-fill white -annotate +25+65 'Anthony' \
font_outlined.jpg
Karena cara ini juga sangat repetitif, ini bukan solusi garis luar yang baik. Karena ImageMagick memungkinkan garis luar font digambar lewat pengaturan "-stroke", ada solusi yang jauh lebih baik. (Lihat Font stroke di bawah.) Meski begitu, penggambaran ulang berkali-kali seperti ini untuk membuat garis luar bisa sangat berguna pada gambar clip-art yang sudah jadi, seperti yang banyak ditemukan di Internet. Teknik ini juga berguna untuk pustaka dan program grafis lain (seperti "GD" dari "PHP", dsb.) yang tidak menyediakan pengaturan "-stroke". Alasan lain menampilkan gaya garis luar ini adalah hasilnya bisa lebih baik saat memberi garis luar pada font dengan ujung yang sangat tajam. Sebagai contoh, di sini kita menggambar font 12 kali untuk memperlihatkan ujung-ujung tajam font. Garis luarnya di sini juga digambar sedikit lebih tebal.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-draw "fill black text 27,67 'Anthony' \
text 25,68 'Anthony' \
text 23,67 'Anthony' \
text 22,65 'Anthony' \
text 23,63 'Anthony' \
text 25,62 'Anthony' \
text 27,63 'Anthony' \
text 28,65 'Anthony' \
fill white text 25,65 'Anthony' " \
font_outlined_12.jpg
Perhatikan juga bahwa warna -fill" penggambaran dapat diubah di dalam argumen "-draw". Garis luar multiwarna : Alasan lain teknik ini berguna adalah Anda tidak terbatas pada satu warna garis luar saat menggambar font. Dengan menggambar ulang font 12 kali dalam 5 warna berbeda dalam urutan yang dirancang sangat cermat, dapat dibuat font "timbul" yang berwarna-warni, dengan sedikit penghalusan warna tepi.
magick -size 320x100 xc:lightblue \
-font Candice -pointsize 72 -gravity center \
-draw "fill navy text 2,2 'Anthony' \
fill navy text 0,3 'Anthony' \
fill navy text 3,0 'Anthony' \
fill dodgerblue text 0,2 'Anthony' \
fill dodgerblue text 2,0 'Anthony' \
fill dodgerblue text -2,2 'Anthony' \
fill dodgerblue text 2,-2 'Anthony' \
fill lavender text -2,-2 'Anthony' \
fill lavender text 0,-3 'Anthony' \
fill lavender text -3,0 'Anthony' \
fill skyblue text 0,-2 'Anthony' \
fill skyblue text -2,0 'Anthony' \
fill blue text 0,0 'Anthony' " \
font_colourful.jpg
Ada metode yang lebih baik untuk membuat font timbul seperti ini, tetapi cara ini berhasil, sederhana, dan hanya memakai beberapa warna, bukan seluruh rentang warna. Font garis luar (stroke) : Pengaturan "-stroke" memungkinkan garis luar font digambar secara langsung. Biasanya warna stroke diatur ke "none" sehingga tidak dipakai. Ketebalan stroke diubah dengan "-strokewidth", yang bawaannya bernilai 1, nilai yang sudah baik.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill white -stroke black -annotate +25+65 'Anthony' \
font_stroke.jpg
Dan berikut contoh dengan lebar stroke yang lebih tebal, yaitu 3.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill white -stroke black -strokewidth 3 \
-annotate +25+65 'Anthony' font_stroke_3.jpg
Perhatikan bagaimana warna stroke menggerogoti bukan hanya bagian luar font, tetapi juga bagian dalamnya. Untuk detail lebih lanjut, lihat hasil percobaan saya di Opsi stroke dan lebar stroke.
Stroke tebal : Dengan menggambar ulang font untuk kedua kalinya, tetapi tanpa stroke diaktifkan, bagian dalam garis terhapus, menghasilkan font bergaris luar tebal yang lebih sedap dipandang.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
-stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
-stroke none -annotate +25+65 'Anthony' \
font_stroke_thick.jpg
Penggunaan pengaturan -stroke" dibawa lebih jauh lagi di Opsi stroke dan strokewidth, tempat aspek operator penggambaran ini dijelajahi lebih dalam. Stroke tipis : Dengan mematikan warna isian, Anda dapat menyisakan garis luar font saja.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill none -stroke black -annotate +25+65 'Anthony' \
font_stroke_thin.jpg
Garis luar ganda : Dengan menggambar ulang memakai beberapa ketebalan stroke, Anda bisa menghasilkan garis luar ganda! Penggambaran pertama boleh memakai warna isian apa pun untuk mengisi bagian dalam font, atau dibiarkan none seperti yang kita lakukan di sini agar latar belakang tidak tersentuh. Namun penggambaran font terakhir harus dilakukan dengan pengaturan isian "none", atau ini tidak akan berhasil.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill none -stroke black -strokewidth 3 -annotate +25+65 'Anthony' \
-fill none -stroke white -strokewidth 1 -annotate +25+65 'Anthony' \
font_stroke_double.jpg
Berbeda dengan 'font stempel' sebelumnya, cara di atas tidak mengharuskan bagian tengah font dihapus. Karena itu, ini akan berfungsi pada latar belakang apa pun tanpa komplikasi. Font psikedelik : Dengan cara serupa, yaitu perlahan mengecilkan lebar stroke sambil menukar warna, efek garis luar psikedelik dapat dihasilkan dengan mudah.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 -fill white \
-stroke black -strokewidth 25 -annotate +25+65 'Anthony' \
-stroke white -strokewidth 20 -annotate +25+65 'Anthony' \
-stroke black -strokewidth 15 -annotate +25+65 'Anthony' \
-stroke white -strokewidth 10 -annotate +25+65 'Anthony' \
-stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
-stroke none -annotate +25+65 'Anthony' \
font_psychedelic.jpg
Efeknya bisa dibuat lebih psikedelik lagi dengan warna-warna yang saling bertabrakan, lebar stroke yang berbeda, atau bahkan sedikit menggeser posisi font. Bereksperimenlah dan lihat apa yang bisa Anda hasilkan. Efek balon : Di sini saya melakukan persis seperti "font stroke tebal" di atas, tetapi murni karena tidak sengaja saya memakai warna stroke putih saat menggambar ulang font. Hasilnya adalah pembesaran font yang menarik, dengan garis luar tebal. Font yang tampak 'menggembung' ini seolah dipompa seperti balon. Ini sekadar menunjukkan bahwa bereksperimen itu ada gunanya, untuk melihat apa yang bisa ditemukan.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -stroke black -strokewidth 5 -annotate +25+65 'Anthony' \
-fill white -stroke white -strokewidth 1 -annotate +25+65 'Anthony' \
font_balloon.jpg
Karakter tersambung : Dengan memakai pengaturan kerning spasi karakter negatif yang kecil (ditambahkan IM v6.4.7-10) dan menggambar font dua kali (seperti pada contoh sebelumnya), Anda dapat membuat semua karakter dalam font 'tebal' saling menyambung, sehingga menghasilkan variasi yang menarik.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-kerning -6 -strokewidth 4 -fill white \
-stroke black -annotate +28+68 Anthony \
-stroke none -annotate +28+68 Anthony \
font_joined.jpg
Karakter bertumpuk : Namun ada variasinya, yaitu menggambar setiap karakter satu per satu sehingga tiap karakter ditumpangkan di atas karakter sebelumnya.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-stroke black -strokewidth 4 -fill white \
-stroke black -annotate +28+68 A -stroke none -annotate +28+68 A \
-stroke black -annotate +90+68 n -stroke none -annotate +90+68 n \
-stroke black -annotate +120+68 t -stroke none -annotate +120+68 t \
-stroke black -annotate +138+68 h -stroke none -annotate +138+68 h \
-stroke black -annotate +168+68 o -stroke none -annotate +168+68 o \
-stroke black -annotate +193+68 n -stroke none -annotate +193+68 n \
-stroke black -annotate +223+68 y -stroke none -annotate +223+68 y \
font_overlapped.jpg
Namun cara ini mengharuskan Anda menentukan (secara manual atau otomatis lewat skrip) posisi yang tepat untuk tiap karakter. Lebar alami tiap karakter dapat diketahui dengan membuat label tiap karakter tanpa pengaturan "-strokewidth" apa pun. Lihat Menentukan metrik font untuk contohnya. Perhatikan bahwa berbeda dengan saat memakai pengaturan "-kerning" (contoh sebelumnya), posisi tiap karakter di atas disesuaikan secara artistik dengan besaran yang berbeda-beda, bukan sekadar nilai tetap yang sederhana. Misalnya, hanya sedikit tumpang tindih antara 't' dan 'h', tetapi jauh lebih banyak tumpang tindih antara karakter 'n' dan 'y'. Karakter acak (jitter) : jika Anda sudah sampai menggambar karakter satu per satu (bertumpuk atau tidak), karakter-karakter itu dapat ditempatkan dalam pola 'jitter' atau acak, terutama dengan offset naik-turun yang berbeda-beda. Ini bahkan bisa dibawa ke titik ekstrem untuk menghasilkan efek khusus seperti...
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-stroke black -strokewidth 4 -fill white \
-stroke black -annotate +26+80 A -stroke none -annotate +26+80 A \
-stroke black -annotate +95+63 n -stroke none -annotate +95+63 n \
-stroke black -annotate +133+54 t -stroke none -annotate +133+54 t \
-stroke black -annotate +156+67 h -stroke none -annotate +156+67 h \
-stroke black -annotate +193+59 o -stroke none -annotate +193+59 o \
-stroke black -annotate +225+59 n -stroke none -annotate +225+59 n \
-stroke black -annotate +266+54 y -stroke none -annotate +266+54 y \
font_jittered.jpg
Font kabur : Penyebaran langsung warna font memakai operator "-blur". Operator ini memungkinkan sebuah gambar disebarkan ke segala arah. Dengan ini Anda dapat menghasilkan bayangan yang tampak lebih lembut, atau efek seperti cat semprot. Contoh berikut memperlihatkan efek yang bisa dicapai dengannya.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-blur 0x3 font_fuzzy.jpg
| Perhatikan bahwa blur diterapkan ke SELURUH gambar pada titik operator itu diberikan. Jika ingin memakai blur pada gambar yang sudah ada, font harus digambar terpisah (di latar belakang transparan), lalu di-overlay ke gambar latar belakang. | Operator "-blur" (atau "-gaussian") mengubah area yang jauh lebih luas daripada yang mungkin diduga. Jika kanvas latar belakang tidak cukup besar, operator ini bisa menghasilkan error. Jika itu terjadi, tambahkan ruang ekstra ke gambar, misalnya dengan "-border", atau batasi radius kerja (argumen pertama) operator. Selain itu, pengaburan gambar umumnya membuat penggunaan "-trim" sesudahnya nyaris sia-sia. Pemangkasan manual atau penyesuaian lain mungkin diperlukan setiap kali blur dipakai pada gambar. |
|---|---|
| Bayangan kabur : Gunakan font kabur sebagai offset untuk bayangan lembut. Perhatikan bahwa kita juga memakai nilai sebaran yang lebih besar. |
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-annotate +30+70 'Anthony' -blur 0x4 \
-fill white -stroke black -annotate +25+65 'Anthony' \
font_shadow_fuzzy.jpg
Bayangan lembut : Operator "-shadow" tidak hanya memungkinkan pembuatan dan pemosisian bayangan kabur yang lembut untuk gambar yang mengandung transparansi, tetapi juga memungkinkan pemakaian warna apa pun dan pengaturan tingkat transparansi umum.
magick -size 300x100 xc:none -font Candice -pointsize 72 \
-fill white -stroke black -annotate +25+65 'Anthony' \
\( +clone -background navy -shadow 70x4+5+5 \) +swap \
-background lightblue -flatten -trim +repage font_shadow_soft.jpg
Untuk informasi lebih lanjut tentang operator "-shadow", lihat Membuat bayangan. Sejak IM v6.3.1, perintah "montage" juga dapat membuat bayangan 'berbentuk' yang lembut untuk gambar yang mengandung transparansi. Artinya, Anda dapat memberi bayangan pada gambar "label:" dengan sangat mudah.
montage -background none -fill white -font Candice \
-pointsize 72 label:'Anthony' +set label \
-shadow -background lightblue -geometry +5+5 \
font_montage_shadow.jpg
Namun Anda belum bisa mengendalikan offset, warna, atau kadar blur bayangan montage tersebut (untuk saat ini). Garis luar lembut : gunakan font kabur sebagai batas garis luar. Ini seperti memakai font asli sebagai mask untuk pistol semprot cat.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-annotate +25+65 'Anthony' -blur 0x5 \
-fill white -annotate +25+65 'Anthony' font_outline_soft.jpg
Perhatikan bahwa tepinya sangat terang, karena bukan hanya warna hitam yang menyebar keluar, warna latar belakang pun menyebar ke dalam, sehingga tepinya hanya 50% gelap. Satu cara memperbaikinya adalah memakai garis luar bayangan, dengan penyesuaian level untuk membenahi keterangan itu, meski itu memakai teknik pemrosesan gambar yang sangat lanjut. Garis luar lembut lebih pekat : Cara lain membenahi terangnya garis luar lembut adalah mem-blur font yang punya garis luar stroke lebar. Ini efektif menggeser titik blur 50% lebih jauh dari tepi font. Ini juga memungkinkan nilai blur yang lebih besar lagi dipakai, sehingga warna hitam menyebar lebih jauh.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-stroke black -strokewidth 8 -annotate +25+65 'Anthony' -blur 0x8 \
-fill white -stroke none -annotate +25+65 'Anthony' \
font_denser_soft_outline.jpg
Sebagai contoh praktis metode ini, lihat contoh yang dihasilkan di Menambahkan label gambar ke thumbnail dan contoh terakhir di Menganotasi di atas gambar.
Bayangan blur menurut jarak : Dengan diperkenalkannya pemetaan blur variabel, kini bayangan dapat di-blur sehingga makin buram seiring jarak tampak bayangan itu dari objek yang membentuknya. Misalnya, di sini saya mengambil font bayangan condong dan mem-blur bayangannya sehingga tajam di bagian atas dan makin buram di bagian bawah.
magick -size 320x40 xc:lightblue -font Candice -pointsize 72 \
-fill RoyalBlue -annotate 0x125+20+0 'Anthony' \
\( -size 320x45 gradient:black -append \) \
-compose Blur -set option:compose:args 20x5+45 -composite \
\( -size 320x60 xc:lightblue \
-fill Navy -annotate 0x0+20+59 'Anthony' \) \
+swap -append font_var_blur.jpg
Perhatikan bahwa saya tidak sekadar memakai blur melingkar, karena cahaya yang jatuh ke permukaan miring akan membentuk elips, bukan lingkaran. Karena itu blur-nya juga perlu membentuk elips. Pada dasarnya saya memakai varian blur elips untuk mencapai efek ini. Satu poin terakhir: memakai argumen sudut annotate untuk membuat teks condong (lihat Penggunaan argumen annotate) mungkin bukan cara terbaik menghasilkan bayangan 3d awal seperti ini. Pada dasarnya ia tidak bisa membuat bayangan lebih pendek atau lebih panjang, seperti bayangan sungguhan, karena hanya melakukan geser rotasi. Metode yang lebih baik adalah memakai distorsi affine tiga titik yang memberi kendali lebih baik atas penempatan bayangan (lihat Bayangan 3d, memakai geser affine). Tentu Anda tetap memerlukan teknik blur variabel agar tampak benar.
Font cetakan kotor : Piksel disebarkan sedikit, lalu di-blur, dan di-threshold beberapa kali untuk menghaluskan garis luar akhirnya. Hasilnya adalah font yang tampak seperti dicetak di kertas koran yang kasar.
magick -size 320x100 xc: \
-font Candice -pointsize 72 -annotate +25+65 'Anthony' \
-spread 1 -blur 0x1 -threshold 50% -blur 0x1 font_dirty_print.jpg
Font ini berasal dari diskusi How to dirty a font yang memuat metode lain yang lebih kompleks.
Font bevel : Operator shade dapat dipakai untuk menghasilkan font 3D yang tampak sangat bagus dengan tepi bevel yang melengkung mulus.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-shade 140x45 font_beveled.jpg
Ini jauh lebih bagus daripada font stempel, tetapi shade hanya menghasilkan gambar grayscale. Di sisi lain, ada banyak metode yang dapat mengganti grayscale hasil di atas dengan warna apa pun yang diperlukan. Masalah terbesar memakai shade untuk mem-'bevel' font adalah ketebalan bevel-nya tidak mudah diatur. Pada dasarnya ia terpaku pada ketebalan kira-kira 5 piksel, berapa pun ukuran font yang dipakai.
Font kerucut : Dengan memakai metode jarak morfologi yang baru (sejak IM v6.6.2) yang digabungkan dengan operator shade, seluruh font dapat dibuat tampak seperti punggungan gunung 3 dimensi. Ini memang memerlukan penanganan khusus pada piksel anti-aliasing sebagaimana di Jarak dengan bentuk ter-anti-alias, tetapi hasilnya adalah font berbentuk kerucut yang mirip gunung.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Euclidean:4,1000 -auto-level \
-shade 135x30 -auto-level +level 10,90% font_conic.jpg
Dengan menambahkan sedikit "-adaptive-blur", hasilnya dapat dihaluskan untuk memberi tampilan yang lebih baik dan anehnya berkilau pada font yang dihasilkan.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Euclidean:4,1000 -auto-level \
-shade 135x30 -auto-level +level 10,90% \
-adaptive-blur 0x2 font_conic_smoothed.jpg
Memindahkan "-adaptive-blur" ke sebelum penggunaan shade akan membuat tepiannya di-blur, tetapi bukan punggungan tengah (kerangka) bentuk font. Hasilnya tampak seperti punggungan tajam yang mendorong naik selembar karet.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Euclidean:4,1000 -auto-level \
-adaptive-blur 0x2 \
-shade 135x30 -auto-level +level 10,90% font_conic_ridge.jpg
Memakai kernel jarak yang berbeda, seperti Chebyshev, bekerja lebih baik dengan font yang tampak lebih beraturan, seperti keluarga font Arial.
magick -size 320x100 xc:black -font ArialBk -pointsize 70 \
-fill white -annotate +5+70 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Chebyshev:1,1000 -auto-level \
-shade 135x30 -auto-level +level 10,90% font_chebyshev.jpg
Font bevel dalam : Membatasi jarak dengan memotong fungsi jarak akan mem-bevel tepian bentuknya saja.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +25+65 'Anthony' \
-gamma 2 +level 0,1000 -white-threshold 999 \
-morphology Distance Euclidean:4,1000 -level 0,5000 \
-shade 135x30 -auto-level +level 10,90% font_inner_bevel.jpg
Font lengkung : Operator "-wave" (lihat Pergeseran gelombang sinus untuk detailnya) akan menggeser piksel gambar secara vertikal hingga membentuk lengkungan. Garis vertikal tetap vertikal, dengan karakter yang digeser miring untuk menghasilkan kurvanya.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-background lightblue -wave -50x640 -crop x110+0+10 \
font_wavy.jpg
Perhatikan bahwa untuk memakai "-wave" membuat lengkungan, diperlukan 'panjang gelombang' dua kali lebar gambar (2 × 320 atau 640 piksel). Selain itu, karena "-wave" menambah ruang ekstra ke gambar sebesar lengkungannya, ruang itu perlu dipangkas atau dipotong sesudahnya. Ini cara yang sederhana dan cepat, tetapi efektif, untuk melengkungkan teks. Font busur : Operator distorsi umum juga menyediakan metode pelengkungan teks/gambar lain. Metode 'Arc' misalnya akan menekuk font menjadi busur lingkaran sejati, bukan 'lengkungan' bergeser vertikal seperti contoh sebelumnya.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-distort Arc 120 -trim +repage \
-bordercolor lightblue -border 10 font_arc.jpg
Font lingkaran : Anda bahkan bisa membawanya ke titik ekstrem dan melilitkan teks menjadi lingkaran penuh, atau hampir penuh.
magick -font Candice -pointsize 32 -background lightblue \
-fill navy label:"Anthony's IM Examples" \
-virtual-pixel background -distort Arc 340 \
font_circle.jpg
Lihat distorsi busur untuk opsi dan kemungkinan lainnya. Font spiral : Dengan menambah sedikit rotasi untuk memiringkan font pada suatu sudut sebelum dililitkan, lingkarannya dapat diubah menjadi spiral.
magick -font Candice -pointsize 32 -background lightblue \
-fill navy label:"Anthony's IM Examples" \
-rotate 12 -virtual-pixel background -distort Arc 360 \
-trim -bordercolor lightblue -border 5x5 font_spiral.jpg
Namun tinggi teks (secara radial) tetap konstan; ia tidak diregangkan atau dimampatkan saat makin mendekati pusat, sehingga menimbulkan distorsi aspek yang kuat pada karakter. Ini bisa diatasi dengan memakai distorsi perspektif sebagai bagian dari rotasi teks, untuk menyesuaikan tinggi font, sebelum menerapkan distorsi Arc. Masalah teknik ini adalah putaran spiralnya hanya bisa satu kali, meski dengan beberapa baris dan sedikit kecermatan menyelaraskan barisnya, beberapa spiral bisa dihasilkan. Jika Anda mencobanya, maukah mengirimkan contohnya kembali kepada saya?
Font vibrato : Operator "-wave" yang kita pakai di font lengkung di atas juga dapat dipakai pada frekuensi lebih tinggi dan amplitudo lebih kecil untuk membuat font yang bergetar. Dan dengan menambah beberapa operasi rotasi, getarannya bahkan bisa dibuat pada sudut mana pun yang Anda suka!
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +25+65 'Anthony' \
-background lightblue -rotate 85 -wave 2x5 -rotate -85 \
-gravity center -crop 320x100+0+0 +repage font_vibrato.jpg
Untuk informasi lebih lanjut tentang distorsi seperti ini, lihat halaman contoh Melengkungkan gambar, dan khususnya operator distorsi gelombang. Font komet : Salah satu operator blur khusus, "-motion-blur", memungkinkan pembuatan ekor seperti komet pada objek dalam gambar.
magick -size 340x120 xc:lightblue -font Candice -pointsize 72 \
-fill navy -annotate +45+95 'Anthony' -motion-blur 0x25+65 \
-fill black -annotate +45+95 'Anthony' -motion-blur 0x1+65 \
font_comet.jpg
Font gabungan ini bisa dibuat lebih hidup dengan warna-warna berbeda untuk menciptakan kesan api yang sungguhan. Anda juga bisa berbuat jauh lebih banyak dengan blur khusus, tetapi seluruh aspek IM ini masih eksperimental dan sintaksis operator-operator ini bisa berubah dalam waktu dekat. Font berasap : gabungkan ini dengan wave, dan font komet bisa dibuat tampak seperti asap, bau, atau bahkan api yang membubung dari font!
magick -size 320x120 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +25+95 'Anthony' -motion-blur 0x25+90 \
-background lightblue -rotate 60 -wave 3x35 -rotate -60 \
-gravity center -crop 320x120+0+0 +repage +gravity \
-fill navy -annotate +25+95 'Anthony' font_smoking.jpg
Apakah Anda punya transformasi menarik untuk ditambahkan ke daftar di atas?
Menggunakan gambar mask dengan font
Menggambar "font stempel" pada gambar latar belakang sebenarnya jauh lebih sulit daripada kebanyakan metode pembuatan font mewah yang saya rinci di atas. Sebabnya, sebagian font asli dihapus, dan itu menjadi masalah saat menggambarnya pada latar belakang yang bukan sekadar warna polos. Berikut gambar font komposit yang kita buat di atas.
magick -size 320x100 xc:lightblue -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill lightblue -annotate +25+65 'Anthony' \
font_stamp.jpg
Jika kita mencoba menggambar font itu pada latar belakang transparan (gambar format PNG) dengan metode yang persis sama, kita gagal begitu saja...
magick -size 320x100 xc:transparent -font Candice -pointsize 72 \
-fill black -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill transparent -annotate +25+65 'Anthony' \
trans_stamp.png
Yang terjadi adalah kita mencoba menghapus bagian tengah font dengan warna "transparansi". Tetapi seperti yang Anda lihat, menggambar dengan transparansi memang tidak menggambar apa-apa! Jadi hasil di atas sama saja seolah operator -annotate" 'penghapus' yang terakhir tidak bekerja sama sekali. Ada sekitar setengah lusin solusi untuk masalah ini. Saya akan menyajikan tiga metode di sini, sementara yang lain dibahas di berbagai tempat lain pada halaman contoh IM. Yang paling sederhana barangkali bukan memperbaiki font di atas sama sekali, melainkan memakai 'mask' saat menggambarnya ke gambar latar belakang untuk memberi tahu perintah "magick composite" agar mengabaikan bagian tengahnya. Gambar mask "magick composite" adalah gambar grayscale: hitam murni untuk bagian yang akan transparan, dan putih murni untuk bagian yang Anda inginkan tampak sepenuhnya (opak). Corak abu-abu apa pun akan digambar sebagai semitransparan, melebur ke warna latar belakang di bawahnya. Nah, gambar kita di atas sudah hampir benar, jadi mari kita mask saja semua bagian yang tidak kita inginkan. Kita mulai dengan latar belakang hitam (transparan penuh), lalu menggambar apa pun yang kita inginkan dengan putih, dan yang tidak kita inginkan dengan hitam.
magick -size 320x100 xc:black -font Candice -pointsize 72 \
-fill white -annotate +24+64 'Anthony' \
-fill white -annotate +26+66 'Anthony' \
-fill black -annotate +25+65 'Anthony' \
mask_mask.jpg
Perhatikan bahwa mask yang kita buat bukan sekadar hitam-putih, melainkan memiliki beragam corak abu-abu di sepanjang tepi area akibat anti-aliasing (lihat Contoh anti-aliasing untuk detailnya). Piksel abu-abu ini membuat tepi gambar akhir lebih halus, dan sangat penting, karena piksel tersebut mewakili piksel semitransparan (hanya setengah terlihat). Sekarang setelah punya mask, kita dapat me-mask bagian gambar yang tidak diinginkan. Kita bisa melakukannya sambil menggambar (menumpangkan) gambar itu ke latar belakang plasma. Perhatikan urutan ketiga argumen gambarnya (font, latar belakang, lalu mask).
magick -size 320x180 plasma: -shave 0x40 plasma_background.jpg
magick composite trans_stamp.png plasma_background.jpg mask_mask.jpg \
mask_result.jpg
Bentuk "magick -composite" tiga argumennya adalah...
magick plasma_background.jpg trans_stamp.png mask_mask.jpg \
-composite mask_result2.jpg
Hasilnya bagus, tetapi kini kita butuh dua gambar untuk menggambar font gabungan itu. Akan lebih baik jika kita hanya butuh satu gambar, dengan mask yang tertanam langsung di dalam gambar itu sendiri. Pada dasarnya kita ingin mengganti seluruh kanal alpha gambar font kita dengan salinan mask gambar font yang kita buat. Artinya, kita menggabungkan gambar font (yang memasok warna piksel) langsung dengan mask-nya (yang memasok kanal alpha gambar). Pengaturan komposisi alpha 'CopyOpacity' melakukan penggantian ini. Perhatikan urutan argumen dalam perintahnya. Dalam kasus ini, font itu sendiri adalah gambar latar belakang, sementara mask adalah gambar yang ditumpangkan ke gambar latar belakang.
magick composite -compose CopyOpacity mask_mask.jpg trans_stamp.png \
trans_stamp3.png
magick composite trans_stamp3.png plasma_background.jpg mask_result3.jpg
| Hasil dari semua ini: bagian tengah font akhirnya terhapus dengan benar karena dibuat transparan penuh. Gambar tunggal yang dihasilkan dengan demikian dapat ditumpangkan ke latar belakang apa pun dengan mudah, tanpa memerlukan gambar mask tambahan. | Mengecilkan stempel font transparan yang lebih besar seperti di atas menghasilkan watermark yang sangat bagus. Pengecilan membuat garis luarnya kurang opak dan kurang menonjol, persis seperti seharusnya sebuah watermark. Kedua warnanya juga memastikan tandanya terlihat andal baik pada gambar yang sangat terang maupun yang sangat gelap. |
|---|---|
| Untuk informasi lebih lanjut tentang penggunaan mask gambar, lihat Menyunting mask gambar. |
Pemrosesan font tingkat lanjut
Dengan menggabungkan teknik-teknik di atas, dengan warna yang tepat dan font mewah lain yang tersedia, dapat dihasilkan efek yang fantastis, yang sering tampak sama sekali berbeda dari teknik asli yang diperlihatkan di atas.
Font yang lebih kompleks - sebuah contoh
Sebagai contoh, di sini kita membuat sepotong teks yang sangat kompleks dan berwarna-warni.
magick -font Times-Bold -pointsize 64 \
-background none label:"Colorful Arc" \
\( +clone -sparse-color Barycentric '0,%h blue %w,0 red' \
\) -compose In -composite \
-virtual-pixel transparent -distort arc 120 \
\( +clone -background black -shadow 100x2+4+4 \
\) +swap -background white -compose over -layers merge +repage \
colorful_arc.jpg
Perintah kompleks di atas ditata agar tiap langkah utama pemrosesan gambar berada di baris terpisah. Pertama, gambar teks dibuat. Kemudian gradien dua titik dibuat sebagai overlay warna. Metode pewarnaan lain seperti gambar acak ter-blur, plasma fraktal, atau kanvas yang di-tile juga bisa dipakai. Overlay warna itu lalu dipakai untuk mewarnai teks memakai operator komposisi alpha In. Teks berwarna kemudian didistorsi memakai distorsi busur, dan akhirnya bayangan dibuat dan digabung sebagai layer di bawah teks. Metode terakhir itu juga menghapus transparansi, menggantinya dengan putih, sebelum menyimpan ke JPEG. Untuk informasi lebih lanjut tentang pemrosesan gambar kompleks semacam ini, lihat Pemrosesan gambar kompleks dan debugging.
Papan neon
Berikut contoh sederhana lain. Dengan memakai font garis luar lembut pada latar belakang gelap, tetapi dengan warna yang serba sama, dan font yang cocok, dapat dihasilkan efek 'papan neon' yang sederhana...
magick -fill dodgerblue -background black -font Anaconda -pointsize 72 \
label:' I M Examples ' -bordercolor black -border 30x30 \
\( +clone -blur 0x25 -level 0%,50% \) \
-compose screen -composite neon_sign.gif
Dan dengan sedikit kerja tambahan, Anda bahkan bisa menganimasikannya! Tetapi itu saya serahkan sebagai latihan bagi pembaca. Lihat Contoh IM tingkat lanjut untuk efek khusus seperti efek "Gel" dan efek "Aqua". Untuk beberapa contoh efek font lain yang mungkin ingin dicoba, lihat XaraXone, Using Contour Tool. IM dapat dengan mudah membuat efek kontur seperti yang diperlihatkan di sana.
Efek metalik
Efek ini pada dasarnya adalah efek pembulatan dan penggantian Color Lookup Table. Lihat diskusi Metallic Effect. Contoh kerja oleh snibgo
# Generate a blured input font shaped mask
# first blur-level is a rounding or 'puddling' effect
# the second blur is the important one for the metallic effect.
magick -background none -pointsize 160 -font Candice label:" Anthony " \
-blur 0x5 -channel A -level 40%,60% +channel \
-blur 0x3 metallic_input.png
# Metallic Color Lookup Table
magick \
-size 1x1000 gradient: -gamma 0.9 \
-function Sinusoid 2.25,0,0.5,0.5 \
\( gradient:'rgb(100%,100%,80%)-black' -gamma 1 \) \
+swap \
-compose Overlay -composite \
-rotate 90 \
metallic_clut.png
# Give blurred font a metallic look
# * first create a vertial gradient
# * then merge this with a 'shade' reflective gradient
# * before applying the color to the resulting gradient
# * finally add a shadow.
magick metallic_input.png -set colorspace RGB \
\( -clone 0 -alpha off \
-sparse-color Barycentric "0,0 White 0,%[fx:h-1] Black" \
-alpha on \
\) \
\( -clone 0 -alpha extract -shade 135x45 -auto-gamma -auto-level \
-alpha on -channel A -level 0%x10% +channel \
\) \
-delete 0 -compose Overlay -composite \
metallic_clut.png -clut -set colorspace sRGB \
\
\( +clone -background navy -shadow 80x2+5+5 \
\) +swap -background None -compose Over -layers merge \
\
-trim +repage metallic.png
![[IM Output]](../static/img/fonts/font_tile.jpg)
![[IM Output]](../static/img/fonts/font_gradient.jpg)
![[IM Output]](../static/img/fonts/font_upsidedown.jpg)
![[IM Output]](../static/img/fonts/font_shadow.jpg)
![[IM Output]](../static/img/fonts/font_slewed.jpg)
![[IM Output]](../static/img/fonts/font_slanted.jpg)
![[IM Output]](../static/img/fonts/font_stamp.jpg)
![[IM Output]](../static/img/fonts/font_extrude.jpg)
![[IM Output]](../static/img/fonts/font_outlined.jpg)
![[IM Output]](../static/img/fonts/font_outlined_12.jpg)
![[IM Output]](../static/img/fonts/font_colourful.jpg)
![[IM Output]](../static/img/fonts/font_stroke.jpg)
![[IM Output]](../static/img/fonts/font_stroke_3.jpg)
![[IM Output]](../static/img/fonts/font_stroke_thick.jpg)
![[IM Output]](../static/img/fonts/font_stroke_thin.jpg)
![[IM Output]](../static/img/fonts/font_stroke_double.jpg)
![[IM Output]](../static/img/fonts/font_psychedelic.jpg)
![[IM Output]](../static/img/fonts/font_balloon.jpg)
![[IM Output]](../static/img/fonts/font_joined.jpg)
![[IM Output]](../static/img/fonts/font_overlapped.jpg)
![[IM Output]](../static/img/fonts/font_jittered.jpg)
![[IM Output]](../static/img/fonts/font_fuzzy.jpg)
![[IM Output]](../static/img/fonts/font_shadow_fuzzy.jpg)
![[IM Output]](../static/img/fonts/font_shadow_soft.jpg)
![[IM Output]](../static/img/fonts/font_montage_shadow.jpg)
![[IM Output]](../static/img/fonts/font_outline_soft.jpg)
![[IM Output]](../static/img/fonts/font_denser_soft_outline.jpg)
![[IM Output]](../static/img/fonts/font_var_blur.jpg)
![[IM Output]](../static/img/fonts/font_dirty_print.jpg)
![[IM Output]](../static/img/fonts/font_beveled.jpg)
![[IM Output]](../static/img/fonts/font_conic.jpg)
![[IM Output]](../static/img/fonts/font_conic_smoothed.jpg)
![[IM Output]](../static/img/fonts/font_conic_ridge.jpg)
![[IM Output]](../static/img/fonts/font_chebyshev.jpg)
![[IM Output]](../static/img/fonts/font_inner_bevel.jpg)
![[IM Output]](../static/img/fonts/font_wavy.jpg)
![[IM Output]](../static/img/fonts/font_arc.jpg)
![[IM Output]](../static/img/fonts/font_circle.jpg)
![[IM Output]](../static/img/fonts/font_spiral.jpg)
![[IM Output]](../static/img/fonts/font_vibrato.jpg)
![[IM Output]](../static/img/fonts/font_comet.jpg)
![[IM Output]](../static/img/fonts/font_smoking.jpg)
![[IM Output]](../static/img/fonts/trans_stamp.png)
![[IM Output]](../static/img/fonts/mask_mask.jpg)
![[IM Output]](../static/img/fonts/mask_result.jpg)
![[IM Output]](../static/img/fonts/mask_result2.jpg)
![[IM Output]](../static/img/fonts/trans_stamp3.png)
![[IM Output]](../static/img/fonts/mask_result3.jpg)
![[IM Output]](../static/img/fonts/colorful_arc.jpg)
![[IM Output]](../static/img/fonts/neon_sign.gif)
![[IM Output]](../static/img/fonts/metallic.png)