Posts Tagged ‘优化’

http://flashteam.tencent.com/post/18/externalinterface-and-javascript/
tencent的flashteam发布过2篇关于ExternalInterface的详解以及优化,着实给广大人民群众带来了不少利益。但是其中有点隐患。比如文中所说的__flash__escapeXML优化:一是少了对&符号的转义,这个一般情况下的确可以省略,因为很少字符串数据中会出现&符号,但是一旦出现就会被转化为&;二是可怜的<被写成了≶,说实话我为了这个bug郁闷了几个星期才发现是字母拼错了……
加入&的解析,不能直接加在正则替换callback中,因为某些隐秘的情况下会出现重复转义&的情况,而且非常难查。所以5次转义最好情况也只能被优化为2次:
//覆盖flash默认通信方法,提高性能
window.__flash__escapeXML = function(s) {
var keywords = {
“\”" : “"”,
“<” : “&lt;”,
“>” : “&gt;”,
“\”" : “&apos;”
};
return s.replace(/&/g, “&amp;”).replace(/(['"<>])/g, function(a, b) {
var…

一月 7th, 2010

智能JPEG优化技术

8 Comments, 其它, 前端开发, 翻译, by army8735.

同事发来了一篇《Clever JPEG Optimization Techniques》,文中提到的部分技术很细致,分享下。
大部分人在考虑图像压缩优化的时候,还只停留在设置图像处理软件的保存选项上。另外我们也有一些常用的优化工具,诸如OptiPNG和jpegtran。但是还有一些鲜为人知的方法,比如即将介绍的“8像素格优化方法”,它的原理是基于图像数据存储的格式上的。
8像素格
众所周知,jpeg图像存储是以8像素格为基本单位的,看下图示例:
32×32 pixels, Quality: 10 (in Photoshop), 396 bytes.
两个白色块大小均为8×8像素,图像保存质量为低。可以看出,左上角的方块很清晰,右下角却出现了杂色,这是为什么呢?让我们放大图片并画出参考线格:

可以看出,左上角的方块恰好在8×8格子里面(占据4个),而右下角的却横跨了9个格子,除了中间部分占满一个格子外,周围8个都只占据一部分。
由于jpeg存储算法中,每8×8个像素格是单独进行优化的,算法会寻找这个基本单位格中的均色(jpeg是以颜色正弦波编码)。因此,图像处理时应该尽可能考虑到这点,使得元素的位置靠近每个8×8的像素格。
这个方法使用起来很简单,比如下面这个例子:
13.51 KB
12.65 KB
第一张图片中,微波炉的位置是随意放的,而第二张却经过了细微的调整。两者存储的质量相同,都是55。让我们放大点看,红线是参考线:

可以看到,在略微移动了几个像素之后,图像减少了大约1 KB,并且也更清晰了一点。
颜色优化
这部分主要介绍不常用的图片存储格式,它主要应用在电视上面,暂不介绍。
常见的JPEG优化方法
这里介绍一些常用的优化方法。
JPEG算法很严格,唯一的压缩准则是图像软件设置里的质量选项。你可能在Photoshop中存质量为55~60的图片,但是在其它软件中存80质量才拥有同样的尺寸和外观。
一定不要用100的质量来保存图片!这其实并不是最高的质量值,因为这只是个数学理论上限,如果你非要质量很高的图片的话,一般存到95就够了,5点的质量丢失几乎没有区别。
注意Photoshop中低于50质量的图片保存。因为在50之下的时候,jpeg优化会启动一个附加的算法——color down-sampling——它将均衡相邻的8×8像素格的颜色。
48×48 pixels, Quality: 50…