在 ImageMagick 中应用 XMP 照片处理

Apply XMP photo manipulation in ImageMagick

我想使用 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?

我认为 ImageMagick 获得与 Photoshop 相同甚至接近的结果是一个相当大的要求。

A​​dobe 将 大量 开发工作投入到 ACR(Camera Raw)中,镜头配置文件之类的东西需要对不同相机上的镜头特性数据库进行大量测试和管理,而这并不是ImageMagick 的汇款或 objective 的一部分。

此外,ImageMagick 将 RAW 处理委托给 UFRAW,我认为它不支持 "Clarity" 和 "Luminance Smoothing" 等高级功能。

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

对 RAW 照片实现此目的的一种方法是使用免费的 Adob​​e DNG 转换器(适用于 Windows 和 macOS,但 Windows 版本可能 运行 带有 wine) .

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

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

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