png的那点事儿

有人跟我扯png,我来点专业的,真正意义的png标准如下:

PNG8  8并不是2^8=256色,而是有一个调色板(颜色表),颜色用索引来描述,参见:http://www.w3.org/TR/PNG/#4Concepts.Implied-alpha

PNG24 24是指每一像素用24位二进制数来描述RGB,8位Red+8位Green+8位Blue.

PNG32 32是指每一像素用32位二进制数来描述RGBA,8位Red+8位Green+8位Blue+8位Alpha

再谈谈透明的概念
布尔透明(索引透明):全透明和不透明二种
Alpha透明:256阶透明

正是因为有很多软件才给会给您带来误解,让我们来看看(不好意思借了弹弹堂的图)
Photoshop
png8 只支持布尔透明,有调色版,73.5k

6ef5d1c4cb61323d0eb34509.jpg
png24 可以选择透明(实际是标准png32)279k; 不透明(实际是标准png24),231k

cc050747a6c939a6d0c86a3f.jpg
Fireworks
png8 支持索引透明和Alpha透明,二个颜色表(调色板)有很大的区别,文件体积差别不大都只有66k左右c55e38babccceecbd8335a09.jpg
54bc382df64f755fc9955909.jpg
png24 同标准,没有调色板,文件很大234k。不支持透明度!
如果保存为jpg格式,100品质,文件为155k,60的品质,文件大小为34k!

cec5e6c12150657b7e3e6f3f.jpg
png32 同标准,没有调色板,文件和png24差不多的,支持透明
8ac7908f4ec1d35266096e3f.jpg

Flash
1.如果把fireworks png8 alpha透明的图导入到flash,输出为swf,大小为46.1k
2.如果把fireworks png32透明的图导入到flash,输出为swf,大小为40.6k
3.如果把fireworks jpg 品质60 不带透明的图导入到flash,输出为swf,大小为33.4k

  不同的格式图,不同位图属性压缩条件
19a8ee3a7e7d7d2fac4b5f09.jpg
    a.  jpg,在swf中tag为:
选照片(jpeg) 有损非透明     DefineBitsJpeg2=  imgData (压缩方式就是jpg标准的压缩方式,http://www.w3.org/Graphics/JPEG/
选无损(png)   无损非透明    DefineBitsLossless   
    b. 透明的png,在swf中tag为:
选照片(jpeg) 有损透明       DefineBitsJpeg3       = imgData(jpg压缩) + alphaData(zlib压缩 totalsize = w*h) 
选无损(png) 无损透明       DefineBitsLossless2  = colorTable(8 bit RGB /32 bit ARGB) + zibImgdata
c.非透明的png ,在swf中tag为:
               选照片(jpeg) 有损非透明 DefineBits  = jpegData ,整个swf只有一个 jpegTables = jpegData ,多个DefineBits 可共享使用jpegTables,所以比DefineBitsJpeg2小
               选无损(png)  无损非透明     DefineBitsLossless    = colorTable(8 bit RGB /15 bit RGB/24 bit RGB) + zibImgdata
     d.最有一个特别的 ,DefineBitsJpeg4 同  DefineBitsJpeg3 ,多了 deblocking filter,具体的可参见flash.system.JPEGLoaderContext(Flash player 10)
      可以看出1和2图片本身大小差的很多,在输出为swf后文件差异不大,是因为swf本身采用和png8类似结构存图,把颜色和alpha分开存,颜色支持更丰富。3图片和输出swf后差别非常小,因为swf本身就按jpg标准存的。

      有些软件号称能再次压缩swf中图,实际就是把imgData中jpg的一些编辑,版权等摘要信息删除

总结:

1.如果基于html用图,不导入flash,对颜色要求不高,需要透明,可用考虑用png8的aplha透明导出,注意png是无损压缩的
3.如果基于flash应用,需要透明,直接用png 32.
4. 如果基于flash应用不想用png,又需要透明,可以考虑用下面方式存,左边彩色的存为jpg(34k),右边黑白的存png8(仅4k),用代码方式计算出透明。文件体积也会小不少。jpg是有损压缩的,不支持透明度. png是无损的.同等条件jpg比png小的多

823cff9c66ab0127d0135e09.jpg

转载于:https://www.cnblogs.com/sdk3108/archive/2011/09/28/2193915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值