png的格式及像素存储分析
从图片的数据块存储方式来看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:带α通道数据的真彩色图像 |
参考:
http://baike.baidu.com/link?url=FckD48sfXstBMBnODg40OJvyMGNsiEy1-4SbwE_TSN9WK1WFaIkyjVe5d7YeUlbwKaAe_4swGsSg21PFKzAoba
http://www.cnblogs.com/PeunZhang/archive/2013/05/30/3050394.html
http://blog.163.com/iwait2012@126/blog/static/16947232820124411174877/
png的格式及像素存储分析的更多相关文章
- YUV和RGB格式单像素所占内存大小分析
图片的大小定 义为:w * h,宽高分别为w和h 一.YUV格式 1.1.YUV420格式存储方式:先Y,后V,中间是U.其中的Y是w * h,U和V是w/2 * (h/2)举例:如果w = 4,h ...
- kafka系列四、kafka架构原理、高可靠性存储分析及配置优化
一.概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cl ...
- 浓缩的才是精华:浅析GIF格式图片的存储和压缩
成文迪, 在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦. GIF格式的历史 GIF(Graphics Interchange Format)原义是"图像互换 ...
- 【腾讯Bugly干货分享】舞动的表情包——浅析GIF格式图片的存储和压缩
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/v0pffOhjFWnVbU2lXjuEmw 导语 G ...
- 黄聪:浓缩的才是精华:浅析GIF格式图片的存储和压缩(转)
http://www.cnblogs.com/qcloud1001/p/6647080.html 成文迪, 在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦. GIF格式 ...
- Ceph分层存储分析
最近弄Ceph集群考虑要不要加入分层存储 因此花了点时间研究了下 1,首先肯定要弄清Ceph分层存储的结构 ,结构图大概就是下图所示 缓存层(A cache tier)为Ceph客户端提供更好的I/O ...
- esxi 改变虚拟机磁盘格式为精简存储
最近在部署虚拟机,导入几个之前保存的ovf模板,发现存储已经被耗费的差不多了.检查了下磁盘存储格式 存储类型是 后置备延迟置零 占用空间 简单了解下 三种存储类型 1.厚置备延迟置零: 默认的创建格式 ...
- AutoCAD云产品平台ForgeViewer格式离线部署思路分析
背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,利用AutoCAD的自有云产品 Autodesk Forge,能在浏览器中渲染 3D 和 2D 模型数据,实现DWG图形的We ...
- saiku 元数据存储分析
一.介绍 使用saiku的人一定对他的元数据存储都特别感兴趣,特别是有分布式管理需求的项目,更是迫切需要了解.其实它是使用Apache的开源项目Jackrabbit管理文件的! 二.代码跟踪 我也是使 ...
随机推荐
- textContent和innerHtml
textContent,innerText, 查询或者设置元素的文本内容. textContent如,html: <p>test gogo</p> javascript中: v ...
- xhprof failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '
wget http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.28.0.tar.gz tar xzvf graphviz-2.28.0.ta ...
- JAVA排序(一) Comparable接口
昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...
- jQuery Lint: enables you to automatically inject jQuery Lint into the page as it is loaded (great for ad-hoc code validation)
FireQuery is a Firebug extension for jQuery development jQuery Lint: enables you to automatically in ...
- mysql 的卸载、再安装与常用命令
1.卸载mysql.完全删除: 删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-se ...
- Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.
摘要 LAMP是Linux web服务器组合套装的缩写,分别是Apache+MySQL+PHP.此文记录在Ubuntu上安装Apache2服务器,包括PHP5(mod_php)+MySQL+phpmy ...
- javascript的this指向
JavaScript 是一种脚本语言,支持函数式编程.闭包.基于原型的继承等高级功能.JavaScript一开始看起来感觉会很容易入门,但是随着使用的深入,你会发现JavaScript其实很难掌握,有 ...
- CreateFileMapping使用方法
CreateFileMapping的MSDN翻译和使用心得 測试创建和打开文件映射的时候老是得到"句柄无效"的错误, 细致看了MSDN以后才发觉是函数认识不透, 这里把相关的解 ...
- golang printf
1: 打印包括字段在内的实例的完整信息 同 %+V fmt.Printf("Hello world! %v","hufeng") 输出:Hello world ...
- CXF详细介绍
首先介绍下CXF的拦截器:简单地说,CXF使用流水线型(或者说总线型)处理机制,它的核心是一个Bus.一个客户端的请求或者一个对客户端桩代码的调用被组织成为一个Message.同时,所有的CXF功能都 ...