在 ImageMagick 中应用 XMP 照片处理

Posted

技术标签:

【中文标题】在 ImageMagick 中应用 XMP 照片处理【英文标题】:Apply XMP photo manipulation in ImageMagick 【发布时间】:2016-09-22 18:42:15 【问题描述】:

我想使用 ImageMagick(或任何其他可以在 Ubuntu 服务器上运行或通过 API 调用的工具)自动操作图像。为了得到我想要的结果,我对 Photoshop 进行了修改并导出了 XMP 元数据来记录操作。它看起来像这样:

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c007 1.136881, 2010/06/10-18:11:35        ">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/"
   crs:Version="7.0"
   crs:ProcessVersion="6.7"
   crs:Sharpness="38"
   crs:LuminanceSmoothing="0"
   crs:VignetteAmount="-17"
   crs:VignetteMidpoint="32"
   crs:SplitToningShadowHue="0"
   crs:SplitToningShadowSaturation="0"
   crs:SplitToningHighlightHue="0"
   crs:SplitToningHighlightSaturation="0"
   crs:SplitToningBalance="-15"
   crs:ParametricShadows="-14"
   crs:ParametricDarks="-16"
   crs:ParametricLights="+4"
   crs:ParametricHighlights="+31"
   crs:ParametricShadowSplit="25"
   crs:ParametricMidtoneSplit="50"
   crs:ParametricHighlightSplit="75"
   crs:SharpenRadius="+0.5"
   crs:SharpenDetail="100"
   crs:SharpenEdgeMasking="17"
   crs:PostCropVignetteAmount="0"
   crs:GrainAmount="24"
   crs:GrainSize="2"
   crs:GrainFrequency="6"
   crs:LensProfileEnable="0"
   crs:LensManualDistortionAmount="-2"
   crs:PerspectiveVertical="0"
   crs:PerspectiveHorizontal="0"
   crs:PerspectiveRotate="0.0"
   crs:PerspectiveScale="100"
   crs:Exposure2012="-0.05"
   crs:Contrast2012="0"
   crs:Highlights2012="+27"
   crs:Shadows2012="+18"
   crs:Whites2012="+29"
   crs:Blacks2012="+1"
   crs:Clarity2012="+6"
   crs:ToneCurveName2012="Linear"
   crs:LensProfileSetup="Auto"
   crs:HasSettings="True">
   <crs:ToneCurvePV2012>
    <rdf:Seq>
     <rdf:li>0, 0</rdf:li>
     <rdf:li>255, 255</rdf:li>
    </rdf:Seq>
   </crs:ToneCurvePV2012>
   <crs:ToneCurvePV2012Red>
    <rdf:Seq>
     <rdf:li>0, 0</rdf:li>
     <rdf:li>255, 255</rdf:li>
    </rdf:Seq>
   </crs:ToneCurvePV2012Red>
   <crs:ToneCurvePV2012Green>
    <rdf:Seq>
     <rdf:li>0, 0</rdf:li>
     <rdf:li>255, 255</rdf:li>
    </rdf:Seq>
   </crs:ToneCurvePV2012Green>
   <crs:ToneCurvePV2012Blue>
    <rdf:Seq>
     <rdf:li>0, 0</rdf:li>
     <rdf:li>255, 255</rdf:li>
    </rdf:Seq>
   </crs:ToneCurvePV2012Blue>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>

现在我想使用可以在服务器端运行的工具应用完全相同的操作。可能吗 ?我可以使用 ImageMagick 获得完全相同的结果吗? Photoshop 是否公开 API,或者可能是允许我这样做的 SDK?

【问题讨论】:

【参考方案1】:

我认为 ImageMagick 要求达到与 Photoshop 相同甚至接近的结果,这将是一个相当大的要求。

Adobe 将 大量 开发工作投入到 ACR(Camera Raw)中,而镜头配置文件之类的东西需要对不同相机上的镜头特性数据库进行大量测试和管理,而这不属于职权范围或ImageMagick 的目标。

此外,ImageMagick 将 RAW 处理委托给 UFRAW,我认为它不支持“清晰度”和“亮度平滑”等高级功能。

Photoshop 确实公开了一个可编写脚本的 API - Adobe Photoshop Scripting 在 javascript、AppleScript 和 VBScript 中。

【讨论】:

可以在 Windows Server 上安装 Photoshop 吗?假设我想每秒处理一张照片,我可以在同一主机上运行多个 Photoshop 实例来处理负载吗? 抱歉,我对 Photoshop 的了解不够,无法回答这个问题,但我怀疑您是否可以并行运行多个实例。我建议您在原始问题下单击edit,并在上面添加您的评论文本以供所有人查看。【参考方案2】:

为 RAW 照片完成此操作的一种方法是使用免费的 Adob​​e DNG Converter(适用于 Windows 和 macOS,但 Windows 版本可能与 wine 一起运行)。

当您要求它将 RAW 转换为 DNG 时,您可以让它在 DNG 中嵌入全尺寸 JPEG 预览。生成 JPEG 预览时,它将尊重 XMP 中的任何设置。您可以要求它将 DNG 转换为 second DNG,以作为更新嵌入预览的一种方式。它可以从命令行运行。

然后使用 ExifTool 之类的工具来编辑 XMP 元数据,并提取嵌入的 JPEG 预览。

我已经成功地使用它来创建准系统 RAW 转换器:https://github.com/ncruces/RethinkRAW

【讨论】:

以上是关于在 ImageMagick 中应用 XMP 照片处理的主要内容,如果未能解决你的问题,请参考以下文章

全国教师管理信息系统填报 照片处理,使用 imagemagick

使用PythonOpenCV,ImageMagick工具箱根据原始视频制作GIF动画

使用PythonOpenCV,ImageMagick工具箱根据原始视频制作GIF动画

imagemagick comosite 与图像大小的比例

如何结合这些命令在 ImageMagick 中实现圆形裁剪?

使用 ImageMagick 创建的偏移堆叠图像