libpng error: iTXt: chunk data is too large error: PNG unsigned integer out of range

使用png读某些png时,出现libpng error: iTXt: chunk data is too large error: PNG unsigned integer out of range这样的错误,发现是adobe 的XMP非常大引起的:

$ xxd test.png
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
00000010: 0000 0400 0000 0400 0806 0000 007f 1d2b  ...............+
00000020: 8300 0000 0970 4859 7300 000b 1300 000b  .....pHYs.......
00000030: 1301 009a 9c18 008b 1b94 6954 5874 584d  ..........iTXtXM
00000040: 4c3a 636f 6d2e 6164 6f62 652e 786d 7000  L:com.adobe.xmp.
00000050: 0000 0000 3c3f 7870 6163 6b65 7420 6265  ....<?xpacket be
00000060: 6769 6e3d 22ef bbbf 2220 6964 3d22 5735  gin="..." id="W5
00000070: 4d30 4d70 4365 6869 487a 7265 537a 4e54  M0MpCehiHzreSzNT
00000080: 637a 6b63 3964 223f 3e0a 3c78 3a78 6d70  czkc9d"?>.<x:xmp
00000090: 6d65 7461 2078 6d6c 6e73 3a78 3d22 6164  meta xmlns:x="ad
000000a0: 6f62 653a 6e73 3a6d 6574 612f 2220 783a  obe:ns:meta/" x:
000000b0: 786d 7074 6b3d 2241 646f 6265 2058 4d50  xmptk="Adobe XMP
000000c0: 2043 6f72 6520 352e 352d 6330 3134 2037   Core 5.5-c014 7
000000d0: 392e 3135 3134 3831 2c20 3230 3133 2f30  9.151481, 2013/0
000000e0: 332f 3133 2d31 323a 3039 3a31 3520 2020  3/13-12:09:15   
000000f0: 2020 2020 2022 3e0a 2020 203c 7264 663a       ">.   <rdf:
00000100: 5244 4620 786d 6c6e 733a 7264 663d 2268  RDF xmlns:rdf="h
00000110: 7474 703a 2f2f 7777 772e 7733 2e6f 7267  ttp://www.w3.org
00000120: 2f31 3939 392f 3032 2f32 322d 7264 662d  /1999/02/22-rdf-
00000130: 7379 6e74 6178 2d6e 7323 223e 0a20 2020  syntax-ns#">.   
00000140: 2020 203c 7264 663a 4465 7363 7269 7074     <rdf:Descript
00000150: 696f 6e20 7264 663a 6162 6f75 743d 2222  ion rdf:about=""

这个因为这些chunk的大小超时默认的大小限制了。

解决方案,使用png_set_chunk_malloc_max设置为无限制.

	png_ptr  = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
	info_ptr = png_create_info_struct(png_ptr);
	png_set_chunk_malloc_max(png_ptr,0); 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值