按月存档: 一月 2011

【转载】图片格式与设计那点事儿

第一次写技术博客,有不尽如人意的地方,还请见谅和指正。 为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布、雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定了解,这样才能更好的表达你的创意和想法。 除此之外,我们在平时工作中也会遇到许多与图片格式相关的问题。比如设计师会奇怪为什么有些页面的产出物总是没法达到设计稿那样的品质和效果,什么 样的设计才更适合Web页面;页面重构师和前端工程师则想知道在切图的时候应采用什么图片格式、如何进行参数设置才能达到品质和性能的最优化。 有时候我们可能会因为一张格式不正确的图片而导致设计品质的下降以及页面性能的降低。了解图片格式的特性就是为解答这些困惑从而让我们设计的产品更好、更快。 本文主要包括以下几方面内容: 1、基本概念 矢量图与位图 有损压缩与无损压缩 2、实际应用 什么时候应该使用PNG 什么时候应该使用JPG 总结 3、思考与实践 什么样的设计更适合Web页面? 我们还可以做些什么? 4、附录-Photoshop中各种参数的含义及设置技巧 1、基本概念 要了解图片格式的特性,首先得从一些基本概念开始。这部分内容读起来可能会比较枯燥,但如果你耐着性子读完它,相信会获益匪浅。 矢量图与位图 矢量图-完美的几何图形 矢量图是 通过组成图形的一些基本元素,如点、线、面,边框,填充色等信息通过计算的方式来显示图形的。就好比我们在几何学里面描述一个圆可以通过它的圆心位置和半 径来描述,当然还可以通过边框的粗细、颜色以及填充的颜色等数据去描述它的样式。而电脑在显示的时候则通过这些数据去绘制出我们定义的图像。 矢量图的优点在于文件相对较小,并且放大缩小不会失真。缺点则是这些完美的几何图形很难表现自然度高的写实图像。 需要强调说明的是我们在web页面上所使用的图像都是位图,即便有些称为矢量图形(如矢量icon等)也是指通过矢量工具进行绘制然后再转成位图格式在web上使用的(区别于像素绘制的图形)。 位图-神奇的拼图 位图又 叫像素图或栅格图,它是通过记录图像中每一个点的颜色、深度、透明度等信息来存储和显示图像。一张位图就好比一幅大的拼图,只不过每个拼块都是一个纯色的 像素点,当我们把这些不同颜色的像素点按照一定规律排列在一起的时候,就形成了我们所看到的图像。所以当我们放大一幅像素图时,能看到这些拼片一样的像素 点(如下图)。 位图的优点是利于显示色彩层次丰富的写实图像。缺点则是文件大小较大,放大和缩小图像会失真。 尽管我们在web页面中所使用的JPG、PNG、GIF格式的图像都是位图,即他们都是通过记录像素点的数据来保存和显示图像,但这些不同格式的图像在记录这些数据时的方式却不一样,这就是涉及到有损压缩和无损压缩的区别。 有损压缩与无损压缩 有损压缩-你看到的不一定是真实的 按照我的理解有损压缩就 是在存储图像的时候并不完全真实的记录图像上每个像素点的数据信息,它会根据人眼观察现实世界的特性(人眼对光线的敏感度比对颜色的敏感度要高,生物实验 证明当颜色缺失时人脑会利用与附近最接近的颜色来自动填补缺失的颜色)对图像数据进行处理,去掉那些图像上会被人眼忽略的细节,然后使用附近的颜色通过渐 变或其他形式进行填充。这样既能大大降低图像信息的数据量,又不会影响图像的还原效果。 JPG是我们最常见的采用有损压缩对图像信息进行处理的图片格式。JPG在存储图像时会把图像分解成8*8像素的栅格(如上图),然后对每个栅格的 数据进行压缩处理,当我们放大一幅图像的时候,就会发现这些8*8像素栅格中很多细节信息被去除,而通过一些特殊算法用附近的颜色进行填充(为了让大家看 得更清楚我将图像的压缩比率调到很低)。这也是为什么我们用JPG存储图像有时会产生块状模糊的原因。 无损压缩-最精确的拼图 相对有损压缩而言无损压缩则 会真实的记录图像上每个像素点的数据信息,但为了压缩图像文件的大小会采取一些特殊的算法。无损压缩的压缩原理是先判断图像上哪些区域的颜色是相同的,哪 些是不同的,然后把这些相同的数据信息进行压缩记录,(例如一片蓝色的天空之需要记录起点和终点的位置就可以了),而把不同的数据另外保存(例如天空上的 白云和渐变等数据)。 PNG是我们最常见的一种采用无损压缩的图片格式。无损压缩在存储图像前会先判断图像上哪些地方是相同的哪些地方是不同的,为此需要对图像上所有出现的颜色进行索引(如上图),我们把称这些颜色称为索引色。索引色就好比绘制这幅图像的“调色版”,PNG在显示图像的时候则会用“调色版”上的这些颜色去填充相应的位置。 这里大家可能会疑惑既然PNG采用的是无损压缩为什么我们保存的PNG格式图片还会有失真呢?这是因为无损压缩只是说它的压缩方式会尽可能真实的还 原图像,但从它的压缩原理我们可以知道它是通过索引图像上相同区域的颜色进行压缩和还原的,这就意味着只有在图像上出现的颜色数量小于我们可以保存的颜色 数量时,我们才能真实的记录和还原图像,否则就会丢失一些图像信息(PNG8最多只能索引256种颜色,所以对于颜色较多的图像不能真实还原;PNG24 则可以保存1600多万种颜色,基本能够真实还原我们人类肉眼所可以分别的所有颜色;PNG格式最多可以保存48位颜色通道)。而对于有损压缩来说,不管 图像上的颜色多少,都会损失图像信息。 JPG和PNG 关于JPG和PNG的基本信息介绍这里就不赘述了,有兴趣详细了解的同学可以去这里: [...]

【转载】php+mysql+memcache实战型技术测试

出两个变态的题目,题目很变态,但是都是实战中遇到的真实案例, 1:我写一个程序,既要使用mysql也要使用memcache, 第一行是 mysql_connect,第二行是memcache_connect 换过来写,第一行是memcache_connect,第二行是mysql_connect caoz发现实践中这两种写法有很大的区别,区别在哪里? 2:我写一个程序,使用了mysql,生成了一个页面最后用 echo $html; 输出 一种写法是 mysql_close(); echo $html; 另一种是 echo $html; mysql_close(); caoz发现实践中这两种区别很大,区别在哪里? 两个全是实践中发现并调整的案例。 ———————————————半夜黑眼圈更新博客的分割线——————————– caoz写程序不是追求BT的人,caoz经常和工程师强调,不追求极端的技术体现或者技术炫耀,所以,如果读者认为这里的题目是为了所谓的诸如某个写法比某个写法资源开销小一点或者其他什么,那么这真不是caoz的本意。 这两道题都是真实运营环境中遇到的典型案例,典型在哪里呢?就是当你遇到一个系统故障的时候,你怎么分析,怎么思考,怎么判断多种关联因素的影响,所以这个题目答出答不出并不重要,重要的是怎么思考系统彼此的关系。 一个典型的系统故障是, mysql 连接过多,或者说too many connections,这个问题困扰了我们很久,如果这是因为索引导致的,或者因为数据并发请求导致的,定位到原因并不复杂,但是当上述问题解决后,诡异的现象发生了,数据库几乎没有压力,没有阻塞进程,没有慢查询,但是mysql连接很多,而且都是sleep连接。此时,webserver的链接也很多,换句话说,因为php执行阻塞,导致mysql链接无法迅速释放,那么,php为什么会阻塞? 逐个断点分析发现,原来echo耽误了最多时间。 这个事情让caoz涨了点经验,之前从来不会认为echo是一个时间阻塞点(如果你在本机测试,你会认为其时间延迟几乎是0),但是实例跟踪发现,echo实际上在我们的工作环境中,代表的网络传输的过程,换言之,会因为路由,带宽的因素而等待,而此时,mysql的链接还在那里没有释放,是的,看到题目每个人都会想到,mysql_close要放在echo后面,但是为什么echo会耽误时间,很少人会想到。当然,这个也与工作环境有关,caoz只知道我们配置的webserver会有这种情况,是不是存在其他的配置模式,caoz没有实测,不敢乱说,但是这里的经验是,mysql_close放到echo前面,大量的sleep链接会迅速减少。 echo并不耗费太多系统资源,但是会等待网络传输,在高并发的网络环境下,注意这一点对数据库很有好处。 这个问题解决后,mysql健康了很多,但是偶然还会出现链接过多的问题,又困扰了很久,直到有一天,根据用户反馈的一些错误信息,发现 memcached服务器有不稳定因素,原来是memcached流量过高产生阻塞,php进程等待链接,导致mysql链接大量等待,这是第一个题目的由来,其实这个题目本身没有标准答案,但是应该有一个意识,当你在一个脚本中同时启动A,B两个链接,那么如果你不能保证这两个链接是必然可靠的(通常是无法保障的),那么后者一旦阻塞,就会导致前者大量链接等待,而前者阻塞,通常不会影响后者。所以,这个答案取决于,哪个链接对你的应用更重要,以及哪个链接有更大的并发支撑性。 两道题说到底就是一个意思,当遇到系统问题和故障的时候,多想想一些关联的因素影响,多思考整个架构响应先后过程的逻辑,数据库连接过多,不一定是数据库造成的,web链接过多,也不一定非要去优化webserver,关联因素可能才是根源,解决了根源,表象才会彻底解决。 来源http://hi.baidu.com/caoz/blog/item/a46234a83b7cc7bacb130cd5.html