将XMP Sidecars嵌入到图像文件中embed_xmp.

我希望一个程序将可扩展的元数据平台(XMP)Sidecar(独立)文件注入图像文件。图像元数据最多嵌入到图像文件中有用毕竟。我很惊讶地了解XMP编辑的选项在地面上很瘦。我不得不创建一个新的程序来完成工作。

有两个现有的程序来到思想:Exiv2andexiftool.。两种工具都解释了Sidecar文件,并使用自己的不同规则写入识别元数据回到图像文件。除非您想要包含来自名称空间/词汇的元数据,它们不会识别或想要确保所生成的元数据尽可能小的空间。

ExiV2以压实的形式写入XMP,这与底层不兼容RDF.标准,XMP标准,并不由任何流行的图像查看器或操作系统支持。yabo88软件下载另一方面,exiftool产生过度详细的XMP标记,占用的空间比必要更多。它可以配置为在某种程度上紧凑,并减少可选的空格。在我的请求中,Exiftool的作者增加了更多的选项,以进一步压缩它。

这两个工具也有一些不同的图像格式特定的错误,它们不支持我需要的所有格式(包括WebP和SVG)。

我想要一个拍摄XMP Sidecar文件的程序,而无需处理它并将其注入到图像文件内部的正确位置。一个名为第三个项目webpmux.做到这一点。但是,它只适用于WebP图像。

所以我写了一个名为的新程序embed_xmp.满足这种需求。它可用作Ruby Gem /库,作为命令行界面(CLI)。(对不起,如果您期待图形用户界面!)它支持将XMP Sidecars写入JPEG,PNG,SVG和WebP图像文件。

但是,它不是我在上面解释的那样。它不会逐字注入XMP数据。它将包装XMP数据XPacket.XML处理指令,如推荐的XMP specification。这可确保最广泛的客户端兼容性。它也没有保留XML空白(除非被覆盖XML:空间instruction in the XMP file). Whitespace can bulk the file size more than it does in other contexts because XMP data isn’t compressed when embedded into files. Image files are通常没有重新压缩在通过Web服务器提供时。

除非图像格式所需的位置,否则该程序不会对图像文件进行其他更改。最实质的变化是在需要时将基本的WebP图像升级到WebP扩展文件格式(WEFF)。WEFF可能无法在旧版浏览器中呈现。该WEPP容器规格只支持将XMP数据嵌入到WEFF文件中。

您需要另一个程序才能创作XMP Sidecar文件 - 例如Corel Aftershot Pro,Adobe Photoshop或Lightoom,或照片机械师 - 然后可以使用embed_xmp.将该sidecar插入图像文件。你可能想要使用embed_xmp.但是,有一些内容管理系统,其包含图像元数据。

你可以安装embed_xmp.CLI和图书馆使用rubygems.。您需要首先安装Ruby和RubyGems,然后运行以下命令下载并安装最新版本yabo亚博体育下载embed_xmp.

GEM安装EMBED_XMP.

CLI工具需要三个位置参数:

embed_xmp sidecar.xmp input.png output.png

该file extension of the input file is used to determine the image format. The name of the output file is unimportant, but it will be output in the same format as the input image. No image format conversions will take place. The sidecar file must be in valid XML and it must not be wrapped in anXPacket.XML处理指令。没有Sanity-Check或格式验证。

Ruby Library有一些选项。短期和甜蜜的使用说明如下:yabo亚博体育下载

要求“embed_xmp”input_file =“/example.png”#:: png,:: jpeg,:: svg,或:: webp embedder = embedxmp :: png.new(input_file)sidecar_file =“/example.xmp”#can还将作为字符串embedder.join_sidecar(sidecar_file)output_file =“/example-xmp.png”embedder.write(output_file)作为字符串embedder.join_sidecar(sidecar_file)。

您可以找到更多详细的使用关于rubydoc的文档。(您还与GEM安装了本地文档副本。)虽然不是预期的用途,但它还包括从图像文件中删除XMP数据的方法。

XMP规范要求您确保遗留/其他元数据格式 - 例如本机元数据字段 - 被更新为与XMP元数据对齐。embed_xmp.doesn’t do that. (It’s not aware of the contents of the metadata you want to insert.) You must ensure that you either update or remove conflicting metadata in other formats.

在RubyGems上获取宝石 获取Codeberg的源

创业板在BSD 3-Clase许可下许可。我正在评估分布到GitHub的替代方案和th不想上传更多的存储库ere. I’ll update this article with links to the source code once I decide on something.

更新():我现在上传了源存储库,并为该项目打开了Codeberg的这个项目。