除了实际的图像像素之外,图像还关联着大量额外的元数据。这些元数据非常有用,可以用于显示、各种计算或修改后续图像处理操作的行为。您可以在许多选项中使用百分比转义符,例如在 -format 或 montage 的 -label 中,以打印与图像关联的各种属性和其他设置。
配置文件数据 | 例如 EXIF 数据,包含焦距、曝光、日期,在某些情况下还包含 GPS 位置。 |
属性 | 这些属性直接与图像数据相关,并且通常在正常的图像处理过程中进行修改。这些属性包括宽度、高度、深度、图像类型(色彩空间)、定时延迟和背景颜色。大多数特定的百分比转义符用于访问此信息。 |
属性 | 这些属性以自由格式字符串表的形式存储,并且(如果可能)会与图像一起保存(尤其是在 MIFF 和 PNG 图像文件格式中)。这些属性包括:标签、标题、注释。 |
伪影 | 这些是各种操作(专家)设置,保存供各种操作员使用,或供用户将来使用。它只是一个自由格式字符串表。写入图像时不会将它们与图像一起保存。有关详细信息,请参见下面的伪影和选项。 |
选项 | 也是操作(专家)设置,保存供各种操作员使用,但设置为全局设置,供整个图像列表使用(也不保存)。有关详细信息,请参见下面的伪影和选项。 |
百分比转义处理
如果您请求一个百分比转义符,例如 %[key],则会按以下顺序查找设置,直到找到第一个匹配项...
- 处理特殊的前缀,例如“artifact:”、“option:”、“exif:”或“fx:”。这包括并计算或这些前缀的通配符,例如“exif:*”或“artifact:*”(参见下文)。
- 如果 key 包含一个通配符模式(但没有已知的前缀),则搜索自由格式属性表。
- 如果 key 是一个特殊的图像“属性”名称(见上文列表),则返回关联的或计算出的图像属性。
- 搜索设置为自由格式“属性”
- 搜索设置为自由格式“伪影”
- 搜索设置为自由格式“选项”
- 用空字符串替换转义符,并可能发出警告。
请记住,所有百分比转义符的长名称形式都以不区分大小写的方式处理。
您现在可以直接访问伪影和选项自由格式字符串表,允许您覆盖上述顺序,并避免访问相同名称的属性或属性。
%[artifact:setting] %[option:setting]
转义处理需要访问图像容器。如果没有可用的图像容器,则会创建一个空白图像以确保可以处理表达式并返回一个值。例如,magick -print "%[fx:.8765/3.14]" null: null:。
单字母属性百分比转义符
以下是用于报告图像最常见属性的常用单字母转义符(简写形式),例如:图像文件名、类型、宽度、高度。
\ | 反斜杠,下一个字符是字面量,不受解释 |
\n | 换行符 |
\r | 回车符 |
< | 小于号。 |
> | 大于号。 |
& | 与号。 |
%% | 百分号 |
%b | 读取的图像的文件大小(使用 -precision 16 强制结果为 B) |
%c | 注释元数据属性 |
%d | 路径的目录部分 |
%e | 文件名扩展名或后缀 |
%f | 文件名(包括后缀) |
%g | 图层画布页面几何体(等效于“%Wx%H%X%Y”) |
%h | 当前图像高度(以像素为单位) |
%i | 图像文件名(注意:对于“info:”会变成输出文件名) |
%k | 计算:唯一颜色的数量 |
%l | 标签元数据属性 |
%m | 图像文件格式(文件魔术) |
%n | 当前图像序列中的图像数量,每个帧报告一次 |
%o | 输出文件名(用于委托) |
%p | 当前图像列表中图像的索引 |
%q | 量子深度(编译时常量) |
%r | 图像类别和色彩空间 |
%s | 场景编号(除非重新分配,否则来自输入) |
%t | 不带目录或扩展名(后缀)的文件名 |
%u | 唯一的临时文件名(用于委托) |
%w | 当前宽度(以像素为单位) |
%x | X 分辨率(密度) |
%y | Y 分辨率(密度) |
%z | 图像深度(除非修改,否则为读取时的深度,图像保存深度) |
%A | 图像透明通道。值包括 Undefined(无透明通道)、Blend、Copy 或 Update。 |
%B | 读取的图像的文件大小(以字节为单位) |
%C | 图像压缩类型 |
%D | 图像 GIF 处理方法 |
%G | 原始图像大小(%wx%h;在任何调整大小之前) |
%H | 页面(画布)高度 |
%M | Magick 文件名(原始文件,完全按照给定的方式,包括读取修改) |
%N | 当前图像序列中的图像数量,每个图像序列报告一次 |
%O | 页面(画布)偏移量(= %X%Y) |
%P | 页面(画布)大小(= %Wx%H) |
%Q | 图像压缩质量(0 = 默认) |
%S | ?? 场景 ?? |
%T | 图像时间延迟(以百分之一秒为单位) |
%U | 图像分辨率单位 |
%W | 页面(画布)宽度 |
%X | 页面(画布)X 偏移量(包括符号) |
%Y | 页面(画布)Y 偏移量(包括符号) |
%Z | 唯一的临时文件名(用于委托) |
%@ | 计算:修剪边界框(无需实际修剪) |
%# | 计算:图像值的“签名”哈希 |
以下是一个示例命令及其输出,该命令适用于文件名 bird.miff 且宽度为 512、高度为 480 的图像。
-> identify -format "%m:%f %wx%h" bird.miff MIFF:bird.miff 512x480
请注意,所有单字母百分比转义符也可以使用长格式(从 IM 版本 6.7.6-9 开始,请参见下文)。例如 %[f] 等效于 %f 简写形式。
警告:当百分号位于数字后面时,不会执行简写形式的百分比转义符。例如,10%x10 不会将 %x 扩展为百分比转义符。如果您特别想要扩展“x”,请使用长格式,它会覆盖此特殊情况。例如:10%[x]10。
还要注意,计算属性可能需要一些时间才能生成,特别是对于大型图像。
长格式属性百分比转义符
除了上述特定属性之外,当包含在大括号中(长格式)时,还会识别计算属性
%[basename] | 基本文件名,无后缀(如 %t) |
%[bit-depth] | 像素数据的实际位深度 |
%[bounding-box] | 图像边界框的左上角和右下角 |
%[caption] | 标题元数据属性 |
%[caption:lines] | 返回包装标题时生成的线条数 |
%[caption:pointsize] | 返回在 caption: 处理期间计算的点大小 |
%[channels] | 色彩空间助记符,后跟通道总数和元通道数,例如,cmyka 8.3 表示一个 CMYK 图像,带有 alpha 通道,通道总数为 8,元通道数为 3。 |
%[colors] | 图像中唯一颜色的数量(截至 IM 7.0.3.8) |
%[colorspace] | 图像数据的色彩空间(不包括透明度) |
%[compose] | |
%[compression] | 图像压缩类型 |
%[convex-hull] | 构成前景对象周围凸包的点。使用 -define convex-hull:background-color=color 来识别图像背景颜色。使用 -fuzz 允许非均匀的背景颜色。 |
%[convex-hull:extreme-points] | 返回凸包的顶部、右侧、底部和左侧极值点。 |
%[copyright] | ImageMagick 版权字符串 |
%[depth] | 写入图像的深度(除非更改,否则为输入深度) |
%[deskew:angle] | 倾斜校正角度(以度为单位) |
%[directory] | 文件名的目录部分(如 %d) |
%[distortion] | 图像与参考图像的相似程度(-compare) |
%[dominant-color] | 以十六进制返回主要的图像颜色。在使用之前加上 -kmeans。 |
%[entropy] | 计算:图像的熵 |
%[extension] | 文件名的扩展名部分(如 %e) |
%[gamma] | 图像伽马值 |
%[group] | ??? 窗口组 ??? |
%[height] | 图像的原始高度(读取时) |
%[histogram:contrast-stretch] | 计算的最小和最大对比度拉伸百分比 |
%[histogram:linear-stretch] | 计算的最小和最大线性拉伸百分比 |
%[input] | |
%[interlace] | 图像交错模式(截至 IM 7.0.3.8) |
%[kurtosis] | 计算:图像的峰度统计量 |
%[label] | 标签元数据属性 |
%[label:pointsize] | 返回在 label: 处理期间计算的点大小 |
%[magick] | 用于读取图像的编码器(而不是文件后缀) |
%[max] | 计算:图像的最大值统计量 |
%[mean] | 计算:图像的平均值统计量 |
%[median] | 计算:图像的中值统计量 |
%[min] | 计算:图像的最小值统计量 |
%[minimum-bounding-box] | 使用 -define convex-hull:background-color=color 来识别图像背景颜色。使用 -fuzz 允许非均匀的背景颜色。除了边界框点之外,还会设置以下属性:minimum-bounding-box:area、minimum-bounding-box:width、minimum-bounding-box:height、minimum-bounding-box:angle 和 minimum-bounding-box:unrotate。 |
%[opaque] | 计算:图像是否完全不透明? |
%[orientation] | 图像方向 |
%[page] | 虚拟画布(页面)几何体 |
%[papersize:name] | 以 72DPI 为单位的 name 的纸张大小(以像素为单位)(例如 papersize:A4) |
%[printsize.x] | X 打印大小 |
%[printsize.y] | Y 打印大小 |
%[profile:icc] | ICC 配置文件信息 |
%[profile:icm] | ICM 配置文件信息 |
%[profiles] | 任何嵌入配置文件的列表 |
%[quality] | 图像质量值(截至 IM 7.0.3.8) |
%[rendering-intent] | 图像渲染意图(截至 IM 7.0.3.8) |
%[resolution.x] | X 密度(分辨率),不带单位 |
%[resolution.y] | Y 密度(分辨率),不带单位 |
%[scene] | 输入文件中图像的原始场景编号 |
%[size] | 图像的原始大小(读取时) |
%[skewness] | 计算:图像的偏度统计量 |
%[standard-deviation] | 计算:图像的标准差统计量 |
%[type] | 计算:图像类型 |
%[unique] | 唯一的临时文件名 ??? |
%[units] | 图像分辨率单位 |
%[version] | 此运行的 ImageMagick 的版本信息 |
%[width] | 图像的原始宽度(读取时) |
%[zero] | 零(委托使用的唯一文件名) |
属性
所有其他百分比转义符的长格式(不是单字母长格式)都以不区分大小写的方式处理。此类转义符将尝试查找该名称的特定数据源。
主要搜索空间(如果不是上面列出的特定属性)是自由格式属性字符串。此类字符串与图像关联并保存,并且通常使用 -set CLI 选项(或 API 等效项)或特殊便利选项(例如 -label、-comment、-caption)进行设置。
这些便捷选项会全局保存(作为“全局选项”,以便在读取图像之前设置),然后仅在读取图像时才会传输到各个图像的属性。此时,将处理任何存在的内部百分比转义。
要更改内存中图像的属性,需要使用 -set。
请注意,如果图像文件格式允许,属性(如属性和配置文件)将在写入时与图像一起保存。
构件和选项
先前的百分比转义与主要属性和特性相关联。这是此类百分比转义的原始和主要焦点。
但是,ImageMagick 各种操作符使用的许多操作设置可能很有用,可以设置并稍后访问。这些包括每个图像的构件和全局选项(与图像列表相关联,通常是当前图像列表)。
请注意,构件和属性之间的主要区别在于,构件作为内部操作设置,不会与图像一起保存(如果可能)。
例如,当使用 -define 'distort:viewport=100x100' 时,实际上是在生成全局选项,-distort 操作符将使用该选项修改其行为(扭曲的输出图像“视图”)。
选项本质上是作为图像列表(具体来说是“Wand”图像)的一部分全局存储的构件。因此,它们是相同的,因为选项只是所有关联图像的全局构件。
因此,可以使用 -set 'option:distort:viewport' '100x100' 来实现设置构件以供 disort 操作使用的相同结果。
全局选项的内部处理...
核心库(“MagickCore”)通常不直接理解全局选项。因此,继续前面的示例,DistortImages() 函数仅查找构件以确定是否已向其提供了“viewport”。
当库函数请求构件时如何使用全局选项是 IMv6 和 IMv7 之间关键区别之一。
设置一个指向全局选项数据的链接,以便如果找不到特定的每个图像构件,则将直接查找该图像列表的等效全局选项。这样可以避免重复将这些自由格式选项复制到构件中,这意味着您现在可以分别为列表定义全局选项,并为该列表中特定图像定义单个覆盖构件。
请注意,许多不使用 Wand 的 API(例如 PerlMagick 使用图像数组而不是 Wand)。在这些 API 中,您将没有全局选项,只有每个图像的构件。
总之,如果可用,全局选项等效于每个图像的构件。
属性、构件和选项的 Glob 模式列表
setting 可以包含 glob 模式。因此,您现在可以使用以下方法列出所有自由格式字符串属性、构件和选项(但不包括特定的图像属性)...
magick ... \ -print "__Properties__\n%[*]" \ -print "__Artifacts__\n%[artifact:*]" \ -print "__Options__\n%[option:*]" \ ...
glob 模式的格式非常具体,因此通常仅用于列出特定设置(例如调试时),而不是用于图像处理。
计算的百分比转义前缀
有一些特殊的前缀(在第一个“:”之前),它们根据用户提供的后续字符串执行计算。例如,您可以使用 %[fx:...] 进行数值计算以评估给定的 FX 表达式
%[fx:expression]
使用 pixel: 或 hex: 根据 FX 表达式定义的像素颜色进行评估
%[pixel:expression]
使用 -define 指定颜色合规性(例如 -define pixel:compliance=css)
.特定配置文件百分比转义前缀
您还可以使用以下特殊格式语法打印读取的图像中包含的 EXIF 图像元数据
%[EXIF:tag]
从以下选项中选择 tag
* (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
将格式规范括在引号中,以防止 shell 错误地解释任何空格和方括号。
以下特殊格式语法可用于打印文件中包含的 IPTC 信息
%[IPTC:dataset:record]
从以下选项中选择 dataset 和 record
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