我知道我可以使用QImage.setText(...)和QImage.text(...)创建一个简单的基于Qt的小应用程序,以添加和读取png元数据。然后可以使用称为pngmeta的linux命令读取该元数据。
但是我可以使用哪些其他图像软件来读取png元数据?
请注意,我正在寻找通用平台的图像程序,因此请指定您的应用程序是Windows还是Linux。
为了使问题更清楚,我附加了带有一些测试元数据的img。
谢谢约翰
链接:
我知道我可以使用QImage.setText(...)和QImage.text(...)创建一个简单的基于Qt的小应用程序,以添加和读取png元数据。然后可以使用称为pngmeta的linux命令读取该元数据。
但是我可以使用哪些其他图像软件来读取png元数据?
请注意,我正在寻找通用平台的图像程序,因此请指定您的应用程序是Windows还是Linux。
为了使问题更清楚,我附加了带有一些测试元数据的img。
谢谢约翰
链接:
Answers:
使用ImageMagick
:
identify -verbose image.png
ImageMagick
应该是跨平台的。我在Linux上使用附带的图像进行了尝试:
[...] 特性: 作者:汉斯·穆勒 日期:2010-12-08 09:45 日期:创建:2010-12-08T13:15:43 + 01:00 日期:修改:2010-12-08T13:15:43 + 01:00 描述:很久以前在一个遥远的星系中... 签名:3b4a54202316a7ae4b4fe0e431d47958181f4bb893493355820d4ba74f9f5ee3 [...]
date:create
与date:modify
简单地返回文件系统元数据,并signature
计算图像数据的哈希值。
如果您正在寻找仅PNG的解决方案,请尝试pngchunks
:
$ sudo apt-get install pngtools
$ pngchunks UiagX.png
Chunk: Data Length 13 (max 2147483647), Type 1380206665 [IHDR]
Critical, public, PNG 1.2 compliant, unsafe to copy
IHDR Width: 800
IHDR Height: 600
IHDR Bitdepth: 8
IHDR Colortype: 2
IHDR Compression: 0
IHDR Filter: 0
IHDR Interlace: 0
IHDR Compression algorithm is Deflate
IHDR Filter method is type zero (None, Sub, Up, Average, Paeth)
IHDR Interlacing is disabled
Chunk CRC: 353637671
Chunk: Data Length 9 (max 2147483647), Type 1935231088 [pHYs]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: 10132504
Chunk: Data Length 19 (max 2147483647), Type 1951942004 [tEXt]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: -1325924661
Chunk: Data Length 21 (max 2147483647), Type 1951942004 [tEXt]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: 134517081
Chunk: Data Length 58 (max 2147483647), Type 1951945850 [zTXt]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: 1701487776
Chunk: Data Length 572939 (max 2147483647), Type 1413563465 [IDAT]
Critical, public, PNG 1.2 compliant, unsafe to copy
IDAT contains image data
Chunk CRC: 1174233759
Chunk: Data Length 0 (max 2147483647), Type 1145980233 [IEND]
Critical, public, PNG 1.2 compliant, unsafe to copy
IEND contains no data
Chunk CRC: -1371381630
的输出pnginfo
可能不足以让您使用:
$ pnginfo UiagX.png
UiagX.png...
Image Width: 800 Image Length: 600
Bitdepth (Bits/Sample): 8
Channels (Samples/Pixel): 3
Pixel depth (Pixel Depth): 24
Colour Type (Photometric Interpretation): RGB
Image filter: Single row per byte filter
Interlacing: No interlacing
Compression Scheme: Deflate method 8, 32k window
Resolution: 2835, 2835 (pixels per meter)
FillOrder: msb-to-lsb
Byte Order: Network (Big Endian)
Number of text strings: 3 of 9
Author (tEXt uncompressed): Hans Müller
Date (tEXt uncompressed): 2010-12-08 09:45
Desc (tEXt uncompressed): A long time ago in a galaxy far far away....
pngchunks
?
pngcheck
似乎无法解压缩ztxt
段
我看不到Exiftool
上面提到的。
它具有许多图像格式,不仅png
...
它是一个“平台独立的perl模块”,而且是一个可执行文件(可用于多个平台/ OS)。
pngcheck -c -v -t foobar.png
这些是显示PNG块的相关选项:
-7 print contents of tEXt chunks, escape chars >=128 (for 7-bit terminals)
-c colorize output (for ANSI terminals)
-p print contents of PLTE, tRNS, hIST, sPLT and PPLT (can be used with -q)
-t print contents of tEXt chunks (can be used with -q)
-v test verbosely (print most chunk data)
使用imagemagick都添加注释:
mogrify -comment "your comment" <IMAGE_NAME>
然后读回去:
identify -verbose <IMAGE_NAME>
或者,如果您只想查看评论:
identify -verbose <IMAGE_NAME> | grep "comment:"
正确嵌入元数据是一个好习惯。
mogrify
,谢谢! convert filename.png -set comment "That rabbits dynamite!" filename.png;
如果有人使用Magick.NET,则可以在C#中获得如下属性:
foreach(string key in image.AttributeNames)
{
string value = image.GetAttribute(key);
}
ImageMagick
套件可以做的更多,值得花一些时间在IMO上。