我可以使用什么软件读取png元数据?[关闭]


53

我知道我可以使用QImage.setText(...)和QImage.text(...)创建一个简单的基于Qt的小应用程序,以添加和读取png元数据。然后可以使用称为pngmeta的linux命令读取该元数据。

但是我可以使用哪些其他图像软件来读取png元数据?

请注意,我正在寻找通用平台的图像程序,因此请指定您的应用程序是Windows还是Linux。

为了使问题更清楚,我附加了带有一些测试元数据的img。

具有元数据的img

谢谢约翰


链接:

Answers:


78

使用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
[...]

2
乐意效劳。ImageMagick套件可以做的更多,值得花一些时间在IMO上。
cyrus

仅供参考:截至2017年11月,这将无法检测到动画PNG文件,您需要使用pngcheck或类似内容来查找acTL等...
Mike Q

不过请注意,其中有些领域是存在于文件中的数据没有实际的额外的元数据:date:createdate:modify简单地返回文件系统元数据,并signature计算图像数据的哈希值。
Ciro Santilli新疆改造中心法轮功六四事件

15

另一个选项是Windows上的TweakPNG

我可以看到在显示Hans Müller图像中的名称时遇到问题,因此也许它不适用于Unicode元数据。

调整PNG


1
我添加了一个带有ü的字符串,因为这是个好主意。
约翰

2
仅供参考,TweakPNG在Wine中很好用。
DenilsonSáMaia 2013年

很棒的应用程序,简单,漂亮
yarg

10

如果您正在寻找仅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
Iulian Onofrei 2015年

@IulianOnofrei更新
malat 2015年

pngcheck似乎无法解压缩ztxt
RobM


4

另一个问题所述,您可以使用pngcheck

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)

2
  1. 使用imagemagick都添加注释:

    mogrify -comment "your comment" <IMAGE_NAME>
    
  2. 然后读回去:

    identify -verbose <IMAGE_NAME>
    

或者,如果您只想查看评论:

identify -verbose <IMAGE_NAME> | grep "comment:"

正确嵌入元数据是一个好习惯。


我正在使用convert来完成此操作,因此我可以创建一个新版本,但是我还没有得到mogrify,谢谢! convert filename.png -set comment "That rabbits dynamite!" filename.png;
roberthuttinger

确定仅适用于已知属性。任何自定义标签都不会显示。
TJR

1

如果有人使用Magick.NET,则可以在C#中获得如下属性:

foreach(string key in image.AttributeNames)
{
    string value = image.GetAttribute(key);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.