从图片的数据块存储方式来看png分两种

1.索引色模式存储。png8的索引色透明就采取该种方式。该种方式是将颜色存在png的可选模块调色板中,调色板的色彩存储格式为RGB(各1byte)。而图片的数据块里的像素直接存储调色板里的索引值,根据索引寻找对应的颜色及透明色。透明色的指定由PLTE后的tRNS图像透明数据块指定。布尔透明和alpha透明的区别是alpha透明为透明色附加了8位(1byte)的透明级别。tRNS图像透明数据块的长度与调色板对应如下。

PLTE块格式为:


     循环
          

         RED:    1byte
          

         GREEN:1byte
          

         BLUE:  1byte
     

     END

tRNS块布尔透明格式为:


       循环
          

            if(对应调色盘颜色非透明)
               

                   0xFF:  1byte
          

            else
              

                   0x00:  1byte
     

       END


tRNS块alpha透明格式为:


       循环
          

            if(对应调色盘颜色非透明)
               

                   0xFF:  1byte
          

            else
              

                   0x**:  1byte
   (具体的透明级别共256级)  

       END


tRNS块的循环长度为调色盘的颜色数,相当于调色板颜色表的一个对应表,标识该颜色是否透明,0xFF(255)不透明,0x00(0)全透明。

2.真彩色存储(非专业术语)。该类存储不存在调色板(或者有调色板供非真彩色显示程序用它来量化图像数据,从而显示该图像。),在数据块的像素里直接存储颜色信息。这里就有常说的RGB_888(24bit)、RGB565(16bit)、RGBA_8888(32bit)、RGBA_4444(16bit)、RGBA5551(16bit)等等。png24及png32都是该类存储。

从图片的色彩位数来看常用以下几种

1.png8。这个8理解为位深,但这个位深可减少。存储方式可为索引色存储。索引色位深可为1,2,4,8。随着位深的减少可支持的颜色也减少。可支持8位色彩共256(2的8次方)种颜色。

1.png16。这个8理解为位深,存储方式可为RGB565(16bit)、RGBA_8888(32bit)、RGBA_4444(16bit)、RGBA5551(16bit)。但这个位深可减少。索引色位深可为1,2,4,8。随着位深的减少可支持的颜色也减少。可支持8位色彩共256(2的8次方)种颜色。

2.png24。24也理解为位深,存储方式为RGB_888。可支持24位色彩共1600多万(2的24次方)种颜色。

3.png32。32也理解为位深,存储方式为RGB_888。实际上为png24+8位的透明通道。同样支持24位色彩共1600多万(2的24次方)种颜色。

但是位深是不定的,以上仅仅列举常用的几种,还可以是无透明通道的3*2^(常有8、16、32)或有透明通道的4*2^(常有8、16、32)。

那么我们使用libpng如何判断png的格式。

/*获取位深,颜色类型*/
channels = png_get_channels(png_ptr, info_ptr); /*获取通道数*/
bit_depth = png_get_bit_depth(png_ptr, info_ptr); /* 获取位深 */
color_type = png_get_color_type(png_ptr, info_ptr); /*颜色类型*/

根据这些我们可以由以下表格进行判断

Bit depth 1 byte 图像深度:   索引彩色图像:1,2,4或8   灰度图像:1,2,4,8或16   真彩色图像:24或32或48
ColorType 1 byte 颜色类型:  0:灰度图像   2:真彩色图像   3:索引彩色图像   4:带α通道数据的灰度图像   6:带α通道数据的真彩色图像

备注:转摘于博客园:png的格式及像素存储分析

参考:

1、http://baike.baidu.com/link?url=FckD48sfXstBMBnODg40OJvyMGNsiEy1-4SbwE_TSN9WK1WFaIkyjVe5d7YeUlbwKaAe_4swGsSg21PFKzAoba

2、http://www.cnblogs.com/PeunZhang/archive/2013/05/30/3050394.html

3、http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/

png的格式及像素存储分析相关推荐

  1. 《迅雷链精品课》第六课:主流区块链数据存储分析(一)

    上一节课我们学习了区块链中的账户与账本,了解区块链账户的特点和本质.今天我们将系统地学习区块链数据存储,在课程学习前,大家可以先思考下列问题:区块链的数据是如何存储的?区块链如何在没有中心信任节点的情 ...

  2. BMP位图格式的内存存储方式

    最近在捣鼓Kinect 存储的 raw data,使用 kinect输出并保存红外数据流 ColorImageFormat.InfraredResolution640x480Fps30.其红外数据流的 ...

  3. OpenCV 像素存储

    像素存储 OpenCV 中图像矩阵的大小取决于所用的颜色模型,更准确的说是取决于图像所用到的通道数. 如果使用的是灰度图,矩阵大概如图所示: 如果使用的是多通道的图像,矩阵中的列会包含多个子列,子列的 ...

  4. Spark源码阅读03-Spark存储原理之存储分析

    Spark存储分析 整体框架 存储级别 RDD存储调用 读数据过程 本地读取 远程读取 写数据过程 写入内存 写入磁盘 整体框架 Spark的存储采取了主从模式,即Master / Slave模式,整 ...

  5. 切片分析报告格式_疫情舆情分析研判报告怎么撰写?2020舆情报告格式

    ​疫情舆情分析研判报告撰写不像疫情舆情信息监测与搜集工作那么容易,它需要从数据出发,以内容为支撑,要先对疫情舆情信息进行整理汇总,再处理.分析和研判.因此,报告撰写难度大,毕竟它是整个舆情分析研判最终 ...

  6. python生成json_如何将Python数组转为Json格式数据并存储?

    在Python中将数组转为Json数据存储时需要用到将json模块中的json.dumps()或者json.dump()方法. ·json.dumps()方法用法 使用json.dumps( )方法将 ...

  7. ANSYS APDL学习(3):ANSYS APDL 导入x_t格式模型并受力分析范例

    ANSYS APDL 导入x_t格式模型并受力分析范例 第一步:导入模型 第二步:设置单元类型 第三步:划分网格 第四步:材料属性 第五步:施加位移约束和力 第七步:计算 第八步:查看结果 附上 命令 ...

  8. 大数据平台日志存储分析系统解决方案

    大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...

  9. 不同格式点云存储结构(txt、pcd、las、ply)整理以及基本的读写、可视化方法

    不同格式点云存储结构整理以及基本的读写.可视化方法 一.文本(txt) 1.1.存储结构 1.2.读取 二.PCD格式 1.1.存储结构 1.2.读写 1.2.1.open3d读写(python) 1 ...

  10. python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...

    使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...

最新文章

  1. 查找重复文件_重复文件快速查找删除
  2. [转载] 全本张广泰——第三回 广泰逛青楼 初会韩红玉
  3. No transaction aspect-managed TransactionStatus in scope
  4. oracle错误代码12516,ORA-12516错误解决
  5. 关于NSIS脚本的Demo
  6. VUE Right-hand side of ‘instanceof’ is not an object 解决方案
  7. LaTex 加粗(加黑)的方式
  8. 贪心算法无重叠区间c语言,贪心算法之区间问题.md
  9. C++中实例化一个类的方式
  10. 【matlab】多维向量的转置
  11. 服务器lsass状态代码c0000005,Windows服务器上lsass.exe进程CPU使用率异常问题排查方法...
  12. java.lang.ClassNotFoundException: org.apache.hive.service.cli.thrift.TCLIService$Iface
  13. 防火墙互联网的几种接入方式
  14. 微信的JS接口安全域名设置+tomcat服务器
  15. 华为python673集_[译] 使用 Python 的 Pandas 和 Seaborn 框架从 Kaggle 数据集中提取信息...
  16. 论文略读:《地区如何随着时间的推移而多样化?产业关系与地区新增长路径的发展》
  17. win10中文字符乱码解决方案
  18. xmind-8 安装以及 如何激活
  19. 28款静态网站快速搭建生成器
  20. [linux kernel] 内核下ksz8081驱动调试

热门文章

  1. 宣传一个非常好看的鼠标指针样式
  2. 找工作时单位普遍要求 35 岁以下,35以上的都干嘛去了?
  3. Unity UnityWebRequest从网页加载图片并永久保存在本地
  4. NavigationDuplicated: Avoided redundant
  5. 【新浪云共享型MYSQL】Navicat连接新浪云共享型MYSQL附JAVA/PHP配置文件)
  6. WORD文档不能打开的一些原因
  7. 如何让自己的网站快速被百度收录(方法一)
  8. asio strand
  9. Android | Sensor.TYPE_ORIENTATION被废弃后的解决办法
  10. 题目:离骚-原文和译文少了一行,你能写程序识别并找出来吗