libpng读取png8 png24和PNG24的区别

网页图片png8、png24的区别?
平时在ps中对于用于网站设计的图片,应该存储为web和设备所用格式。
Png8和gif有一些相似之处,模式都是索引颜色,只支持像素级的纯透明,不支持alpha透明。我们平常所说的“IE6不支持png透明”指的是不支持png-24透明(将透明区域显示为灰色),但是IE6支持png8的透明,就像支持gif一样。
png8格式的图片:&& & &
&png24格式的图片:
对于在ps中保存png8图片时的透明度选项中的扩散透明度仿色选项,大家可以试一试。这样边界就不会像一般的保存png8格式图片的边界明显,由于保存出来都是索引格式,没办法操作,所以如果贴出来需要抠出来,边界不是特别明显不大好抠,有兴趣的可以去ps里面试试哦
ps默认的保存png8格式的图片边界有很明显的锯齿状,如果png8的保存选择扩散透明度仿色,出现的图片边界锯齿就不会特别明显。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。前端切图之png8和png24的区别 - 博客频道 - CSDN.NET
一步一步一个脚印
分类:前端工作之日常杂记

png是一种图片格式,是Portable Networks Graphics的缩写,做ping。
png8和png24的区别如下:
1.“PNG8”是指8位索引色位图,“PNG24”是24位索引色位图。
2.每一张“png8”图像,都最多只能展示256种颜色,所以“png8”格式更适合那些颜色比较单一的图像,例如纯色、logo、图标等;因为颜色数量少,所以图片的体积也会更小;
3.每一张“png24”图像,可展示的颜色就远远多于“png8”了,最多可展示的颜色数量多大1600万;所以“png24”所展示的图片颜色会更丰富,图片的清晰度也会更好,图片质量更高,当然图片的大小也会相应增加,所以“png24”的图片比较适合像摄影作品之类颜色比较丰富的图片;
png8和png24的根本区别(进阶级别):
png8和png24的区别:
1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同。
2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明,不支持半透明),png24则有8位(256阶)的布尔透明通道(所谓半透明)。 png-8 和 gif 有一些相似之处,模式都是索引颜色,只支持像素级的纯透明,不支持 alpha 透明。
如何判断图片是png8还是24:
1.在ps里看图像---模式,png8当然只有8位/通道了。(png24有其他的通道可供选择)
2.当打开png8的图片时,ps会默认给它的图片标题上后面加上“索引”两字,png24的则没有。
ps切图时应遵循:
1.色彩丰富的、大的图片切成jpg的;
2.尺寸小的,色彩不丰富的和背景透明的切成gif或者png8的;
3.半透明的切成png24。
png透明ie6下的兼容问题:
我们通常说的“IE6 不支持 PNG 透明”,是指不支持 PNG-24 的透明。但是 IE6 支持 PNG-8 的透明,就像支持 gif 的透明一样。
新浪微博的logo(png24)采用了下面的方法来实现透明:
_background:&
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='logo.png',sizingMethod='crop');
《PS:转自他人博客》
如何看出一张图片是png8还是24的:
1.网上下载一个看图软件,如AcdSee
2.使用该软件打开图片,会显示图片信息
3.左下角就会显示这张图片的信息,长x宽x颜色数
4.PNG24的图片,可能会显示为16M或者24B ,如 (744*190*16M)
5.对于png8,会显示为256,因为png8的图片,最多只有256种颜色 ,如(744*190*256)
6.至于png32:PNG32基本上等同于PNG24,它多了alpha通道。24位真色彩信息+alpha通道信息8位。
Photoshopr的png格式存储,只有png8和png24两种。大家大多都会经意不经意的勾选“支持透明”,这样存储的格式实际就是png32。-_-!!……
MissEcho0918
排名:千里之外
(0)(1)(1)(1)(0)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
17:11//file:pngtest.c//changed from the libpng,对照libpng中源码阅读//myers#include "png.h"#include &stdio.h&#include "zlib.h"#include "png.h"#include &stdlib.h&#include &string.h&#include &stdio.h&int main(int argc,char* argv[]){&& &static png_FILE_& && &static png_FILE_&& &//输入文件名&& &char *inname = "/home/mingming/graph/1.png";&& &char *outname = "/home/mingming/graph/1_like.png";&& &//读:&& &png_structp read_& && &png_infop read_info_ptr, end_info_&& &//写&& &png_structp write_&& &png_infop write_info_ptr,write_end_info_&& &//&& &png_bytep row_&& &png_uint_32&& &int num_pass,&& &png_uint_32 width,//宽度,高度&& &int bit_depth, color_//位深,颜色类型&& &int interlace_type, compression_type, filter_//扫描方式,压缩方式,滤波方式&& &//读&& &row_buf = NULL;&& &//打开读文件&& &if ((fpin = fopen(inname, "rb")) == NULL)&& &{&& &&& &fprintf(stderr,"Could not find input file %s\n", inname);&& &&& &return (1);&& &}&& &//打开写文件&& &if ((fpout = fopen(outname, "wb")) == NULL)&& &{&& &&& &printf("Could not open output file %s\n", outname);&& &&& &fclose(fpin);&& &&& &return (1);&& &}&& &//我们这里不处理未知的块unknown chunk&& &//初始化1&& &read_ptr =&&&& &&& &&& &png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);&& &write_ptr =&&&& &&& &png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);&& &read_info_ptr = png_create_info_struct(read_ptr);& &&& &end_info_ptr = png_create_info_struct(read_ptr);&& &write_info_ptr = png_create_info_struct(write_ptr);& && & write_end_info_ptr = png_create_info_struct(write_ptr);&& &//初始化2&& &png_init_io(read_ptr, fpin);&& &png_init_io(write_ptr, fpout);&& &//读文件有high level(高层)和low level两种,我们选择从底层具体信息中读取。&& &//这里我们读取所有可选。&& &png_read_info(read_ptr, read_info_ptr);&& &&& &//(1)IHDR& && &//读取图像宽度(width),高度(height),位深(bit_depth),颜色类型(color_type),压缩方法(compression_type)&& &//滤波器方法(filter_type),隔行扫描方式(interlace_type)&& &if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,&& && &color_type, &interlace_type, &compression_type, &filter_type))&& &{&& &//我们采用默认扫描方式&& & png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,&& &&&& color_type, PNG_INTERLACE_NONE, compression_type, filter_type);&& &}&& &//(2)cHRM&& &//读取白色度信息& 白/红/绿/蓝 点的x,y坐标,这里采用整形,不采用浮点数&& &png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,blue_y;&& &if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y,&& & &red_x, &red_y, &green_x, &green_y, &blue_x, &blue_y))&& &{&& & png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x,&& &&&& red_y, green_x, green_y, blue_x, blue_y);&& &}&&&&&&& //(3)gAMA&&&&& png_fixed_&&&&& if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma))&&&&&&&& png_set_gAMA_fixed(write_ptr, write_info_ptr, gamma);&&&&&&& //(4)iCCP&& &png_&& &png_&& &png_uint_32&& &if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,&& &&& &&&&&& &profile, &proflen))&& &{&& & png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,&& &&& &&&&&& profile, proflen);&& &}&& &//(5)sRGB&&&&&&&&&& if (png_get_sRGB(read_ptr, read_info_ptr, &intent))&&&&&&&& png_set_sRGB(write_ptr, write_info_ptr, intent);&& &//(7)PLTE&&&&& png_&&&&& int num_&&&&& if (png_get_PLTE(read_ptr, read_info_ptr, &palette, &num_palette))&&&&&&&& png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette);&& &//(8)bKGD&&&&& png_color_16&&&&& if (png_get_bKGD(read_ptr, read_info_ptr, &background))&&&&& {&&&&&&&& png_set_bKGD(write_ptr, write_info_ptr, background);&&&&& }&& &//(9)hist&&&&&& png_uint_16&&&&& if (png_get_hIST(read_ptr, read_info_ptr, &hist))&&&&&&&& png_set_hIST(write_ptr, write_info_ptr, hist);&&&&&& //(10)oFFs&&&&& png_int_32 offset_x, offset_y;&&&&& int unit_&&&&& if (png_get_oFFs(read_ptr, read_info_ptr, &offset_x, &offset_y,&&&&&&&&& &unit_type))&&&&& {&&&&&&&& png_set_oFFs(write_ptr, write_info_ptr, offset_x, offset_y, unit_type);&&&&& }&& &//(11)pCAL&&&&& png_charp purpose,&&&&& png_&&&&& png_int_32 X0, X1;&&&&& int type,&&&&& if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type,&&&&&&&& &nparams, &units, &params))&&&&& {&&&&&&&& png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type,&&&&&&&&&&& nparams, units, params);&&&&& }& &&& &//(12)pHYs& &&&&&& png_uint_32 res_x, res_y;&&&&& if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y, &unit_type))&&&&&&&& png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);&& //(13)sBIT&&&&& png_color_8p sig_&&&&& if (png_get_sBIT(read_ptr, read_info_ptr, &sig_bit))&&&&&&&& png_set_sBIT(write_ptr, write_info_ptr, sig_bit);&& &//(14)sCAL&&&&&&&&&& png_charp scal_width, scal_&&&&& if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width,&&&&&&&&& &scal_height))&&&&& {&&&&&&&& png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width,&&&&&&&&&&&& scal_height);&&&&& }&&&&&&& //(15)iTXt&&&&& png_textp text_&&&&& int num_&&&&& if (png_get_text(read_ptr, read_info_ptr, &text_ptr, &num_text) & 0)&&&&& {&&&&&&&& png_set_text(write_ptr, write_info_ptr, text_ptr, num_text);&&&&& }&& &//(16)tIME,这里我们不支持RFC1123&&&&& png_timep mod_&&&&& if (png_get_tIME(read_ptr, read_info_ptr, &mod_time))&&&&& {&&&&&&&& png_set_tIME(write_ptr, write_info_ptr, mod_time);&&&&& }&& &//(17)tRNS&&&&& png_bytep trans_&&&&& int num_&&&&& png_color_16p trans_&&&&& if (png_get_tRNS(read_ptr, read_info_ptr, &trans_alpha, &num_trans,&&&&&&&& &trans_color))&&&&& {&&&&&&&& int sample_max = (1 && bit_depth);&&&&&&&& /* libpng doesn't reject a tRNS chunk with out-of-range samples */&&&&&&&& if (!((color_type == PNG_COLOR_TYPE_GRAY &&&&&&&&&&&&&& (int)trans_color-&gray & sample_max) ||&&&&&&&&&&&& (color_type == PNG_COLOR_TYPE_RGB &&&&&&&&&&&&&& ((int)trans_color-&red & sample_max ||&&&&&&&&&&&& (int)trans_color-&green & sample_max ||&&&&&&&&&&&& (int)trans_color-&blue & sample_max))))&&&&&&&&&&& png_set_tRNS(write_ptr, write_info_ptr, trans_alpha, num_trans,&&&&&&&&&&&&&& trans_color);&&&&& }&& &&& &//写进新的png文件中&& &png_write_info(write_ptr, write_info_ptr);&& &//读真正的图像数据&& &num_pass = 1;&& for (pass = 0; pass & num_ pass++)&& {&&&&& for (y = 0; y & y++)&&&&& {&& &//分配内存&&&&&&&& row_buf = (png_bytep)png_malloc(read_ptr,&&&&&&&&&&& png_get_rowbytes(read_ptr, read_info_ptr));&& &png_read_rows(read_ptr, (png_bytepp)&row_buf, NULL, 1);&& &png_write_rows(write_ptr, (png_bytepp)&row_buf, 1);&&&&&&&& png_free(read_ptr, row_buf);&&&&&&&& row_buf = NULL;&&&&& }&& }&& &//结束&& png_read_end(read_ptr, end_info_ptr);&& &//&& &//tTXt&&&&& if (png_get_text(read_ptr, end_info_ptr, &text_ptr, &num_text) & 0)&&&&& {&&&&&&&& png_set_text(write_ptr, write_end_info_ptr, text_ptr, num_text);&&&&& }&& &//tIME&&&&& if (png_get_tIME(read_ptr, end_info_ptr, &mod_time))&&&&& {&&&&&&&& png_set_tIME(write_ptr, write_end_info_ptr, mod_time);&&&&& }&& &//&& &png_write_end(write_ptr, write_end_info_ptr);&& &//回收&& &png_free(read_ptr, row_buf);&& &row_buf = NULL;&& &png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);&& &png_destroy_info_struct(write_ptr, &write_end_info_ptr);&& &png_destroy_write_struct(&write_ptr, &write_info_ptr);&& &//&& fclose(fpin);&& fclose(fpout);&& &//测试,比较两个PNG文件是否相同&& if ((fpin = fopen(inname, "rb")) == NULL)&& {&&&&& printf("Could not find file %s\n", inname);&&&&& return (1);&& }&& if ((fpout = fopen(outname, "rb")) == NULL)&& {&&&&& printf("Could not find file %s\n", outname);&&&&& fclose(fpin);&&&&& return (1);&& }&& char inbuf[256], outbuf[256];&& for (;;)&& {&&&&& png_size_t num_in, num_&&&&&&&& num_in = fread(inbuf, 1, 1, fpin);&&&&&&&& num_out = fread(outbuf, 1, 1, fpout);&&&&& if (num_in != num_out)&&&&& {&&&&&&&& printf("\nFiles %s and %s 大小不同\n",&&&&&&&&&&&&&&&& inname, outname);&&&&&&&& fclose(fpin);&&&&&&&& fclose(fpout);&&&&&&&& return (0);&&&&& }&&&&& if (!num_in)&&&&&&&&&&&&& if (memcmp(inbuf, outbuf, num_in))&&&&& {&&&&&&&& printf("\nFiles %s and %s 内容不同\n", inname, outname);&&&&&&&& fclose(fpin);&&&&&&&& fclose(fpout);&&&&&&&& return (0);&&&&& }&& }&& fclose(fpin);&& fclose(fpout);&& return (0);}
阅读(8553)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'libpng用法,读写PNG图像',
blogAbstract:'libpng用法,读写PNG图像 17:11',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:1,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 png8 png24的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信