卡片召唤师
精华
|
战斗力 鹅
|
回帖 0
注册时间 2006-11-15
|
Re:看到有人开始轮漫画【图片格式】甚至连PDF都扯出来(转
此贴真是各种乱,介于在这个方面我还算是比较熟悉,我就来解释一下一些基本概念吧……
哦,另外在这之前我推荐 iPad 漫画阅读软件 comic glass( http://itunes.apple.com/cn/app/c ... er/id363992049?mt=8 虽然要$1.99,不过绝对是值得的), rar包也可以直接看,zip自然不在话下了。
如果只看在线的话用我的脚本就好了(推广一下,笑): http://bbs.saraba1st.com/2b/read-htm-tid-611773.html
首先主要解释一下几种图像格式的特点:
BMP
虽然大多数人对这个微软的公开格式表示不屑,不过其实这个格式的内容比大多数人所认识到的要复杂的……
* 首先是颜色数,BMP支持1, 4, 8, 16, 24 和 32 位色,理论上便支持透明通道(放在32位色中的8bit)。
* 其次BMP其实是支持压缩的,虽然大多数用户都直接用未压缩的BMP格式,但BMP标准事实上支持RLE无损压缩算法的,不过这个压缩算法过于简单以至于压缩能力实在是……
jpeg:
这个格式是为了存储照片而设计的,所以对于过渡平滑的自然图像比较合适(事实上jpeg也有无损压缩损失的格式,不过完全没推广开就是了……)。
Jpeg压缩的做法:
1. 先把图像从RGB色彩空间转化为YCbCr(即亮度、蓝色和红色的偏移量三种数值),做这个转化的原因是人类视觉对看到东西的亮度细节比较敏感,色彩细节不是很敏感,所以对于亮度就用多一些数据来保存,颜色就少点数据。这个转化在数学上是无损的,不过计算机上当然有点损失。
2. 亮度和颜色信息分别做DCT(离散余弦变换)把图像转换到频域空间,然后削减掉低频的数据量,保证高频数据量(高频对应图像细节)。Jpeg的有损主要来自于这里,是为了节省容量而抛弃的低频精度。
3. 量子化后导出的数据就是jpeg。
解压的时候是以上做法的逆过程。
所以Jpeg最大的核心就是DCT,DCT在线条区分非常明显的图像上只会更糟糕,比如下面的图像:

用JPEG压缩后再做边缘检测(也就是看看像素点和周边点时候有差异)的结果是:

圆圈周围的细微改变就是因为这个造成的。上面那张图像用PNG存储容量就更小。
Jpeg另有一种“灰度格式”,就是只保存图像的亮度信息,不保存其色度信息,对于漫画来说理论上这个要比彩色的格式更节省容量。
PNG
PNG当初是为了对抗有LZW压缩算法专利的Gif而设计的,不过后来gif渐渐失去市场却不是因为PNG(事实上gif的专利在2003年便到期了),而是因为Gif只支持最高256色和透明色没有过渡的限制,无法满足人民群众日益增长的文化需求(笑)。现在gif还活跃在第一线,靠的是gif动画的余辉(其实PNG小组也设计了对抗GIF动画的格式MNG,不过从来就没有被主流浏览器支持过)。
PNG的原理:
可以说简单至极,就是把像素数据用DEFLATE算法(zip也用这个算法,PNG也和zip一样可以从不压缩到最大压缩来设置)直接压缩(事实上PNG当然设计了稍微复杂一些的算法,不过貌似大家都不乐意用……)。
所以理论上来说大家可以把PNG看作一张未压缩的BMP用zip软件压缩一下……
那么Photoshop中所谓PNG-8是什么呢?其实只是指8位色的PNG格式而已(标准中没有专门所谓的PNG-8格式,不过PNG也是像BMP一样支持各种颜色数的格式)。
在一般图像中我们不会用到真彩的所有 16777216 种颜色,所以可以想办法用更少的颜色数来表示原图像,这在计算机图形学上一般叫做量子化(Quantization)。
然而,即使一张照片没有用到所有 16777216 种颜色,但往往颜色数也是远超256种颜色的,如何用256或者更少的64色、16色来尽可能地还原原照片中的图像是个很困难的问题。在这个方面Photoshop做得并不出色,Photoshop减色的图像往往会有不少人眼能察觉到的瑕疵。我用过的最好的软件是来自日本的专做减色的商用软件(为早期游戏开发而设计),可以尽可能地保证图像视觉还原。
Jpeg2000
Jpeg2000是一个类似Jpeg的图像格式,其主要区别是用小波变换(wavelet transform)取代DCT(离散余弦变换),从而在同样容量上达到更好的还原度。不过这个格式采用的算法涉及到很多专利,大多数公司无法跨越这些专利制作编码解码器,所以这个格式没有得到广泛应用。
然后下面是压缩格式:
zip
Zip是个非常老的压缩格式,其特点是格式是公开的,其使用的压缩算法(DEFLATE)也没有专利保护,其他公司可以随意做编码解码器,所以得到了广泛传播(实际上PKWARE公司对Zip格式也有很多方面的更新,比如支持更多压缩格式,不过大家貌似觉得最基础的DEFLATE就够了,不想去买他们独家的PKZIP来压缩/解压……)。
Zip一个巨大的缺点就是在其格式中文件名是用8位ANSI编码来保存的。在不同语言的Windows下,文件名就会用不同的语言编码来保存,这使得在不同操作系统间传输的zip会有严重的乱码问题(值得一提的是,在Mac OSX和Linux下所有文件名都是统一的utf8,刚好解决了这个问题)。
rar
RAR是rarlab发布的专有格式,其占据(中国)市场主要是因为早期DOS时代良好的操作界面和Windows时代中国肆无忌惮的盗版(汗……),由于Winrar并非免费软件,而且rar专利也使得其他公司无法开发免费的rar压缩软件,所以这个格式在海外并未得到广泛应用。
RAR优点一个是文件名用16位Unicode保存(其实在格式中是8位和16位都有,能用8位的时候用8位,不能用了才转到16位),一个是支持“固实”压缩模式以取得更大压缩率(虽然对于漫画软件来说这个是缺点,因为不能直接解开压缩包中间的文件)。
7z
7z是一个开源的压缩格式,由于其开源软件7-zip制作不错以及免费,得到一定范围的支持(在海外应用比rar更广泛)。
文件名也如rar用16位unicode储存,但这个格式的缺点也很多:
* 压缩的时候缺省是“固实”格式(这令漫画软件很难做)
* 压缩和解压都需要很大内存,在移动设备上可能会出问题
* 开源的解压包代码写得不够简洁,不能很容易地被开发者使用。
-----------------------------------------------------------
嗯……前言结束了(汗),现在针对帖子中一些说法做解释:
* PNG格式比较好?
真彩的PNG解压后就和BMP一模一样,当然质量高了。但并不是说所有图像都值得这样的高质量:在图像细节不多,色彩过渡又比较多的场合(比如说扫描的漫画没有经过处理,纸面是偏黄色的状态)PNG压缩率极低,这种情形下用JPEG明显是个更好的选择。
* PNG-8的压缩是有损的?
当然不是。PNG压缩算法就是无损的。PNG-8的所谓有损是来源于真彩图像量子化(减色)为8位(或更低)色彩数的损失。由于大多数公司并没有好好地做图像量子化的算法,所以一般来说量子化质量不佳。要高质量量子化必须购买某些公司专为减色设计的专用软件。当然,8-bit灰度图像理论上已经是最高位数的灰度图像(相当于24位彩色图像),所以也没有量子化造成的损失。
* 转PNG-8图像能压缩得更小?
不一定。这取决于将真彩图像降低到8位图像的量子化算法和图像数据的特点。降低到8位图像的一些算法(比如误差分散算法,用于在视觉上取得更好表现)会使得图像比量子化之前更难压缩,压缩率反而会下降。如果一个量子化算法后的PNG图像总比真彩的PNG图像小的话,一定是损失图像视觉还原来达到的。
* 我把JPEG图像转存成PNG后大了很多,PNG就是烂(或者反之XXXX)!
由于JPEG压缩的特点(参看上面的解释),边缘锐利的图像在JPEG压缩后会在边缘产生很多噪点,这会严重降低PNG压缩率。所以几乎所有JPEG转成PNG容量都会变大,而图像边缘锐利的PNG转JPEG的时候,由于DCT往往并不适合这种图像,要达到近似的图像品质反而要更大数据量,所以会出现PNG->JPG->PNG越来越大的情形。
* 有些扫图PNG转JPEG后更好看了?
事实上是因为JPEG的有损算法造成了类似模糊化的效果,把一些扫描的瑕疵掩盖了。这其实是更糟糕的情形。最好的做法是用图像处理软件来先把扫图瑕疵处理掉,再用JPEG来压缩(过渡较多的彩色图像的话)。
* BMP根本不值得考虑!
其实,所有的图像在解压进计算机能显示的内存后都是完全解压的图像数据(可以理解为BMP),所以BMP也没啥不好的。反正我们总要用zip或者rar对图像进行打包,与其二次压缩(往往PNG在生成的时候就用DEFLATE算法压过一次,过zip的时候再压一次),不如直接原数据进行压缩,其结果和使用PNG没有(理论上的)差别。
* 果然PNG比JPG更合适漫画!
这真的要看情况。如果图像是接近照片的有大量过渡的图像(比如水墨画风),即使是灰度图,Jpeg灰度也比png灰度来得好。如果是扫描后经过处理,边缘锐利,大部分色块稳定(就是说白的地方都是纯白,黑的地方都是纯黑),用PNG就比JPG更合适(虽然JPG可以控制压缩率,但要达到PNG相近的效果其实需要更大的容量)。 |
|