Ada banyak data tambahan yang terkait dengan gambar (metadata), di luar piksel gambar itu sendiri. Metadata ini dapat berguna, baik untuk ditampilkan, untuk berbagai perhitungan, maupun untuk mengubah perilaku operasi pemrosesan gambar berikutnya. Anda dapat memanfaatkan escape persen pada sejumlah opsi, misalnya pada -format atau pada -label milik montage, untuk mencetak berbagai properti dan pengaturan lain yang terkait dengan sebuah gambar.
| Data profil | Seperti data EXIF:, yang memuat panjang fokus, eksposur, tanggal, dan dalam beberapa kasus lokasi GPS. |
|---|---|
| Atribut | Ini terkait langsung dengan data gambar dan lebih sering diubah sebagai bagian dari pemrosesan gambar normal. Termasuk di antaranya lebar, tinggi, kedalaman, tipe gambar (ruang warna), penundaan waktu (timing delay), dan warna latar belakang. Sebagian besar escape persen yang spesifik ditujukan untuk mengakses informasi ini. |
| Properti | Ini disimpan sebagai tabel string bebas format, dan (jika memungkinkan) disimpan bersama gambar (khususnya dalam format file gambar MIFF dan PNG). Termasuk di antaranya: Label, Caption, Comment. |
| Artefak | Ini adalah berbagai pengaturan operasional (tingkat lanjut) yang disimpan untuk digunakan oleh berbagai operator, atau oleh pengguna untuk dipakai di kemudian hari. Ini hanyalah tabel string bebas format. Artefak tidak disimpan bersama gambar saat ditulis. Lihat "Artefak dan opsi" di bawah untuk detailnya. |
| Opsi | Juga merupakan pengaturan operasional (tingkat lanjut) yang disimpan untuk digunakan oleh berbagai operator, tetapi ditetapkan secara global untuk seluruh daftar gambar (juga tidak disimpan). Lihat "Artefak dan opsi" di bawah. |
Penanganan escape persen
Jika Anda meminta sebuah escape persen seperti %[key], pengaturan tersebut dicari dengan urutan berikut hingga ditemukan kecocokan pertama...
- Menangani prefiks khusus seperti 'artifact:' 'option:' 'exif:', atau 'fx:'. Ini termasuk perhitungan dan glob dari prefiks tersebut, seperti 'exif:' atau 'artifact:' (lihat di bawah).
- Jika key mengandung pola glob (tetapi tanpa prefiks yang dikenal), cari pada tabel properti bebas format.
- Jika key adalah nama 'atribut' gambar khusus (lihat daftar di atas), kembalikan atribut gambar terkait atau hasil perhitungannya.
- Cari pengaturan tersebut sebagai 'properti' bebas format.
- Cari pengaturan tersebut sebagai 'artefak' bebas format.
- Cari pengaturan tersebut sebagai 'opsi' bebas format.
- Ganti escape dengan string kosong, dan mungkin munculkan peringatan.
Perlu diingat, semua bentuk nama panjang dari escape persen ditangani tanpa membedakan huruf besar/kecil.
Sekarang Anda dapat mengakses tabel string bebas format artefak dan opsi secara langsung, sehingga Anda dapat mengesampingkan urutan di atas dan menghindari pengaksesan atribut atau properti dengan nama yang sama.
%[artifact:setting]
%[option:setting]
Penanganan escape memerlukan akses ke kontainer gambar. Jika tidak ada yang tersedia, gambar kosong dibuat untuk memastikan ekspresi tersebut dapat diproses dan sebuah nilai dikembalikan. Sebagai contoh, magick -print "%[fx:.8765/3.14]" null: null:.
Escape persen atribut satu huruf
Berikut adalah escape satu huruf (bentuk pendek) yang umum digunakan untuk melaporkan atribut dan properti gambar yang paling umum, seperti nama file gambar, tipe, lebar, dan tinggi.
| \ | backslash, karakter berikutnya bersifat literal dan tidak diinterpretasikan |
|---|---|
| \n | baris baru |
| \r | carriage return |
| < | karakter lebih-kecil-dari. |
| > | karakter lebih-besar-dari. |
| & | karakter ampersand. |
| %% | tanda persen |
| %b | ukuran file gambar yang dibaca (gunakan -precision 16 untuk memaksa hasil dalam B) |
| %c | properti metadata comment |
| %d | komponen direktori dari path |
| %e | ekstensi atau akhiran nama file |
| %f | nama file (termasuk akhiran) |
| %g | geometri halaman kanvas layer (setara dengan "%Wx%H%X%Y") |
| %h | tinggi gambar saat ini dalam piksel |
| %i | nama file gambar (catatan: menjadi nama file output untuk "info:") |
| %k | TERHITUNG: jumlah warna unik |
| %l | properti metadata label |
| %m | format file gambar (file magic) |
| %n | jumlah gambar dalam urutan gambar saat ini, dilaporkan sekali per frame |
| %o | nama file output (digunakan untuk delegate) |
| %p | indeks gambar dalam daftar gambar saat ini |
| %q | kedalaman quantum (konstanta waktu kompilasi) |
| %r | kelas gambar dan ruang warna |
| %s | nomor scene (dari input kecuali ditetapkan ulang) |
| %t | nama file tanpa direktori atau ekstensi (akhiran) |
| %u | nama file sementara unik (digunakan untuk delegate) |
| %w | lebar saat ini dalam piksel |
| %x | resolusi x (densitas) |
| %y | resolusi y (densitas) |
| %z | kedalaman gambar (sesuai saat dibaca kecuali diubah; kedalaman penyimpanan gambar) |
| %A | kanal transparansi gambar. Nilainya mencakup Undefined (tanpa kanal transparansi), Blend, Copy, atau Update. |
| %B | ukuran file gambar yang dibaca dalam byte |
| %C | jenis kompresi gambar |
| %D | metode disposal GIF gambar |
| %G | ukuran gambar asli (%wx%h; sebelum resize apa pun) |
| %H | tinggi halaman (kanvas) |
| %M | nama file Magick (file asli persis seperti yang diberikan, termasuk modifikasi baca) |
| %N | jumlah gambar dalam urutan gambar saat ini, dilaporkan sekali per urutan gambar |
| %O | offset halaman (kanvas) ( = %X%Y ) |
| %P | ukuran halaman (kanvas) ( = %Wx%H ) |
| %Q | kualitas kompresi gambar ( 0 = default ) |
| %S | ?? scene ?? |
| %T | penundaan waktu gambar (dalam centi-detik) |
| %U | satuan resolusi gambar |
| %W | lebar halaman (kanvas) |
| %X | offset x halaman (kanvas) (termasuk tanda) |
| %Y | offset y halaman (kanvas) (termasuk tanda) |
| %Z | nama file unik (digunakan untuk delegate) |
| %@ | TERHITUNG: kotak pembatas trim (tanpa benar-benar melakukan trim) |
| %# | TERHITUNG: hash 'tanda tangan' (signature) dari nilai-nilai gambar |
Berikut adalah contoh perintah beserta keluarannya untuk sebuah gambar dengan nama file bird.miff yang lebarnya 512 dan tingginya 480.
-> identify -format "%m:%f %wx%h" bird.miff
MIFF:bird.miff 512x480
Perlu diperhatikan, semua escape persen satu huruf juga dapat digunakan dalam bentuk panjang (sejak IM versi 6.7.6-9, lihat berikutnya). Misalnya, %[f] setara dengan bentuk pendek %f.
PERINGATAN: escape persen bentuk pendek TIDAK dijalankan ketika tanda persen berada setelah sebuah angka. Misalnya, 10%x10 tidak memperluas %x sebagai escape persen. Jika Anda secara khusus ingin memperluas 'x', gunakan bentuk panjang yang mengesampingkan kasus khusus ini. Contoh: 10%[x]10.
Perlu diperhatikan juga bahwa atribut hasil perhitungan dapat memerlukan waktu untuk dihasilkan, terutama pada gambar berukuran besar.
Escape persen atribut bentuk panjang
Selain atribut spesifik dan hasil perhitungan di atas, sintaksis berikut ini juga dikenali apabila diapit tanda kurung kurawal (bentuk panjang):
| %[basename] | nama file dasar, tanpa akhiran (seperti %t) |
|---|---|
| %[bit-depth] | Kedalaman bit aktual dari data piksel |
| %[bounding-box] | sudut kiri atas dan kanan bawah dari kotak pembatas gambar |
| %[caption] | properti metadata caption |
| %[caption:lines] | mengembalikan jumlah baris yang dihasilkan saat caption dibungkus (wrap) |
| %[caption:pointsize] | mengembalikan pointsize yang dihitung selama pemrosesan caption: |
| %[channels] | mnemonik ruang warna diikuti jumlah total kanal dan meta-kanal, misalnya cmyka 8.3 menunjukkan gambar CMYK dengan kanal alpha dengan total 8 kanal dan 3 meta-kanal. |
| %[colors] | Jumlah warna unik dalam gambar (sejak IM 7.0.3.8) |
| %[colorspace] | ruang warna dari data gambar (tidak termasuk transparansi) |
| %[compose] | |
| %[compression] | jenis kompresi gambar |
| %[convex-hull] | titik-titik yang membentuk convex hull di sekeliling objek latar depan. Gunakan -define convex-hull:background-color=color untuk menentukan warna latar belakang gambar. Gunakan -fuzz untuk mengakomodasi warna latar belakang yang tidak seragam. |
| %[convex-hull:extreme-points] | mengembalikan titik ekstrem atas, kanan, bawah, dan kiri dari convex hull. |
| %[copyright] | String hak cipta ImageMagick |
| %[depth] | kedalaman gambar untuk penulisan (sesuai input kecuali diubah) |
| %[deskew:angle] | Sudut deskew (koreksi kemiringan) dalam derajat rotasi |
| %[directory] | bagian direktori dari nama file (seperti %d) |
| %[distortion] | seberapa mirip sebuah gambar dengan gambar referensi (-compare) |
| %[dominant-color] | mengembalikan warna dominan gambar dalam heksadesimal. Gunakan -kmeans sebelum menggunakannya. |
| %[entropy] | TERHITUNG: entropi gambar |
| %[extension] | bagian ekstensi dari nama file (seperti %e) |
| %[gamma] | nilai gamma gambar |
| %[group] | ??? grup jendela ??? |
| %[height] | tinggi asli gambar (saat dibaca) |
| %[histogram:contrast-stretch] | persentase minimum dan maksimum contrast stretch yang dihitung |
| %[histogram:linear-stretch] | persentase minimum dan maksimum linear stretch yang dihitung |
| %[input] | nama file gambar input. |
| %[interlace] | Mode interlacing gambar (sejak IM 7.0.3.8) |
| %[kurtosis] | TERHITUNG: statistik kurtosis gambar |
| %[label] | properti metadata label |
| %[label:pointsize] | mengembalikan pointsize yang dihitung selama pemrosesan label: |
| %[magick] | coder yang digunakan untuk membaca gambar (bukan akhiran file) |
| %[max] | TERHITUNG: statistik nilai maksimum gambar |
| %[mean] | TERHITUNG: statistik nilai rata-rata gambar |
| %[median] | TERHITUNG: statistik nilai median gambar |
| %[min] | TERHITUNG: statistik nilai minimum gambar |
| %[minimum-bounding-box] | Gunakan -define convex-hull:background-color=color untuk menentukan warna latar belakang gambar. Gunakan -fuzz untuk mengakomodasi warna latar belakang yang tidak seragam. Selain titik-titik kotak pembatas, properti berikut juga ditetapkan: minimum-bounding-box:area, minimum-bounding-box:width, minimum-bounding-box:height, minimum-bounding-box:angle, dan minimum-bounding-box:unrotate. |
| %[opaque] | TERHITUNG: apakah gambar sepenuhnya opak? |
| %[orientation] | orientasi gambar |
| %[page] | Geometri kanvas virtual (halaman) |
| %[papersize:name] | ukuran kertas untuk name dalam piksel pada 72DPI (misalnya papersize:A4) |
| %[printsize.x] | Ukuran cetak X |
| %[printsize.y] | Ukuran cetak Y |
| %[profile:icc] | Info profil ICC |
| %[profile:icm] | Info profil ICM |
| %[profiles] | daftar profil apa pun yang tertanam (embedded) |
| %[quality] | Nilai kualitas gambar (sejak IM 7.0.3.8) |
| %[rendering-intent] | Rendering intent gambar (sejak IM 7.0.3.8) |
| %[resolution.x] | Densitas X (resolusi) tanpa satuan |
| %[resolution.y] | Densitas Y (resolusi) tanpa satuan |
| %[scene] | nomor scene asli gambar dalam file input |
| %[size] | ukuran asli gambar (saat dibaca) |
| %[skewness] | TERHITUNG: statistik skewness gambar |
| %[standard-deviation] | TERHITUNG: statistik deviasi standar gambar |
| %[type] | TERHITUNG: tipe gambar |
| %[unique] | nama file sementara unik ??? |
| %[units] | satuan resolusi gambar |
| %[version] | Informasi versi dari ImageMagick yang sedang berjalan ini |
| %[width] | lebar asli gambar (saat dibaca) |
| %[zero] | nol (nama file unik untuk penggunaan delegate) |
Properti
Semua bentuk panjang escape persen lainnya (bukan bentuk panjang satu huruf) ditangani tanpa membedakan huruf besar/kecil. Escape semacam ini akan mencoba mencari nama tersebut pada sumber data yang spesifik.
Ruang pencarian utama (jika bukan atribut spesifik yang tercantum di atas) adalah string properti bebas format. String semacam ini dikaitkan dan disimpan bersama gambar, dan biasanya ditetapkan menggunakan opsi CLI -set (atau padanan API-nya), atau dari opsi kemudahan khusus (seperti -label, -comment, -caption).
Opsi-opsi kemudahan ini disimpan secara global (sebagai 'opsi global' sehingga dapat ditetapkan sebelum gambar dibaca), dan kemudian dipindahkan ke properti masing-masing gambar, hanya saat gambar tersebut dibaca. Pada saat itulah escape persen internal yang ada di dalamnya ditangani.
Untuk mengubah properti gambar yang sudah ada di memori, Anda perlu menggunakan -set.
Perlu diperhatikan, properti, seperti halnya atribut (dan profil), disimpan bersama gambar saat ditulis, jika format file gambar mengizinkannya.
Artefak dan opsi
Escape persen sebelumnya terkait dengan atribut dan properti utama, yang merupakan fokus asli dan utama dari escape persen semacam ini.
Namun, ada banyak pengaturan operasional yang digunakan oleh berbagai operator ImageMagick, yang berguna untuk ditetapkan dan diakses kemudian. Pengaturan ini terdiri dari artefak per gambar, dan opsi global (terkait dengan sebuah daftar gambar, biasanya daftar gambar saat ini).
Perlu diperhatikan, perbedaan utama antara sebuah artefak dan sebuah properti adalah bahwa artefak, sebagai pengaturan operasional internal, tidak disimpan bersama gambar (jika hal itu memungkinkan).
Sebagai contoh, saat Anda menggunakan -define 'distort:viewport=100x100', Anda sebenarnya sedang menghasilkan sebuah opsi global, yang akan digunakan oleh operator -distort untuk mengubah perilakunya ('tampilan' gambar output yang terdistorsi).
Opsi pada dasarnya adalah artefak yang telah disimpan secara global sebagai bagian dari sebuah daftar gambar (secara spesifik, sebuah 'Wand' gambar). Dengan demikian, keduanya identik, karena sebuah opsi hanyalah artefak global untuk semua gambar yang terkait.
Dengan demikian, Anda dapat menggunakan -set 'option:distort:viewport' '100x100' untuk mencapai hasil yang sama, yaitu menetapkan sebuah artefak yang akan digunakan oleh operasi distort.
Penanganan internal opsi global…
Pustaka inti (library) ('MagickCore') umumnya tidak memahami opsi global secara langsung. Oleh karena itu, melanjutkan contoh sebelumnya, fungsi DistortImages() hanya mencari sebuah artefak untuk mengetahui apakah sebuah 'viewport' telah diberikan kepadanya.
Bagaimana opsi global digunakan saat sebuah fungsi pustaka meminta sebuah artefak adalah salah satu perbedaan utama antara IMv6 dan IMv7.
Ini menetapkan tautan balik ke data opsi global, sehingga jika sebuah artefak spesifik per gambar tidak ditemukan, pencarian akan langsung dilanjutkan ke opsi global yang setara untuk daftar gambar tersebut. Ini menghindarkan penyalinan berulang opsi bebas format tersebut ke dalam artefak, dan berarti Anda kini dapat mendefinisikan secara terpisah sebuah opsi global untuk suatu daftar, serta sebuah artefak individual yang menimpanya (override) untuk gambar tertentu dalam daftar tersebut.
Perlu diperhatikan, banyak API yang tidak menggunakan Wand (PerlMagick misalnya menggunakan array gambar, bukan Wand). Pada API semacam ini, Anda tidak akan memiliki opsi global, hanya artefak per gambar.
Singkatnya, opsi global, jika tersedia, setara dengan artefak per gambar.
Daftar dengan pola glob untuk properti, artefak, dan opsi
Pengaturan dapat berisi sebuah pola glob. Dengan demikian, Anda kini dapat mencantumkan semua properti, artefak, dan opsi string bebas format (tetapi bukan atribut gambar yang spesifik) menggunakan...
magick ... \
-print "__Properties__\n%[*]" \
-print "__Artifacts__\n%[artifact:*]" \
-print "__Options__\n%[option:*]" \
...
Format pola glob sangat spesifik sehingga umumnya hanya digunakan untuk mencantumkan pengaturan tertentu, misalnya saat melakukan debugging, dan bukan untuk keperluan pemrosesan gambar.
Prefiks escape persen terhitung
Ada beberapa prefiks khusus (sebelum ':' pertama) yang melakukan perhitungan berdasarkan string yang diberikan pengguna setelah prefiks tersebut. Misalnya, Anda dapat melakukan perhitungan numerik menggunakan %[fx:...] untuk mengevaluasi ekspresi FX yang diberikan:
%[fx:expression]
Gunakan pixel: atau hex: untuk mengevaluasi warna piksel sebagaimana didefinisikan oleh ekspresi FX:
%[pixel:expression]
Gunakan -define untuk menentukan kepatuhan warna (color compliance) (misalnya -define pixel:compliance=css)
.
Prefiks escape persen khusus profil
Anda juga dapat menggunakan sintaksis pemformatan khusus berikut untuk mencetak metadata gambar EXIF yang disertakan dalam gambar yang dibaca:
%[EXIF:tag]
Pilih tag dari daftar berikut:
* (print all EXIF tags, in keyword=data format)
! (print all EXIF tags, in tag_number data format)
#hhhh (print data for EXIF tag #hhhh)
ImageWidth
ImageLength
BitsPerSample
Compression
PhotometricInterpretation
FillOrder
DocumentName
ImageDescription
Make
Model
StripOffsets
Orientation
SamplesPerPixel
RowsPerStrip
StripByteCounts
XResolution
YResolution
PlanarConfiguration
ResolutionUnit
TransferFunction
Software
DateTime
Artist
WhitePoint
PrimaryChromaticities
TransferRange
JPEGProc
JPEGInterchangeFormat
JPEGInterchangeFormatLength
YCbCrCoefficients
YCbCrSubSampling
YCbCrPositioning
ReferenceBlackWhite
CFARepeatPatternDim
CFAPattern
BatteryLevel
Copyright
ExposureTime
FNumber
IPTC/NAA
EXIFOffset
InterColorProfile
ExposureProgram
SpectralSensitivity
GPSInfo
ISOSpeedRatings
OECF
EXIFVersion
DateTimeOriginal
DateTimeDigitized
ComponentsConfiguration
CompressedBitsPerPixel
ShutterSpeedValue
ApertureValue
BrightnessValue
ExposureBiasValue
MaxApertureValue
SubjectDistance
MeteringMode
LightSource
Flash
FocalLength
MakerNote
UserComment
SubSecTime
SubSecTimeOriginal
SubSecTimeDigitized
FlashPixVersion
ColorSpace
EXIFImageWidth
EXIFImageLength
InteroperabilityOffset
FlashEnergy
SpatialFrequencyResponse
FocalPlaneXResolution
FocalPlaneYResolution
FocalPlaneResolutionUnit
SubjectLocation
ExposureIndex
SensingMethod
FileSource
SceneType
Apit spesifikasi format tersebut dengan tanda kutip agar shell Anda tidak salah menafsirkan spasi dan tanda kurung siku.
Sintaksis pemformatan khusus berikut dapat digunakan untuk mencetak informasi IPTC yang terkandung dalam file:
%[IPTC:dataset:record]
Pilih dataset dan record dari daftar berikut:
Envelope Record
1:00 Model Version
1:05 Destination
1:20 File Format
1:22 File Format Version
1:30 Service Identifier
1:40 Envelope Number
1:50 Product ID
1:60 Envelope Priority
1:70 Date Sent
1:80 Time Sent
1:90 Coded Character Set
1:100 UNO (Unique Name of Object)
1:120 ARM Identifier
1:122 ARM Version
Application Record
2:00 Record Version
2:03 Object Type Reference
2:05 Object Name (Title)
2:07 Edit Status
2:08 Editorial Update
2:10 Urgency
2:12 Subject Reference
2:15 Category
2:20 Supplemental Category
2:22 Fixture Identifier
2:25 Keywords
2:26 Content Location Code
2:27 Content Location Name
2:30 Release Date
2:35 Release Time
2:37 Expiration Date
2:38 Expiration Time
2:40 Special Instructions
2:42 Action Advised
2:45 Reference Service
2:47 Reference Date
2:50 Reference Number
2:55 Date Created
2:60 Time Created
2:62 Digital Creation Date
2:63 Digital Creation Time
2:65 Originating Program
2:70 Program Version
2:75 Object Cycle
2:80 By-Line (Author)
2:85 By-Line Title (Author Position) [Not used in Photoshop 7]
2:90 City
2:92 Sub-Location
2:95 Province/State
2:100 Country/Primary Location Code
2:101 Country/Primary Location Name
2:103 Original Transmission Reference
2:105 Headline
2:110 Credit
2:115 Source
2:116 Copyright Notice
2:118 Contact
2:120 Caption/Abstract
2:122 Caption Writer/Editor
2:125 Rasterized Caption
2:130 Image Type
2:131 Image Orientation
2:135 Language Identifier
2:150 Audio Type
2:151 Audio Sampling Rate
2:152 Audio Sampling Resolution
2:153 Audio Duration
2:154 Audio Outcue
2:200 ObjectData Preview File Format
2:201 ObjectData Preview File Format Version
2:202 ObjectData Preview Data
Pre-ObjectData Descriptor Record
7:10 Size Mode
7:20 Max Subfile Size
7:90 ObjectData Size Announced
7:95 Maximum ObjectData Size
ObjectData Record
8:10 Subfile
Post ObjectData Descriptor Record
9:10 Confirmed ObjectData Size