Anatomi baris perintah • Nama file input • Opsi baris perintah • Nama file output
Alat baris perintah ImageMagick bisa sesederhana ini:
magick image.jpg image.png
Atau bisa juga rumit dengan segudang opsi, seperti pada contoh berikut:
magick label.gif -alpha Set \
\( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \
\( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -alpha Off \) \
-delete 0 +swap -compose Multiply -composite button.gif
Contoh perintah ini cukup panjang sehingga harus ditulis dalam beberapa baris, jadi kami memformatnya agar lebih mudah dibaca dengan menyisipkan garis miring terbalik (). Garis miring terbalik adalah karakter penyambung baris (line continuation) di Linux. Di shell Windows, gunakan tanda sisipan (^) untuk penyambungan baris. Kami menggunakan gaya Linux di halaman-halaman web ini, seperti di atas. Namun, terkadang baris-barisnya dibungkus oleh browser Anda jika jendela browser cukup kecil, tetapi baris perintah yang ditampilkan berwarna putih tetap dimaksudkan untuk diketik sebagai satu baris. Karakter penyambung baris tidak perlu dimasukkan. Tanda kurung yang di-escape di atas menggunakan garis miring terbalik tidak di-escape pada Windows. Ada beberapa perbedaan lain antara Windows dan Linux (misalnya menyangkut tanda kutip), tetapi kami akan membahas sebagian isu tersebut nanti saat muncul.
Untuk sebagian besar contoh baris perintah di situs ini, jika ada versi setara yang bisa dijalankan di Windows, akan tersedia menu drop-down di kanan bawah yang memungkinkan Anda beralih sistem operasi mana yang sedang Anda pratinjau untuk perintah tersebut.
Tanpa mengetahui banyak tentang baris perintah ImageMagick, Anda mungkin sudah bisa menduga bahwa perintah pertama di atas mengonversi gambar berformat JPEG menjadi format PNG. Namun, hanya sedikit orang yang menyadari bahwa perintah kedua yang lebih rumit membuat label dua dimensi yang datar tampak tiga dimensi dengan tekstur kaya dan kedalaman semu:
Di sini kami menampilkan persentase penyelesaian sebuah tugas sebagai silinder berbayang:
Mengingat kompleksitas rendering ini, Anda mungkin terkejut bahwa semuanya dicapai hanya dengan satu baris perintah:
magick -size 320x90 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \
-draw 'roundrectangle 16, 5, 304, 85 20,40' +tile -fill snow \
-draw 'roundrectangle 264, 5, 304, 85 20,40' -tile gradient:chartreuse-green \
-draw 'roundrectangle 16, 5, 180, 85 20,40' -tile gradient:chartreuse1-chartreuse3 \
-draw 'roundrectangle 140, 5, 180, 85 20,40' +tile -fill none \
-draw 'roundrectangle 264, 5, 304, 85 20,40' -strokewidth 2 \
-draw 'roundrectangle 16, 5, 304, 85 20,40' \( +clone -background snow4 \
-shadow 80x3+3+3 \) +swap -background none -layers merge \( +size -pointsize 90 \
-strokewidth 1 -fill red label:'50 %' -trim +repage \( +clone -background firebrick3 \
-shadow 80x3+3+3 \) +swap -background none -layers merge \) -insert 0 -gravity center \
-append -background white -gravity center -extent 320x200 cylinder_shaded.png
Jalankan skrip ini yang disumbangkan oleh Geemack. Anda akan melihat sekilas kekuatan dan fleksibilitas baris perintah ImageMagick:
magick -background none -size 960x960 xc:black \( xc:darkred -duplicate 1 +append \) \
xc:gold \( xc:teal -duplicate 2 +append \) -modulate 100,100,"%[fx:rand()*200]" \
xc:white -scale x1 +append -write mpr:clut +delete radial-gradient: mpr:clut \
-clut -scale 100x4% -wave "%[fx:rand()*24+24]"x"%[fx:w/ceil(rand()*4+1)]" -extent "%[w]x%[w]" \
-roll +0+"%[fx:(rand()*w*0.05)+(w*0.51)]" \( +clone -blur 0x4 \) -insert 0 -composite \
-duplicate "%[fx:floor(rand()*3+3)*2-1]" -set option:rot "%[fx:180/n]" -virtual-pixel tile \
-virtual-pixel none -distort SRT "%[fx:t*360/n]" +repage -flatten -extent 100x50% \
\( +clone -rotate 180 \) -append +channel -virtual-pixel none -distort SRT "0.96 %[fx:rand()*360]" \
\( +clone -flop \) +repage -insert "%[fx:round(rand())]" -background black \
-flatten -brightness-contrast 20,20 -normalize dragonFire.png
Untuk memastikan skrip ini dapat dijalankan di Windows, ubah setiap tanda kurung dengan garis miring terbalik (() menjadi tanda kurung biasa, ubah garis miring terbalik () menjadi ^, dan gandakan tanda persen (%).
Pada bagian-bagian berikutnya, kami membedah anatomi baris perintah ImageMagick. Semoga, setelah membaca dengan cermat dan memahami cara kerja baris perintah dengan lebih baik, Anda akan mampu menyelesaikan tugas pemrosesan gambar yang rumit tanpa perlu beralih ke antarmuka program yang terkadang terasa menakutkan.
Lihat Examples of ImageMagick Usage untuk bantuan tambahan saat menggunakan ImageMagick dari baris perintah.
Anatomi baris perintah
Baris perintah ImageMagick terdiri atas
- satu atau beberapa nama file input yang wajib ada.
- nol, satu, atau beberapa pengaturan gambar (image settings).
- nol, satu, atau beberapa operator gambar (image operators).
- nol, satu, atau beberapa operator urutan gambar (image sequence operators).
- nol, satu, atau beberapa tumpukan gambar (image stacks).
- nol atau satu nama file gambar output (wajib untuk magick, convert, composite, montage, compare, import, conjure).
Anda dapat menemukan penjelasan rinci mengenai setiap bagian penyusun baris perintah pada bagian-bagian berikut.
Nama file input
ImageMagick memperluas konsep nama file input hingga mencakup:
- globbing nama file
- format gambar eksplisit
- penggunaan gambar dan pola bawaan
- STDIN, STDOUT, dan deskriptor file
- pemilihan frame tertentu dari sebuah gambar
- pemilihan wilayah pada sebuah gambar
- pemaksaan resize gambar secara inline
- pemaksaan crop gambar secara inline
- penggunaan referensi nama file
Perluasan-perluasan ini dijelaskan pada beberapa paragraf berikut.
Perlu diperhatikan, secara default, jika sebuah opsi baris perintah juga merupakan nama file (misalnya, -quality), opsi tersebut akan ditafsirkan sebagai nama file. Gunakan -define registry:option:pedantic=true agar ditafsirkan sebagai opsi.
Globbing nama file
Pada shell Linux, karakter tertentu seperti tanda bintang (*) dan tanda tanya (?) secara otomatis menghasilkan daftar nama file berdasarkan kecocokan pola. Fitur ini dikenal sebagai globbing. ImageMagick mendukung globbing nama file untuk sistem, seperti Windows, yang tidak mendukungnya secara native. Misalnya, andaikan Anda ingin mengonversi 1.jpg, 2.jpg, 3.jpg, 4.jpg, dan 5.jpg pada direktori Anda saat ini menjadi animasi GIF. Anda dapat dengan mudah merujuk ke semua file JPEG tersebut dengan perintah berikut:
magick *.jpg images.gif
Format gambar eksplisit
Gambar disimpan dalam beragam format gambar, termasuk yang lebih dikenal seperti JPEG, PNG, TIFF, dan lain-lain. ImageMagick harus mengetahui format gambar tersebut sebelum dapat membaca dan memprosesnya. Sebagian besar format memiliki tanda tangan (signature) di dalam gambar yang secara unik mengidentifikasi formatnya. Jika tidak ada, ImageMagick memanfaatkan ekstensi nama file untuk menentukan formatnya. Misalnya, image.jpg atau image.JPG memberi tahu ImageMagick bahwa gambar yang dibaca berformat JPEG.
Dalam beberapa kasus, gambar mungkin tidak memiliki tanda tangan dan/atau nama filenya tidak menunjukkan format gambar. Dalam kasus seperti ini, format gambar eksplisit harus ditentukan. Misalnya, andaikan gambar kita bernama image dan berisi nilai intensitas merah, hijau, dan biru mentah (raw). ImageMagick tidak memiliki cara untuk menentukan format gambar secara otomatis, sehingga kita menentukannya secara eksplisit:
magick -size 640x480 -depth 8 rgb:image image.png
Gambar dan pola bawaan
ImageMagick memiliki sejumlah gambar dan pola bawaan. Untuk menggunakan pola papan catur (checkerboard), misalnya, gunakan:
magick -size 640x480 pattern:checkerboard checkerboard.png
STDIN, STDOUT, dan deskriptor file
Linux dan Windows memungkinkan output dari satu perintah di-pipe ke input perintah lain. ImageMagick memungkinkan data gambar dibaca dan ditulis dari standard streams STDIN (input standar) dan STDOUT (output standar), masing-masing menggunakan nama file semu -. Pada contoh ini kita mem-pipe output magick ke program display:
magick logo: gif:- | magick display gif:-
Format eksplisit kedua "gif:" bersifat opsional pada contoh sebelumnya. Format gambar GIF memiliki tanda tangan unik di dalam gambar sehingga perintah display milik ImageMagick dapat langsung mengenali formatnya sebagai GIF. Program magick juga menerima STDIN sebagai input dengan cara ini:
magick rose: gif:- | magick - -resize "200%" bigrose.jpg'
Pipe lain dapat diakses melalui deskriptor filenya masing-masing (sejak versi 6.4.9-3). Deskriptor file 0, 1, dan 2 masing-masing dicadangkan untuk standard streams STDIN, STDOUT, dan STDERR, tetapi pipe yang terkait dengan nomor deskriptor file N>2 dapat diakses menggunakan nama semu fd:N. (Nama semu fd:0 dan fd:1 dapat digunakan untuk STDIN dan STDOUT.) Contoh berikut menunjukkan cara menggabungkan (append) data gambar yang di-pipe dari file dengan deskriptor 3 dan 4, lalu mengarahkan hasilnya ke file dengan nomor deskriptor 5.
magick fd:3 fd:4 -append fd:5
Bila diperlukan, format gambar eksplisit dapat diberikan seperti disebutkan sebelumnya, seperti pada contoh berikut.
magick gif:fd:3 jpg:fd:4 -append tif:fd:5
Memilih frame
Beberapa format gambar berisi lebih dari satu frame gambar. Mungkin Anda hanya menginginkan gambar pertama, gambar terakhir, atau beberapa gambar di antaranya. Anda dapat menentukan frame gambar mana yang akan dibaca dengan menambahkan rentang frame yang diapit tanda kurung siku di belakang nama file gambar. Di sini gambar kita (sebuah GIF animasi) berisi lebih dari satu frame, tetapi kita hanya menginginkan frame pertama:
magick 'images.gif[0]' image.png
Shell Linux umumnya menafsirkan tanda kurung siku, sehingga kita mengapit nama file di atas dengan tanda kutip. Pada command shell Windows, tanda kurung siku tidak ditafsirkan, tetapi menggunakan tanda kutip pun tidak masalah. Namun, pada sebagian besar kasus, peran tanda kutip tunggal dan tanda kutip ganda saling bertukar antara Linux dan Windows, sehingga pengguna Windows umumnya perlu mencoba tanda kutip ganda di tempat kita menampilkan tanda kutip tunggal, dan sebaliknya.
Anda dapat membaca lebih dari satu gambar dari sebuah urutan (sequence) menggunakan rentang frame. Misalnya, Anda dapat mengekstrak empat frame pertama dari sebuah urutan gambar:
magick 'images.gif[0-3]' images.mng
Secara default, langkahnya adalah satu frame setiap kali sehingga frame 0, 1, 2, dan 3 dikembalikan. Atur langkah menjadi 2 dengan -define frames:step=2, dan sebagai gantinya kita mendapatkan frame 0 dan 2.
Terakhir, Anda dapat membaca lebih dari satu gambar dari sebuah urutan secara tidak berurutan. Perintah berikut mengambil gambar keempat dalam urutan, diikuti gambar ketiga, lalu gambar kelima:
magick 'images.gif[3,2,4]' images.mng
Perhatikan bahwa pada dua perintah terakhir, hanya satu gambar yang ditulis. Pada kasus ini, karena tipe gambarnya adalah MNG, outputnya berupa file multi-frame karena format MNG mendukung banyak frame. Seandainya format outputnya adalah JPG, yang hanya mendukung frame tunggal, outputnya akan terdiri atas frame-frame terpisah. Selengkapnya tentang hal ini dibahas di bawah, pada bagian Nama File Output.
Memilih wilayah gambar
Gambar raw adalah urutan intensitas warna tanpa informasi meta tambahan seperti lebar, tinggi, atau tanda tangan gambar. Dengan format gambar raw, Anda harus menentukan lebar dan tinggi gambar, tetapi Anda juga dapat menentukan wilayah gambar yang akan dibaca. Pada contoh kita, gambar berformat RGB 8-bit raw dengan lebar 6000 piksel dan tinggi 4000 piksel. Namun, kita hanya menginginkan wilayah berukuran 600 kali 400 di dekat tengah gambar:
magick -size 6000x4000 -depth 8 'rgb:image[600x400+1900+2900]' image.jpg
Anda dapat memperoleh hasil yang sama dengan opsi -extract:
magick -size 6000x4000 -depth 8 -extract 600x400+1900+2900 rgb:image image.jpg
Resize gambar inline
Terkadang lebih praktis untuk mengubah ukuran (resize) gambar sekaligus saat dibaca. Andaikan Anda memiliki ratusan gambar JPEG besar yang ingin Anda ubah menjadi serangkaian thumbnail PNG:
magick '*.jpg' -resize 120x120 thumbnail%03d.png
Di sini semua gambar dibaca terlebih dahulu, lalu ukurannya diubah setelahnya. Akan lebih cepat dan lebih hemat sumber daya bila ukuran setiap gambar diubah sekaligus saat dibaca:
magick '*.jpg[120x120]' thumbnail%03d.png
Crop gambar inline
Terkadang lebih praktis untuk memangkas (crop) gambar sekaligus saat dibaca. Andaikan Anda memiliki ratusan gambar JPEG besar yang ingin Anda ubah menjadi serangkaian thumbnail PNG:
magick '*.jpg' -crop 120x120+10+5 thumbnail%03d.png
Di sini semua gambar dibaca terlebih dahulu, lalu dipangkas setelahnya. Akan lebih cepat dan lebih hemat sumber daya bila setiap gambar dipangkas sekaligus saat dibaca:
magick '*.jpg[120x120+10+5]' thumbnail%03d.png
Referensi nama file
Ada dua cara menggunakan sebuah nama file untuk merujuk ke nama file gambar lain. Cara pertama menggunakan '@', yang membaca nama file gambar yang dipisahkan oleh whitespace dari file yang ditentukan. Andaikan file myimages.txt berisi daftar nama file berikut:
frame001.jpg
frame002.jpg
frame003.jpg
Kita kemudian mengharapkan perintah berikut:
magick @myimages.txt mymovie.gif
membaca gambar frame001.jpg, frame002.jpg, dan frame003.jpg lalu mengonversinya menjadi urutan gambar GIF.
Jika path gambar mengandung satu atau lebih spasi, apit path tersebut dengan tanda kutip:
'my title.jpg'
Beberapa opsi baris perintah ImageMagick mungkin melebihi kapasitas prosesor baris perintah Anda. Windows, misalnya, membatasi baris perintah hingga 8192 karakter. Jika, misalnya, Anda memiliki opsi draw dengan titik-titik poligon yang melebihi batas panjang baris perintah, letakkan opsi draw tersebut dalam sebuah file dan rujuk file itu dengan @ (misalnya @mypoly.txt).
Cara lain untuk merujuk ke file gambar lain adalah dengan menyisipkan karakter pemformatan dalam nama file bersama rentang scene. Perhatikan nama file image-%d.jpg[1-5]. Perintah
magick image-%d.jpg[1-5]
membuat ImageMagick mencoba membaca gambar dengan nama file berikut:
image-1.jpg
image-2.jpg
image-3.jpg
image-4.jpg
image-5.jpg
Buffering stream
Secara default, stream input di-buffer. Untuk memastikan informasi pada file sumber atau terminal dibaca segera setelah tersedia, atur ukuran buffer ke 0:
magick logo: gif:- | magick display -define stream:buffer-size=0 gif:-
Opsi baris perintah
Anda dapat mengarahkan perilaku utilitas ImageMagick dengan opsi baris perintah berikut. Perilaku sebuah opsi termasuk dalam salah satu kategori berikut:
- Pengaturan gambar (Image Setting)
- Operator gambar (Image Operator)
- Operator kanal gambar (Image Channel Operator)
- Operator urutan gambar (Image Sequence Operator)
- Geometri gambar (Image Geometry)
- Tumpukan gambar (Image Stack)
Pengaturan gambar (Image Setting)
Pengaturan gambar (image setting) tetap berlaku sejak muncul pada baris perintah dan dapat memengaruhi pemrosesan berikutnya, seperti membaca gambar, operator gambar, atau saat menulis gambar sebagaimana mestinya. Pengaturan gambar tetap berlaku sampai di-reset atau baris perintah berakhir. Pengaturan gambar meliputi:
- • -adjoin
- • -affine
- • -alpha
- • -antialias
- • -authenticate
- • -background
- • -bias
- • -black-point-compensation
- • -blue-primary
- • -bordercolor
- • -caption
- • -channel
- • -comment
- • -compress
- • -debug
- • -define
- • -delay
- • -density
- • -depth
- • -direction
- • -display
- • -dispose
- • -dither
- • -encoding
- • -endian
- • -extract
- • -family
- • -fill
- • -filter
- • -font
- • -format
- • -fuzz
- • -geometry
- • -gravity
- • -green-primary
- • -interlace
- • -intent
- • -interpolate
- • -label
- • -limit
- • -linewidth
- • -log
- • -loop
- • -mattecolor
- • -monitor
- • -orient
- • -page
- • -pointsize
- • -preview
- • -quality
- • -quiet
- • -read-mask
- • -red-primary
- • -region
- • -render
- • -repage
- • -sampling-factor
- • -scene
- • -seed
- • -size
- • -stretch
- • -stroke
- • -strokewidth
- • -style
- • -texture
- • -tile
- • -transparent-color
- • -treedepth
- • -type
- • -undercolor
- • -units
- • -verbose
- • -virtual-pixel
- • -weight
- • -write-mask
Pada contoh ini, -channel diterapkan pada setiap gambar, karena, seperti telah disebutkan, pengaturan bersifat persisten:
magick -channel RGB wand.png wizard.png images.png
Operator gambar (Image Operator)
Operator gambar (image operator) berbeda dari pengaturan karena langsung memengaruhi gambar begitu muncul pada baris perintah. Operator adalah opsi baris perintah apa pun yang tidak terdaftar sebagai pengaturan gambar atau operator urutan gambar. Berbeda dengan pengaturan gambar, yang tetap berlaku hingga baris perintah berakhir, operator diterapkan pada set gambar saat itu lalu dilupakan. Operator gambar meliputi:
- • -annotate
- • -black-threshold
- • -blur
- • -border
- • -charcoal
- • -chop
- • -clip
- • -clip-path
- • -clip-mask
- • -colors
- • -colorize
- • -colorspace
- • -color-threshold
- • -compose
- • -contrast
- • -convolve
- • -crop
- • -cycle
- • -despeckle
- • -draw
- • -edge
- • -emboss
- • -enhance
- • -equalize
- • -evaluate
- • -extent
- • -flip
- • -flop
- • -floodfill
- • -frame
- • -fx
- • -gamma
- • -gaussian-blur
- • -grayscale
- • -implode
- • -integral
- • -kmeans
- • -lat
- • -level
- • -map
- • -median
- • -modulate
- • -monochrome
- • -negate
- • -noise
- • -normalize
- • -opaque
- • -ordered-dither
- • -paint
- • -posterize
- • -raise
- • -profile
- • -random-threshold
- • -resample
- • -resize
- • -roll
- • -rotate
- • -rotational-blur
- • -sample
- • -scale
- • -sepia-tone
- • -segment
- • -shade
- • -shadow
- • -sharpen
- • -shave
- • -shear
- • -sigmoidal-contrast
- • -solarize
- • -splice
- • -spread
- • -strip
- • -swirl
- • -threshold
- • -transparent
- • -thumbnail
- • -tint
- • -transform
- • -trim
- • -unsharp
- • -version
- • -wave
- • -white-balance
- • -white-point
- • -white-threshold
Pada contoh ini, -negate membalikkan (negate) gambar wand, tetapi tidak gambar wizard:
magick wand.png -negate wizard.png images.png
Perlu diperhatikan bahwa operator gambar akan diterapkan pada setiap gambar dalam sebuah urutan gambar. Misalnya, jika Anda menggunakan opsi -resize untuk mengubah ukuran gambar GIF, setiap frame akan diubah ukurannya sesuai ukuran yang diberikan. Namun, sebagian frame mungkin lebih kecil daripada gambar secara keseluruhan, dan mengubah ukuran semua frame menjadi ukuran yang sama dapat menghasilkan output yang tidak terduga. Dalam kasus seperti ini, -coalesce sebaiknya digunakan untuk menyiapkan frame-frame tersebut.
Operator kanal gambar (Image Channel Operator)
Beroperasi langsung pada kanal gambar:
- • -channel-fx
- • -separate
Operator urutan gambar (Image Sequence Operator)
Operator urutan gambar (image sequence operator) berbeda dari pengaturan karena langsung memengaruhi sebuah urutan gambar begitu muncul pada baris perintah. Pilih dari operator urutan gambar berikut:
- • -append
- • -affinity
- • -average
- • -clut
- • -coalesce
- • -combine
- • -compare
- • -complex
- • -composite
- • -copy
- • -crop
- • -debug
- • -deconstruct
- • -delete
- • -evaluate-sequence
- • -fft
- • -flatten
- • -fx
- • -hald-clut
- • -ift
- • -identify
- • -insert
- • -layers
- • -limit
- • -map
- • -maximum
- • -minimum
- • -morph
- • -mosaic
- • -optimize
- • -process
- • -quiet
- • -read
- • -swap
- • -write
Pada contoh ini, -append menggabungkan tiga gambar menjadi satu:
magick mikayla.png picnic.png beach.png -append vacation.png
Geometri gambar (Image Geometry)
Banyak opsi baris perintah menerima argumen geometri untuk menentukan hal-hal seperti lebar dan tinggi gambar yang diinginkan serta besaran dimensi lainnya. Karena pengguna menginginkan begitu banyak variasi dimensi, ukuran, dan posisi gambar hasil (dan karena ImageMagick ingin menyediakannya), argumen geometri dapat mengambil banyak bentuk. Kami menjelaskan sebagian besar bentuk ini pada bagian ini.
Opsi dan pengaturan gambar yang menerima suatu bentuk argumen geometri meliputi yang berikut. Perlu diingat bahwa sebagian di antaranya mengurai (parse) argumennya dengan cara yang sedikit berbeda. Lihat dokumentasi masing-masing opsi atau pengaturan untuk detail lebih lanjut.
- • -adaptive-resize
- • -border
- • -borderwidth
- • -chop
- • -crop
- • -density
- • -extent
- • -extract
- • -frame
- • -geometry
- • -iconGeometry
- • -liquid-rescale
- • -page
- • -region
- • -repage
- • -resize
- • -sample
- • -scale
- • -shave
- • -splice
- • -thumbnail
- • -window
Argumen geometri dapat mengambil salah satu bentuk yang tercantum pada tabel di bawah ini. Bentuk-bentuk ini akan dijelaskan lebih rinci pada subbagian setelah tabel. Bentuk yang umum adalah size[offset], artinya size wajib ada dan offset bersifat opsional. Kadang-kadang, [size]offset juga dimungkinkan. Dalam kondisi apa pun, spasi tidak diperbolehkan di dalam argumen geometri.
| size | Deskripsi umum (perilaku sebenarnya dapat berbeda untuk tiap opsi dan pengaturan) |
|---|---|
| scale% | Tinggi dan lebar sama-sama diskalakan sesuai persentase yang ditentukan. |
| scale-x%xscale-y% | Tinggi dan lebar diskalakan secara terpisah sesuai persentase masing-masing yang ditentukan. (Hanya perlu satu simbol %.) |
| width | Lebar diberikan, tinggi dipilih secara otomatis untuk mempertahankan rasio aspek. |
| xheight | Tinggi diberikan, lebar dipilih secara otomatis untuk mempertahankan rasio aspek. |
| widthxheight | Nilai maksimum tinggi dan lebar diberikan, rasio aspek dipertahankan. |
| widthxheight^ | Nilai minimum lebar dan tinggi diberikan, rasio aspek dipertahankan. |
| widthxheight! | Lebar dan tinggi diberikan secara mutlak, rasio aspek asli diabaikan. |
| widthxheight> | Mengecilkan gambar yang dimensinya lebih besar daripada argumen lebar dan/atau tinggi yang bersangkutan. |
| widthxheight< | Memperbesar gambar yang dimensinya lebih kecil daripada argumen lebar dan/atau tinggi yang bersangkutan. |
| area@ | Mengubah ukuran gambar agar memiliki luas yang ditentukan dalam piksel. Rasio aspek dipertahankan. |
| x:y^ | menghapus baris atau kolom untuk mencapai rasio aspek yang diberikan. |
| x:y# | menambahkan baris atau kolom untuk mencapai rasio aspek yang diberikan. |
| {size}{offset} | Menentukan offset (default-nya adalah +0+0). Di bawah ini, {size} mengacu pada salah satu bentuk di atas. |
| {size}{+-}x{+-}y | Offset horizontal dan vertikal x dan y, ditentukan dalam piksel. Tanda diperlukan untuk keduanya. Offset dipengaruhi oleh pengaturan -gravity. Offset tidak dipengaruhi oleh % atau operator ukuran lainnya. Perlu diperhatikan bahwa offset X dan Y positif mengarah ke dalam menuju pusat gambar untuk semua opsi -gravity, kecuali 'center'. Untuk East, +X adalah kiri. Untuk South, +Y adalah atas. Untuk SouthEast, +X adalah kiri dan +Y adalah atas. Untuk center, digunakan konvensi arah X dan Y yang normal (+X adalah kanan dan +Y adalah bawah). |
Penyesuaian dasar lebar dan tinggi: operator %, ^, dan !
Berikut ini beberapa contoh sederhana geometri, menunjukkan bagaimana geometri dapat digunakan sebagai argumen untuk opsi -resize. Kita akan menggunakan gambar internal logo: sebagai gambar input. Gambar yang bagus ini berukuran lebar 640 piksel dan tinggi 480 piksel. Kita katakan dimensinya adalah 640x480. Saat kita menyebutkan dimensi sebuah gambar, lebar (dimensi horizontal) selalu mendahului tinggi (dimensi vertikal). Hal ini juga berlaku saat kita membicarakan koordinat atau offset dalam sebuah gambar, yang selalu berupa nilai-x diikuti nilai-y. Ingat kembali pelajaran aljabar di sekolah menengah dan bidang-xy. (Yah, hampir: sumbu-y kita akan selalu mengarah ke bawah!)
magick logo: -resize '200%' bigWiz.png
magick logo: -resize '200x50%' longShortWiz.png
magick logo: -resize '100x200' notThinWiz.png
magick logo: -resize '100x200^' biggerNotThinWiz.png
magick logo: -resize '100x200!' dochThinWiz.png
Perintah pertama dari empat perintah ini sederhana—perintah ini meregangkan lebar dan tinggi gambar input sebesar 200% pada tiap arah; perintah ini memperbesar keseluruhan gambar sebanyak dua kali lipat. Perintah kedua menentukan persentase berbeda untuk tiap arah, meregangkan lebar menjadi 200% dan memampatkan tinggi menjadi 50%. Gambar hasilnya (pada contoh ini) berdimensi 1280x240. Perhatikan bahwa simbol persen tidak perlu diulang; berikut ini setara: 200x50%, 200%x50, 200%x50%.
Secara default, lebar dan tinggi yang diberikan dalam argumen geometri merupakan nilai maksimum, kecuali jika persentase ditentukan. Artinya, gambar diperbesar atau diperkecil agar sesuai dengan nilai lebar dan tinggi yang ditentukan, sambil tetap mempertahankan rasio aspek (rasio tinggi terhadap lebar) gambar tersebut. Misalnya, perintah ketiga di atas "mencoba" mengatur dimensi menjadi 100x200. Bayangkan gambar aslinya (berukuran 640x480) diperkecil secara bertahap, dengan rasio aspek tetap konstan, hingga pas masuk ke dalam persegi panjang 100x200. Karena gambar tersebut lebih panjang daripada tingginya, gambar akan pas ketika lebarnya mengecil menjadi 100 piksel. Untuk mempertahankan rasio aspek, tingginya harus menjadi (480/640)×100 piksel=75 piksel, sehingga dimensi akhirnya adalah 100x75.
Perhatikan bahwa pada contoh sebelumnya, setidaknya salah satu dimensi yang ditentukan akan tercapai (dalam kasus ini, lebar, 100 piksel). Gambar hasilnya pas persis di dalam gambar aslinya. Kita dapat melakukan hal sebaliknya dengan memanggil operator ^, seperti pada contoh keempat di atas. Dalam kasus itu, saat 100x200^ diberikan sebagai argumen, sekali lagi setidaknya salah satu dimensi akan tercapai, tetapi kali ini gambar hasilnya dapat menampung gambar aslinya secara pas. Di sini argumen geometri memberikan nilai minimum. Pada contoh kita, tinggi akan menjadi 200 dan lebar akan diskalakan untuk mempertahankan rasio aspek, menjadi (640/480)×200 piksel=267 piksel. Dengan operator ^, salah satu dimensi tersebut akan sesuai dengan ukuran yang diminta, tetapi gambar kemungkinan akan melampaui dimensi yang diminta demi mempertahankan rasio aspeknya. (Fitur ^ ini baru tersedia sejak IM 6.3.8-2.)
Kita lihat bahwa ImageMagick sangat baik dalam mempertahankan rasio aspek gambar, guna mencegah distorsi pada foto dan gambar favorit Anda. Namun, Anda mungkin benar-benar menginginkan dimensinya menjadi 100x200, sehingga gambar diregangkan. Dalam hal ini, cukup beri tahu ImageMagick bahwa Anda benar-benar serius (!) dengan menambahkan operator tanda seru pada geometri. Ini akan memaksa ukuran gambar menjadi persis seperti yang Anda tentukan. Jadi, misalnya, jika Anda menentukan 100x200! dimensinya akan menjadi persis 100x200 (menghasilkan wizard kecil yang memanjang secara vertikal).
Membatasi lebar, tinggi, dan luas: operator >, <, dan @
Berikut beberapa contoh lagi:
magick logo: -resize '100' wiz1.png
magick logo: -resize 'x200' wiz2.png
magick logo: -resize '100x200>' wiz3.png
magick logo: -resize '100x200<' wiz4.png
Jika hanya satu dimensi yang diberikan, dimensi itu dianggap sebagai lebar. Ketika hanya lebar yang ditentukan, seperti pada contoh pertama di atas, lebar diterima sesuai yang diberikan dan tinggi dipilih untuk mempertahankan rasio aspek gambar input. Demikian pula, jika hanya tinggi yang ditentukan, seperti pada contoh kedua di atas, tinggi diterima dan lebar dipilih untuk mempertahankan rasio aspek.
Gunakan > untuk mengecilkan gambar hanya jika dimensinya lebih besar daripada argumen lebar dan/atau tinggi yang bersangkutan. Gunakan < untuk memperbesar gambar hanya jika dimensinya lebih kecil daripada argumen lebar dan/atau tinggi yang bersangkutan. Pada kedua kasus tersebut, jika terjadi perubahan, hasilnya akan sama seperti jika operator > atau < tidak ada. Jadi, pada contoh ketiga di atas, kita menentukan 100x200> dan ukuran gambar asli adalah 640x480, sehingga ukuran gambar dikecilkan seolah-olah kita menentukan 100x200. Namun, pada contoh keempat di atas, tidak akan ada perubahan pada ukurannya.
Terakhir, gunakan @ untuk menentukan luas maksimum sebuah gambar dalam piksel, sekali lagi sambil berupaya mempertahankan rasio aspek. (Piksel hanya mengambil nilai bilangan bulat, sehingga selalu ada sedikit pendekatan/aproksimasi yang bekerja.) Pada contoh berikut, luas 10000 piksel diminta. File hasilnya berdimensi 115x86, yang memiliki 9890 piksel.
magick logo: -resize '10000@' wiz10000.png
Pada semua contoh di atas dan di bawah, kita mengapit argumen geometri dengan tanda kutip. Melakukan hal ini bersifat opsional pada banyak kasus, tetapi tidak selalu. Kita harus mengapit spesifikasi geometri dengan tanda kutip saat menggunakan < atau > untuk mencegah karakter tersebut ditafsirkan oleh shell sebagai pengalihan file (file redirection). Pada sistem Windows, tanda caret ^ perlu berada di dalam tanda kutip, jika tidak maka akan diabaikan. Agar aman, sebaiknya biasakan mengapit semua argumen geometri dengan tanda kutip, seperti yang kita lakukan di sini.
Offset dalam geometri
Berikut beberapa contoh untuk mengilustrasikan penggunaan offset dalam argumen geometri. Salah satu penggunaan offset yang khas adalah bersama opsi -region. Opsi ini memungkinkan banyak opsi lain mengubah piksel di dalam subwilayah persegi panjang tertentu pada sebuah gambar. Oleh karena itu, opsi ini perlu diberi lebar dan tinggi wilayah tersebut, serta offset ke dalam gambar, yaitu sepasang koordinat yang menunjukkan lokasi wilayah tersebut di dalam gambar yang lebih besar. Di bawah ini, pada contoh pertama, kita menentukan wilayah berukuran 100x200 yang terletak pada koordinat-xy x=10, y=20. Untuk kemudahan, mari kita gunakan notasi aljabar biasa (x,y)=(10,20).
magick logo: -region '100x200+10+20' -negate wizNeg1.png
magick logo: -region '100x200-10+20' -negate wizNeg2.png
magick logo: -gravity center -region '100x200-10+20' -negate wizNeg3.png
Perlu diperhatikan bahwa offset selalu memerlukan tanda +/−. Offset sebenarnya bukanlah lokasi sebenarnya di dalam gambar; koordinatnya harus dijumlahkan dengan lokasi lain. Mari kita sebut ini sebagai lokasi saat ini (current location). Namun, pada dua contoh pertama di atas, lokasi tersebut adalah sudut kiri atas gambar, yang berkoordinat (0,0). (Ini adalah situasi default ketika tidak ada instruksi lain yang mengubahnya.) Contoh pertama di atas menempatkan sudut kiri atas persegi panjang 100x200 itu sendiri pada (10,20).
Offset negatif dapat masuk akal pada banyak kasus. Pada contoh kedua di atas, offsetnya adalah (-10,20), ditentukan dengan -10+20. Dalam kasus itu, hanya bagian dari persegi panjang (virtual) yang diperoleh dan terletak di dalam gambar yang dapat dibalikkan (negate); di sini hal ini setara dengan menentukan geometri sebagai 90x200+0+20.
Pada contoh ketiga di atas, pengaturan -gravity muncul lebih dulu daripada yang lain dan mengatur lokasi saat ini di dalam gambar tepat di pusat gambar. Dalam kasus ini itu berada pada piksel (320,240), karena ukuran gambarnya adalah 640x480. Ini berarti offset diterapkan pada lokasi tersebut, yang dengan demikian berpindah, dalam kasus ini, menjadi (320-10,240+20)=(310,260). Namun wilayah 100x200 itu sendiri juga dipengaruhi oleh pengaturan -gravity, sehingga yang ditentukan bukan sudut kiri atasnya, melainkan pusat wilayah itu sendiri (pada (+50,+100) di dalamnya). Oleh karena itu, pusat persegi panjang 100x200 berpindah ke (310,260). Sudut kiri atas persegi panjang yang dibalik itu kini berada pada (310-50,260-100)=(260,160).
Tumpukan gambar (Image Stack)
Di sekolah, guru Anda mungkin mengizinkan Anda mengerjakan soal di kertas coretan lalu menyalin hasilnya ke kertas ujian. Tumpukan gambar (image stack) mirip dengan itu. Fitur ini memungkinkan Anda mengerjakan sebuah gambar atau urutan gambar secara terpisah, lalu memasukkan kembali hasilnya ke dalam baris perintah. Tumpukan gambar dibatasi dengan tanda kurung. Operator gambar hanya memengaruhi gambar dalam tumpukan saat ini. Misalnya, kita dapat membatasi rotasi gambar hanya pada gambar wizard seperti ini:
magick wand.gif \( wizard.gif -rotate 30 \) +append images.gif
Perhatikan sekali lagi bahwa tanda kurung di-escape dengan mendahuluinya dengan garis miring terbalik. Hal ini diperlukan pada Linux, tempat tanda kurung merupakan karakter shell khusus. Garis miring terbalik memberi tahu shell agar tidak menafsirkan karakter tersebut, melainkan meneruskannya langsung ke perintah yang dijalankan. Jangan meng-escape tanda kurung pada Windows. Setiap tanda kurung (atau tanda kurung yang di-escape) harus memiliki spasi di kedua sisinya, seperti pada contoh di atas.
Selain operator gambar yang sudah dibahas, operator gambar berikut paling berguna saat memproses gambar dalam sebuah tumpukan gambar:
Argumen untuk operator-operator ini adalah indeks ke dalam urutan gambar berdasarkan nomor, dimulai dari nol untuk gambar pertama, dan seterusnya. Namun, jika Anda memberikan indeks negatif, gambar diindeks dari akhir (gambar terakhir yang ditambahkan). Artinya, indeks -1 adalah gambar terakhir dalam urutan gambar saat ini, -2 adalah gambar kedua dari terakhir, dan seterusnya.
Nama file output
ImageMagick memperluas konsep nama file output hingga mencakup:
- format gambar eksplisit
- penulisan ke output standar
- referensi nama file
Setiap perluasan ini dijelaskan pada beberapa paragraf berikut.
Sebagai pengganti nama file output, Anda dapat menggunakan -exit untuk sepenuhnya mencegah penulisan gambar apa pun.
Format gambar eksplisit
Gambar dapat disimpan dalam beragam format gambar, termasuk yang lebih dikenal seperti JPEG, PNG, TIFF, dan lain-lain. ImageMagick harus mengetahui format gambar yang diinginkan sebelum gambar itu ditulis. ImageMagick memanfaatkan ekstensi nama file untuk menentukan formatnya. Misalnya, image.jpg memberi tahu ImageMagick untuk menulis gambar dalam format JPEG. Dalam beberapa kasus, nama file tidak menunjukkan format gambar. Dalam kasus ini, gambar ditulis dalam format saat pertama kali dibaca, kecuali format gambar eksplisit ditentukan. Misalnya, andaikan kita ingin menulis gambar kita ke nama file image dalam format intensitas merah, hijau, dan biru mentah (raw):
magick image.jpg rgb:image
Output standar
Linux memungkinkan output dari satu perintah di-pipe ke perintah lain. ImageMagick memungkinkan pemipaan (piping) satu perintah ke perintah lain dengan nama file -. Pada contoh ini kita mem-pipe output magick ke program display:
magick logo: gif:- | magick display gif:-
Di sini format eksplisit bersifat opsional. Format gambar GIF memiliki tanda tangan yang secara unik mengidentifikasinya sehingga ImageMagick dapat langsung mengenali formatnya sebagai GIF.
Referensi nama file
Secara opsional, gunakan karakter pemformatan yang disisipkan untuk menulis daftar gambar berurutan. Andaikan nama file output kita adalah image-%d.jpg dan daftar gambar kita berisi 3 gambar. Anda dapat mengharapkan file-file gambar berikut ditulis:
image-0.jpg
image-1.jpg
image-2.jpg
Atau ambil properti gambar untuk mengubah nama file gambar. Misalnya, perintah
magick rose: -set filename:area '%wx%h' 'rose-%[filename:area].png'
menulis sebuah gambar dengan nama file berikut:
rose-70x46.png
Terakhir, untuk mengonversi beberapa gambar JPEG menjadi halaman-halaman PDF terpisah, gunakan:
magick *.jpg +adjoin page-%d.pdf
Gunakan -define filename:literal=true untuk melewati penafsiran karakter pemformatan yang disisipkan dan sebagai gantinya menggunakan nama file secara harfiah (literal).
Buffering stream
Secara default, stream output di-buffer. Untuk memastikan informasi muncul pada file tujuan atau terminal segera setelah ditulis, atur ukuran buffer ke 0:
magick -define stream:buffer-size=0 logo: gif:- | magick display gif:-

