有人跟我扯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
png24 可以选择透明(实际是标准png32)279k; 不透明(实际是标准png24),231k
Fireworks
png8 支持索引透明和Alpha透明,二个颜色表(调色板)有很大的区别,文件体积差别不大都只有66k左右
png24 同标准,没有调色板,文件很大234k。不支持透明度!
如果保存为jpg格式,100品质,文件为155k,60的品质,文件大小为34k!
png32 同标准,没有调色板,文件和png24差不多的,支持透明
Flash
1.如果把fireworks png8 alpha透明的图导入到flash,输出为swf,大小为46.1k
2.如果把fireworks png32透明的图导入到flash,输出为swf,大小为40.6k
3.如果把fireworks jpg 品质60 不带透明的图导入到flash,输出为swf,大小为33.4k
不同的格式图,不同位图属性压缩条件
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小的多