gpt4 book ai didi

.net - ImageMetadata 更改属性已损坏

转载 作者:行者123 更新时间:2023-12-04 08:50:39 25 4
gpt4 key购买 nike

我有一个工作应用程序来更改我扫描图像的一些元数据。这很好用,直到我们添加了一个预处理程序来使用 GIMP 控制台自动裁剪图像的边界。

我们更改了 EXIF 数据中的多个字段,这仍然可以正常工作。
但是,如果我想更改任何 IPTC 字段,则会收到错误“属性已损坏”。

对于未裁剪的图像,我可以毫无问题地更改 EXIF 和 IPTC。
对于裁剪后的图像,我可以毫无问题地更改 EXIF。如果我更改 IPTC 信息中的任何内容,则会出现异常。

难道我做错了什么?或者是否有其他解决方案可以更改图像的 EXIF/IPTC 数据?

正如在其他帖子中发现的那样,我从图像中提取了 BitmapMetadata。我克隆它,以便可编辑。
之后,我添加填充以能够添加额外信息。

据我所知,元数据看起来没有任何问题。在 IrfanView 或 EXIFTool 等其他工具中,我可以正确更改 IPTC 标题。

我创建了一个显示问题的测试项目。包含在裁剪前后的示例图像中。

If isJpg Then
oMetaData.SetQuery("/app13/{ushort=0}/{ulonglong=61857348781060}/iptc/{str=Headline}", "TEST_HEADLINE")
Else
oMetaData.SetQuery("/ifd/{ushort=33723}/{str=Headline}", "TEST_HEADLINE")
End If

System.ArgumentException:属性已损坏。 ---> System.Runtime.InteropServices.COMException: 位图属性大小无效。 (来自 HRESULT 的异常:0x88982F42)

Example project

最佳答案

元数据是一个层次结构,因此您不能仅使用路径来编写所有内容,您必须使用中间 BitmapMetadata对象。

所有这些的官方文档位于:Native Image Format Metadata Queries这是 WIC or Windows Imaging Component 的一部分文档,WPF 使用的底层 Windows 成像技术。

文档对 TIFF 是这样说的:

/ifd/iptc or /ifd/{ushort=33723} / IPTC / VT_UNKNOWN - A query reader/writer



晦涩难懂的 VT_UNKNOWN(表示“Variant Type IUnknown”)实际上意味着 iptc是一个可以读写元数据的对象(又名:WPF 中的 BitmapMetadata),元数据子树的开始。

所以你必须做的是这样的:
Dim iptc As BitmapMetadata = New BitmapMetadata("iptc")
iptc.SetQuery("/{str=Headline}", "TEST_HEADLINE")
oMetaData.SetQuery("/ifd/iptc", iptc)

关于.net - ImageMetadata 更改属性已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56628370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com