码迷,mamicode.com
首页 > 其他好文 > 详细

AS问题解决系列3—iCCP: Not recognizing known sRGB profile

时间:2015-07-16 12:10:34      阅读:495      评论:0      收藏:0      [点我收藏+]

标签:

1. 问题描述   

    在Android Studio 1.2.2下编译期间,出现了下面警告信息:‘

    ...\res\drawable-hdpi\add_green.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited

   本文先学习下PNG文件格式,然后了解下libpng, 再来分析和解决这个警告信息。

2. PNG文件格式   

     [2]是WWW PNG的规范,[3]是通过例子来介绍PNG文件格式中文编写,下面材料主要来自于这两份文档。

     每个PNG文件是由一个PNG标识(signature),后面跟一些数据块(Chunk)组成,每个chunk有一个chunk类型来标识其功能。


2.1 PNG标识(signature

    每个PNG文件的前8个字节总是包含以下值:

十进制   137 80 78 71 13 10 26 10
十六进制  89 50 4E 47 0D 0A 1A 0A

    第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当做文本文件来处理

2.2 数据块(chunk)

    在png规范[2]中总计定义了18种chunk,其中4类chunk是关键数据块(critical chunk),每个PNG文件都必须包含它们,其余14类为辅助数据块(ancillary chunks),这是可选的数据块。

2.2.1 4类关键chunk 

    IHDR: image header, 在PNG文件中位置为第一块chunk。

    PLTE: 调色板(palette table), 位于IDAT块之前

    IDAT: 图像数据块, 可以有多个连续的IDAT

    IEND: image trailer, 在PNG文件中位置为最后一块chunk.

2.2.2 14类辅助chunk

   14类辅助chunk可以归类为以下几种:

a. Transparency information(透明信息) 

    tRNS(Transparency-透明)


b. Colour space information(颜色空间信息) 

    cHRM(Primary chromaticities and white point:基色与白色点)

    gAMA(Image gamma:图像gamma)

    iCCP(Embedded ICC profile:嵌入式ICC profile)

    sBIT(Significant bits:样本有效位)

    sRGB(Standard RGB colour space:标准RGB颜色空间)


c. Textual information(文本信息)

    iTXt(International textual data: 国际文本数据) 

    tEXt(Textual data:文本数据)

    zTXt(Compressed textual data: 压缩文本数据)


d. Miscellaneous information(其他信息)

    bKGD(Background colour:背景颜色)

    hIST(Image histogram:图像直方图)

    pHYs(Physical pixel dimensions:物理像素尺寸)

    sPLT(Suggested palette:建议调色)


e. Time information(时间信息)

    tIME(Image last-modification time: 图像最后修改时间)

2.2.3 chunk格式

   每一块chunk由3个或4个字段组成。

   Length (长度)                       4字节    指定chunk中data字段的长度,可以为0, 不超过(2^31-1)字节  

   Chunk Type(数据块类型)      4字节    数据块类型由ASCII字母(A-Z和a-z)组成, 

                                                每个字节的bit 5表示chunk属性, 可参见[2]中5.4 Chunk naming conventions

   Chunk Data (数据块数据)     可变长度  存储按照Chunk Type Code指定的数据  

   CRC (循环冗余检测)               4字节     存储用来检测是否有错误的循环冗余码


   [2]中5.6 Chunk ordering描述了每一类chunk在PNG文件中的顺序。

   

   IEND chunk中没有data字段,因此Length字段为0, IEND chunk为以下12个字节(十六进制): 

   00 00 00 00 49 45 4E 44 AE 42 60 82 

   前4个字节为00 00 00 00,Type总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82,每个PNG文件最后12字节都是相同的。

3. libpng   

    待续。

4. 问题分析与解决

   待续。

5. 参考资料   

[1] Libpng 1.6.17 - March 26, 2015, http://www.libpng.org/pub/png/src/libpng-1.6.17-README.txt

[2] Portable Network Graphics (PNG) Specification (Second Edition), http://www.w3.org/TR/2003/PR-PNG-20030520/

[3] PNG文件结构分析:http://wenku.baidu.com/view/b87e978583d049649b66586a.html?re=view

AS问题解决系列3—iCCP: Not recognizing known sRGB profile

标签:

原文地址:http://my.oschina.net/1pei/blog/479162

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!