哪位大神希崎杰西卡知道哪个软件可以修改照片的尺寸大小。

UID 361862
积分 46954
帖子 28789
金币 434793
威望 46954
阅读权限 70
推荐一个批量修改照片尺寸大小的软件
一个批量修改照片尺寸大小的软件!ComicEnhancer Pro:Enhance scaned comics picture by brightness, contrast, gamma correction, resize, sharpen and blur.
作者:马健
& & 一、256 vs. 24-bit
& & 二、Decode vs.encode
& & 三、IJG vs. IJL
& & 四、ComicEnhancer vs. Photoshop
& & 五、JPEG,BMP,GIF, TIFF and PNG
& & 六、bilinear,bicubic and nearest
& & 七、JPEG 2000
附录 版本更新记录
多年来我一直是个热心的漫画读者,但现在漫画书的购置成本和储藏成本越来越高,远远超出了我的心理承受能力,所以我只敢收集电子版的漫画。但是由于种种原因,扫描的漫画常常因为纸张薄、纸质差而带有斑点、纸色、背透(纸张背面的图像透过来),或者因为扫描参数设置不当而造成图像灰暗、模糊,看起来实在是太累。
其实这些缺点均可通过数字图像处理技术进行修正,比如要消除最常见的背透现象,只要一个简单的曲线调节即可。但是一张、一张地去编辑图像文件又太累:我曾经花了两天时间一页一页地校正我喜欢的一部漫画,校正完后我的眼睛看什么都带灰影,最终还是下定决心 开发了这个软件:
&&(1).能够一次调节指定目录下所有图像文件的亮度、对比度、Gammar校正等,以增强图像质量;
&&(2).能够调节图像尺寸,进行锐化、柔化,真彩转黑白,调节JPEG图像压缩比等;
&&(3).调整好的参数设置能够保存、调入,便于重用;
&&(4).具有全尺寸的“所见即所得”的效果预览,可以单页调节/保存,也可以成批调节/保存;
&&(5).在源图像文件相同、参数设置相同的情况下,转换效果是可重复的。因此可以建立一种新的漫画共享模式:如果某位漫友对网上的某部漫画效果不满意,用ComicEnhancer Pro进行了调整,则他可以将调整所用参数发表在BBS上,其他漫友可以套用这些参数对同一部漫画进行增强,从而大家都能得到满意的漫画。
&&(6).能够用减色的方式,将通常JPG格式的黑白漫画转成16级、8级、4级灰度PNG格式,减少文件长度。这个一般只对质量很好的漫画有用,正好用来对付尺寸越来越大的“完美版”漫画。
在后来的开发过程中,为了让预览功能更好用,我又陆续增加了一些图像浏览功能(参见打开图像文件后的“查看”菜单)。以现在的浏览功能来看,ComicEnhancer Pro差不多可以代替普通图像浏览器,用来看漫画了,并且和其它图像浏览器相比具有独到的特点:
1. 可以随时根据漫画质量和当前显示器设置对图像进行增强,保证最佳视觉效果,同时图像文件本身保持不变。
2. 可以在一个主窗口下同时浏览多个文件,或同一文件的多个备份,便于比较。不过每打开一个图像窗口均需消耗大量内存,因此在低于128MB内存的机器上不提倡同时打开4个以上的窗口。基本上当你听到硬盘狂响不止时就是物理内存不足了。
3. 除了通常的用键盘翻页(逗号/句号或加号/减号)、用键盘移动大图(四个箭头键),和用鼠标拖动大图外,还支持鼠标翻页(双击左键下翻,按住左键单击右键则上翻)。
目前能够输入的图像格式包括JPG、UFO、GIF、BMP、PNG、TIFF、WMF、JPEG 2000(JP2/J2K/JPC),能够输出的图像格式包括JPG和BMP、PNG、TIFF、JP2。其中JPG能够输出24位真彩和256级灰度格式;PNG、BMP、TIFF能够输出24位真彩、256色和256级、16级、8级、4级灰度及单色格式。TIFF单色图像采用CCITTFAX4(G4)压缩,真彩图像采用JPEG压缩,其它图像采用LZW压缩。JPEG 2000支持真彩和灰度图像,在“Jpg质量”为100时采用无损压缩,否则为有损压缩。
如果有本程序不能识别的非标准图像文件,请用ComicsViewer或ACDSee转换成标准JPG或PNG格式,再调用本程序。
ComicEnhancer Pro是一个“友情软件”(Friendware),用户在承诺不用于商业目的,也不对文件及其附件进行任何更改的条件下,不需要为使用该软件支付任何费用,最多是在动漫讨论区看到我发帖子灌水时,进去捧个人场,作为友情回报,或者在年节时发个email问声好(所以叫“友情软件”)。我承诺绝不在程序中暗藏任何商业广告、木马,但不承诺为使用ComicEnahcer Pro的后果承担任何责任。如果您需要将它用于商业目的,或加入您的网站,请与我联系,否则保留追究一切责任的权利。如果您能提供更好的数字图像处理算法或源码,或发现程序的bug,欢迎与我联系。
启动 ComicEnhancer Pro后,显示出主框架窗口,并在下方显示参数调节对话框。用户一般先选“文件-&打开”菜单,调入几个图像文件,然后对参数进行试调节(参数项含义见后),直至满意为止。在打开某个文件后,用页面浏览键键(参见“查看-&页面浏览”菜单项提示)可以在同一个窗口中打开同级目录下的其它文件。文件的浏览顺序通过“查看-&文件显示顺序”菜单项进行设置。这样可以在更大的范围内检查参数的作用效果。图像较大时可以用箭头键移动,也可以按住鼠标左键拖动。双击鼠标左键可以向后翻页,按住左键单击右键则向前翻页。
在参数确定后,选择“文件-&成批转换”菜单,即可调出原ComicEnhancer界面,对成批图像文件进行处理:
在“需增强的漫画”框中,点击“选择”按钮,选择源文件(需处理的漫画文件)所在目录,再从“源文件”列表中选择源文件类型。点击“查看文件”按钮可以启动图像浏览器并打开目录下的第一个源文件。如果“包括子目录”选项被选中,处理时连源目录所带子目录下的文件一起处理,否则只处理源目录下的文件。
在“增强后的漫画”框中,点击“选择”按钮,选择目标文件(处理后生成的新文件)的存放目录,再从“新文件扩展名”列表中选择目标文件类型。点击“查看文件”按钮可以启动图像浏览器并打开目录下的第一个目标文件。源文件和目标文件如果是同一个目录,处理前会提示用户是否要覆盖源文件。
如有必要,调节“选项”框中的各个选项(含义见后)。
如有必要,可以点“选择转换”按钮,先选择几个源文件转换一下,看一下实际转换后的效果。
所有参数配置好后,点击右上方的“全部转换”按钮开始图像处理。处理过程中底部的进度条会显示当前处理进度,处理完后弹出对话框显示需处理的文件数、成功处理的文件数。如果有文件不能成功处理(不能读或不能写),会提示用户打开处理过程的记录文件,从中可以知道具体哪些文件不能读或写。不能读的原因可能是源文件损坏,或不是标准的文件格式,可以用ACDSee转换一下再重试。不能写的原因可能是因为目标目录不允许写,或磁盘空间不够。
在点击“全部转换”按钮开始处理后,“全部转换”按钮变成“停止转换”按钮,其它控件变灰。用户点击“停止转换”按钮可以中断正在进行的处理。
如果对调整效果比较满意,点击“保存”按钮可以将参数存盘。点击“调入”按钮可以调入以前存盘的参数。点击“恢复”按钮则将参数设置为默认值。如果需要删除某次保存的参数值,点击“调入”按钮,在打开“参数管理”对话框后,选择欲删除的设置,点“删除”按钮。
源文件目录最好和目标文件目录不一样,避免覆盖,并且可以反复运行。
由于各选项参数的设置与具体图像质量有关,因此如果一次需要处理的图像很多,最好先从中选择几张进行试调节,参数调试好后再对所有文件进行最终调节,以节省运行时间。
从1.24版开始,原来的“转换”按钮更改为“全部转换”,即对源目录下的所有文件进行转换,适用于参数已确定的情况;新增“选择转换”按钮,允许对选定的(多个)文件进行转换,适用于参数尝试、调整阶段。
参数调节步骤:
首选是曲线功能,此功能大致相当于Photoshop的Curve功能,但是内置了几种调节模式。一般先根据图像情况选择其中的某种模式,再对调节点进行调节。
如果对曲线功能调节效果不满意,则选择“原画面保持不变”模式,改用其它调节方式。一般画面背景透光严重时,可以增加画面对比度和亮度。但是增加亮度会造成画面整体发白,这时可以将亮度恢复成100%,改为调节高亮度。
如果增加高亮度后对文字、边线造成损伤,则增加高亮值,减小亮度。
如果增加高亮值后在背景上出现较多麻点,减小高亮值,增加亮度。
如果调节后图像整体发白,或文字、边线较模糊、黯淡,增加Gamma校正值。
如果画面模糊,可以选择锐化选项。如果图像边线、文字比较单薄,有间断,或图像放大后锯齿比较严重,可选择柔化操作。不过这两项操作比较费时间,如果机器不好的话会感觉速度明显变慢。
如有必要,调节图像缩放比例。注意如果选择放大图像,则每一步操作均需要更多的时间。如果机器够快,建议选择bicubic,嫌太慢可以选bilinear,只有在不得已的情况下才选择nearest。
如果看的是黑白漫画,最好将色彩选项置为“黑白漫画”,而不是缺省的“保持原样”,这样可以减轻纸张发黄、发红等造成的背景杂乱。
如果希望生成的JPG文件更小一点,可以减小JPG压缩比。
对于黑白漫画,色彩选项选为“黑白漫画”可以使生成的文件小一些;如果画面非常干净,也可以选择“16级灰度”、“8级灰度”或“4级灰度”,并选择按PNG格式输出,可以获取最佳压缩比。对于纯文字页面,选“单色”,并选择按TIFF格式输出,可以获取最佳压缩比。如果需要处理的漫画中包含彩色封面,可以勾选“不处理彩色图像文件”选项,以避免损失。
各Option项的含义:
范围0~200,100表示亮度不变,小于100图像变暗,大于100图像变亮。增加亮度一般可以消除斑点、背透、纸张颜色、印刷时油墨不匀造成的黑印,但是较淡的文字、边线可能会更看不清。
范围0~200,100表示图像不变,小于100图像变灰,大于100图像更加黑白分明,有助于解决因单纯增加亮度而造成的文字、边线变淡,因此常和增加亮度同用。
范围0~200,100表示高亮区(图像空白区)亮度不变,小于100高亮区图像变暗,大于100高亮区图像变亮。这可是本软件最独特的地方,能够在因源图像文件中的文字、边线较淡而很难再增加总体亮度的情况下,仅增加图像空白区的亮度,从而能有效清除背景上的斑点、纸色、背透等等,在ACDSee 3.1的Photo Enhancer和Microsoft的“照片编辑器97”中可都找不到类似的功能。所谓“高亮区”,其实是由旁边的“高亮值”定义的。在使用本功能去除背景上的纸色、背透时,如果增加高亮值,可以保护较淡的文字、边线,但是去除效果就会下降;如果减少高亮值,去除效果就会更明显,但可能会误伤教淡的文字、边线。
定义高亮度区加亮功能的“高亮区”:当象素的亮度值(0~255)大于等于该值时,象素处于高良区,执行加亮操作,否则保持不变。一般来讲,增加此值时,可以保护较淡的文字、边线,但是去除底纹效果就会下降;如果减少此值,去除效果就会更明显,但可能会误伤较淡的文字、边线。
大致相当于Photoshop的Curve功能,专业术语称“对比度延展”。此功能可以综合调节画面对比度和亮度,并且设置了几种典型模式,应该是首选的调节手段,宜勤加练习。
6. Gamma校正
范围0~200,100表示图像不变,小于100图像变白,大于100图像变黑,有助于解决因增加亮度、对比度、高亮度等而造成的画面发白,并能使模糊、黯淡的文字、边线变得更坚实,当然如果图面上有麻点也会变得更显眼。
7. 尺寸缩放
范围0~200,100表示图像尺寸不变,小于100输出图像变小,但图像可能会更清晰(致密);大于100输出图像变大,但可能会更模糊。放大的时候有三种选择,如果机器够快,建议选择bicubic,嫌bicubic太慢可以选bilinear,只有在不得已的情况下才选择nearest。
8. JPG压缩比
范围0~100,此值越低表示存盘后的JPG图像质量越差,但文件长度更小;此值越高表示存盘后的质量越好,但文件长度更大。
对于墨色教浓、文字笔画粘连的图像,此选项可以使文字更清晰。换言之,如果文字、边线本来就细,经此功能处理后就更雪上加霜了。
能够使锐利的边缘、锯齿变柔和。但如果原来图像就模糊,用此功能后大概就该出重影了。
如果选择“黑白漫画”选项,处理后的文件按256级灰度保存,对于黑白漫画可以减少文件长度,但对于彩色漫画就太可惜了。如果选择“彩色漫画”,按24位真彩色格式存盘,对黑白漫画来说又太浪费。如果选择“保持原样”,则原来是256级灰度或24位真彩的,存盘后还是256级灰度或24位真彩,适用于那些封面为彩色,内容为黑白的漫画。如果画面非常干净,也可以选择“16级灰度”、“8级灰度”或“4级灰度”,并选择按PNG格式输出,可以获取最佳压缩比。对于纯文字页面,选“单色”,并选择按TIFF格式输出,可以获取最佳压缩比。
12. 不处理彩色图像文件
只有在色彩选项为“黑白漫画”或“16级灰度”、“8级灰度”或“4级灰度”、“单色”时才允许选择此选项。如果需要处理的漫画中包含彩色封面,可以勾选此选项,以避免将封面转成灰度或黑白图像,造成损失。
一、256 vs. 24-bit
不论是漫画还是其他图像,只用黑/白二色的几乎没有,黑白漫画一般用256级灰度,少数用16级、8级、4级灰度;彩色漫画和照片一般用24位真彩色表示,少数可以用256色。
在进行本软件所支持的任何一项图像处理的时候,都需要对图像的每一个象素的R、G、B值进行四则运算,再将运算结果保存为象素的R、G、B值。低于24位色的所有图像,如16位色、8位(256)色、4位(16)色、二位(4)色,读/写象素R、G、B值时均需频繁进行移位运算和逻辑运算,而24位色以上的图像,由于每个象素的R、G、B值分别用DIB位流中的一个字节表示,只需移动字节指针即可进行访问,因此速度优化十分明显。
考虑到速度的优化和代码的简化,本程序每读入一幅图像,均先转换为24位真彩色,以后所有的图像处理运算均针对24位DIB位流进行,存盘的时候根据“色彩”选项设定JPEG、PNG、BMP编码数据结构,将结果存为灰度或24位真彩。
二、Decode vs.encode
在编写本程序的时候,我首先考虑的就是图像文件的载入。在网络上搜寻了一大圈,最后发现讨论图像解码(decode,读取)的文章、代码和库函数,要比讨论编码(encode,存盘)的多得多。
其实如果要求的仅仅是将图像文件显示到屏幕,根本不需要任何第三方的代码或组件,调用Windows本身的API就足够了:用OleLoadPicture函数调入图像(支持BMP、JGP、GIF、WMF等),再调用IPicture::Render函数即能显示图像,在Code Project上有不只一个VC++实例。
如果调用Render时使用的是自己创建的内存DC,显示完后在内存DC中就生成了一幅DDB(device dependent bitmap,设备相关位图),理论上讲这时候就可以进行图像处理了,但实际上还存在问题:
对DDB的象素进行操作保证慢得让你想跳楼,只能通过API调用将DDB转换为DIB(device independent bitmap,设备无关位图)才能忍受,即在内存中同时有两份内存拷贝,增加无谓的内存消耗。
内存DC、DDB均是与当前显示设备相兼容的,其所能表示的颜色数、内存消耗也与当前显示设置相关,如果当前显示器设定为256色,则原来24位真彩的JPG载入后也缩水成256色;如果当前显示器设置为32位色,虽然颜色不会缩水,但内存消耗又上去了(约为16位色的3倍)。而且谁知道用户运行程序的时候显示器会设成什么样?
DDB转DIB除消耗内存外,还需要消耗时间,图像尺寸大、颜色设置高时更明显。
由于以上种种原因,我虽然开始时采用了OleLoadPicture+Render的方法,但最后还是放弃了。
Windows API虽然提供了图像解码功能,但是没有提供图像编码功能,因此在存盘的时候,一般还需要第三方工具的支持,不然就需要苦读《图像格式大全》,再熬夜写代码了。对于JPG格式,现在最有名也最流行的第三方工具有IJG和IJL两个。
三、IJG vs. IJL
IJG的全称是Independent JPEG Group(独立JPEG小组),该组织以C语言源代码的形式提供应用广泛、完全免费的JPEG解码/编码函数库,编译后生成二进制格式的LIB文件,可以连接到其他编译型语言的程序中。其实对于Windows程序员来说,这个函数库最难的地方就是对编译选项的设置(Unix无此问题),一旦设置完成,编译成功,差不多就可以卖钱了。有些开发商就是将对IJG的调用封装一下,生成DLL或OCX,就开始堂而皇之地收费。由于IJG生成的代码简洁干净,无需任何DLL或OCX,很多收费的图像浏览器、编辑器等也直接或间接地基于IJG。另外在IJG的源代码中还包含对GIF、BMP、PPM、TGA、RLE文件解码/编码的实例代码,因此也有人说IJG提供的JPEG库支持这些图像格式,其实这些代码仅供IJG测试用,一般生成的LIB文件中并不包括这部分代码,如果想支持这些格式还需要在此源码基础上花功夫。
IJG的全称是Intel& JPEG Library,是由Intel公司以DLL的形式免费提供的JPG解码/编码库。其实它的内核就是IJG,只不过专门针对Intel处理器进行了彻底的优化,因此在Win-tel环境下速度一流。这个工具最大的特点就是简单,一共只有六个函数(ijlInit、ijlFree、ijlRead、ijlWrite、ijlGetLibVersion、ijlErrorStr),而且随机文档中附有完整的VC++实例(用VB和Delphi的家伙们去哭吧,哈哈……),因此对于VC程序员来说不用费什么脑子就可以对JPEG应用自如。另外这个工具还有一个很独特的地方:不论读的是什么格式的JPG文件,读完后都被转成了24位真彩,存盘时也只能存为24位真彩。
在开始的时候,我考虑的是IJG,虽然方便,但是到哪都需要带一个ijl15.dll,和我一贯主张的“绿色软件”的理念相抵触,因此越看越不顺眼;最要命的是它只能存为24位真彩色的JPG,这对于黑白漫画来说实在是太浪费了。因此我最后还是痛下决心,再接再厉,终于找到了一个VC++的编译设置,成功编译了IJG,所以才有现在这个应用。唉,我的网费……
四、ComicEnhancer vs. Photoshop
其实我个人认为,Photoshop的漫画增强效果还是不错的,但在分享转换参数方面还存在一些不足,所以我才会编这个程序。
从总体上说,ComicEnhancer模仿的是Photoshop的Batch Action功能,但支持的图像格式、图像处理方法和效果、效率均比Photoshop差一点,毕竟是在业余时间里赶出来的东西。
Batch Action看得见的参数不多,建立时一般是对图像操作进行录制,因此如果在BBS上撒个帖子:“我用Photoshop进行了××操作,增强了××漫画”,别人大概也是有听没有用。而ComicEnhancer的所有参数均是可见的,结果也是可重复的,因此如果在BBS上撒个帖子:“我用ComicEnhancer增强了××漫画,所用参数为××”,大家都可以受益。
Photoshop里我最欣赏的就是Curve功能,通过用样条函数表示的非线性映射,能够同时调整图像的亮度和对比度。但是这个功能的可重复性实在是太小。ComicEnhancer的所有操作都是可重复的。
最要命的一点,Photoshop实在是太大、太全了,会用它处理漫画的人好象不太多,而且自从开始收集电子版漫画后,我对Photoshop在硬盘上所占据的100多兆空间一直耿耿于怀。
五、JPEG,BMP,GIF, TIFF and PNG
如果说JPEG是当今网上最流行的图像格式,大概不会有人反对。但是由于JPEG本身是一种有损压缩格式,在提供最小文件长度的同时,JPEG格式也具有以下缺点:
JPEG主要针对的是“自然图像”,即色彩比较丰富、颜色过渡自然的图像,如普通彩色照片等。而动画、漫画一般是“非自然图像”,即颜色跳跃比较大,并且有文字等信息,这样在线条、文字等边缘部分就会产生细小的碎片(高频噪声),在压缩比较大时尤其明显。这对狂热追求画质一族来说实在是个遗憾。
虽然某些人宣称“JPEG还原时无失真”,但这不过是一句“无知者无畏”的广告用语罢了。由于JPEG的有损压缩特性,实际上每压缩一次,都会损失一些图像信息,因此JPEG并不适合保存图像处理的中间结果。如果对以JPEG格式发行的图片进行编辑,再保存成JPEG格式,每保存一次都会造成损失。
由于这些原因,网上有人开始尝试用无损压缩格式保存动漫图片。常见的无损压缩格式有BMP、GIF、PNG和TIFF等:
BMP格式的特点是操作简单,基本上所有的工具都支持它(Photoshop之流不支持16位色BMP),如果想自己开发图像处理程序的话,读/写BMP文件的源代码也随处可见。但是BMP图像基本上是把象素信息直接写到文件里,不进行压缩,因此用BMP格式保存的图像文件一般都比其它格式的文件大得多,导致几乎没有谁会在网上发行BMP格式的动漫图片。我唯一见过的一次是有人以单色BMP格式发行了一套赤松健的《永远的圣诞老人》,长度比压缩比65%的256级灰度JEPG还小,不过单色BMP不是黑就是白,没有任何过渡,看起来实在是……
GIF大概称得上是目前网上最流行的无损压缩图像格式。我看到的第一套以GIF格式发行的漫画是英文版《乱马》,其图像之细腻绝对不是JPEG能够比拟的,而且由于采用16级灰度,图像尺寸也不大。支持16级灰度GIF格式的软件并不多,估计是用ACDSEE的Photo Enhancer(现在叫Foto Canvas)一张一张转出来的。后来陆续又见过一些以GIF格式发行的港版漫画,虽然图像都不错,不过文件尺寸上就差远了--全是256色GIF,估计都是用ACDSEE批量转出来的。不过GIF也有一些问题:
GIF压缩算法的核心--Lempel-Ziv-Welch (LZW)算法是有版权的,版权归Unisys公司所有。开发解码程序也就算了,如果开发编码程序,就算开发的是freeware,也需要缴纳版权费,否则是违法行为。
GIF表现灰度和调色板图像还不错,表现24位真彩图像的时候,效果不是很理想。ACDSEE在把其它格式的图像批量转成GIF的时候,干脆就把所有彩色图像都转成256级调色板GIF。
有鉴于此,至少我是不会在我开发的软件里支持GIF编码的。
对于CompuServe向支持GIF格式的freeware收费的行为,网络界当然不会没有反对的声音。其中一些反对者聚集起来,提出了新的PNG格式(听起来象不象DivX和Xvid的故事?)。PNG的压缩算法采用公开的ZIP压缩算法,不仅压缩率比LZW高,而且不需要支付版权费用,连压缩、解压源代码都有专门的zlib组织免费提供。
与GIF相比,PNG格式不仅文件长度更小,而且在色彩方面支持得更好,差不多达到BMP的水平。尤其是动漫图片常用的24位真彩和256级、16级、8级和4级灰度。
因此,整个“动漫DIY系列”将全面支持PNG格式。
TIFF可以说是一种包罗万象的图像格式,内部允许使用多种图像压缩格式,包括BMP使用的RLE、PNG使用的zip、GIF使用的lzw、JPG使用的jpeg压缩算法等。从我使用的结果来看,如果使用与其它图像格式相同的压缩算法,TIFF文件并没有什么优势。但是在压缩黑白(单色)图像时,TIFF提供的CCITTFAX4(G4)压缩算法比zip、lzw、RLE等具有非常明显的优势,因此ComicsEnhancer Pro在保存TIFF格式时,单色图像采用G4压缩,真彩图像采用JPEG压缩,其它图像采用LZW压缩。
六、bilinear,bicubic and nearest
图像放大历来是个让人头疼的问题,原因就在于原集与相集的一对多关系。即在分辨率不变的情况下,原图像上的一个点放大后,将成为新图像上的多个点。这些点如果与原图像上的点颜色完全相同(即nearest算法),则图像会出现明显的锯齿,所以好的放大算法一般是按照某种公式计算新图像上每一个点的颜色,使新图像上的点与周围点的颜色过渡平滑一些、自然一些,以消除锯齿。
这种计算公式通常采用插值公式,而常用的插值公式有线性(linear)插值、三次(cubic)插值等。由于2D图像的插值需要沿x、y两个方向进行,因此加上代表“双向”一词的前缀bi,就成了通称的bilinear、bicubic。
线性插值公式比较简单,因此大家用的都差不多,基本算法的源码见这里,速度优化的代码见这里。但是线性插值算法只根据原图像上相邻的两个点来计算新图像上的点,插值误差随步长的增加而很快增加,因此一般认为不宜用于二倍以上的放大。在ComicEnhancer Pro中,在线性插值放大后,还加了一道低通滤波处理,以减少锯齿。
三次插值根据原图像上相邻的四个点来计算新图像上的点,因此可以从更大范围内保证放大图像的平滑性,一般认为可以用于2倍以上的放大。很多商业图像编辑、浏览软件都采用了三次插值,包括Photoshop、ACDSEE 5.0等,VirtualDub用的也是三次插值。
三次插值有两个特点:1、计算公式比较多,不同的样条基、不同的边界条件就可以产生不同的公式。2、属于区域运算,运算量比较大,如果不考虑加速算法,大概不具有实用价值。
我最早得到的支持三次插值的图像处理库是Intel的Intel Image Process Library(IPL)。这个库利用MMX指令集中的“单指令,多操作”来加速插值运算。我试用的结果,感觉对彩色图像效果不错,但是对黑白图像还是会有明显的锯齿,因此在“动画截图工具”系列中用这个库完成放大功能,但是在ComicEnhancer Pro中没有采用。
后来到手了VirtualDub的图像缩放插件源代码,但是被其中的大堆ASM代码吓到了,因此一直没有去研究。最近得到了最新版的CxImage源代码,看到其中用C++写的三次插值放大,不由精神一振,可惜对它的速度和效果甚感失望,因此瞪着眼睛看了一下午,进行了两点改进:
1、插值内核换成了标准Mitchell-Netravali双参数公式。CxImage原来用的公式似乎是Mitchell-Netravali双参数公式的某个特例,但是放大后的图像太模糊了,看得我好费劲,所以改成了最基本的Mitchell-Netravali双参数公式,参数取Mitchell和Netravali在他们的论文中推荐的(1/3,1/3)。
2、对代码进行了彻底的C语言级优化,使速度达到可以接受的地步。但是因为没有进行ASM级优化,因此速度比其它软件可能差点,需要在高档一点的机器(近1G的CPU应该够了,我的是1G赛羊)上运行。优化完成后我再回过头来阅读VirtualDub的非MMX部分,才发现原来大家的优化思路完全一致,苦笑……
从VirtualDub的源代码看,它使用的也是Mitchell-Netravali双参数公式,但是非常奇怪,使用的参数对不是公认最好的(1/3,1/3),而是(0,-1)、(0,-0.75)、(0,-0.6),而且在源代码的注释中说明(0,-0.75)的效果与Photoshop相当,但是(0,-0.6)的效果会更好。从我使用的情况来看,这几组参数在放大后都会造成锐化效果,出现锯齿和颗粒,只不过(0,-0.6)的颗粒最小。后来又看了mpeg4播放插件bicubic_directshow_v1_3b_source,它用的是简化Mitchell-Netravali双参数公式,但缺省参数对却是(1/3,1/3)!仔细想想,可能是因为压mpeg4的时候,画面缩小的概率比放大的概率大的原因吧?maybe,maybe……
ComicEnhancer Pro的放大算法除了bilinear、bicubic外,还有nearest(最近点)算法。这种算法的思想是这样的:遍历新图像的每一个点,把这个点的坐标按缩放比例反向折算成原图像的坐标,当然折算后的坐标值可能是个浮点数,比如说(1.2,2.3),原图像上离这个点“最近”的点是(1,2),则将(1,2)点的颜色值作为新图像上点的值,这就是算法名称nearest的来历。
nearest算法相当于查表运算,没有任何区域运算,因此速度飞快,但是质量实在是不怎么样,我个人认为不宜用于1.5倍以上的放大。ACDSEE 5.0以前的版本的zoom菜单用的就是这种放大算法。
七、JPEG 2000
现在虽然JPEG 2000已经成为标准,但是似乎标准对代码实现定义不足,导致现在出现了一些不兼容的JPEG 2000代码。以C语言开源项目为例,目前比较有名的有Michael D. Adams发布的JasPer、openjpeg组织提供的LibOpenJPEG。从我测试的结果看,似乎JasPer编码的兼容性更好,而openjpeg解码的兼容性更强。说得更白一点,用JasPer编码的JP2文件直接插入PDF文件不会出错,而openjpeg编码的会;从Acrobat生成的PDF文件中抽取JPEG 2000文件,用openjpeg能够解开,而JasPer解不开。为了二者兼顾,本软件采用了一种看起来很奇怪的办法:解码采用LibOpenJPEG,编码采用JasPer。这两个项目的原始代码存在同名函数,同时使用会造成命名冲突,改一下就好。
在JPEG 2000标准中,定义了JPEG 2000文件(以JP2为文件扩展名),和JPEG 2000编码流(code stream,以J2k、JPC为文件扩展名)。JP2包含的信息更完全,因此本软件编码时一律编码成JP2文件。解码则支持JP2、J2k和JPC。
从我使用的情况看,JPEG 2000的效果不见得比JPEG强多少,但是编码消耗的时间要多得多,实在不很划算。
本软件的JPEG解码/编码采用了Independent JPEG Group(独立JPEG小组)发布的JPEG LIB源代码,PNG文件的支持采用了libpng组织提供的libpng源代码(zlib采用了ASM版),TIFF文件的支持采用了libtiff组织提供的libtiff源代码,GIF文件支持采用了Davide Pizzolato的CxImage,Jpeg 2000的解码采用了openjpeg组织提供的LibOpenJPEG源代码,Jpeg 2000编码采用了Michael D. Adams发布的JasPer源代码。
放大处理的bicubic、nearest算法实现参考了Davide Pizzolato的CxImage,但是替换了插值公式,运算速度也优化到了可以接受的程度,减色算法则直接COPY过来用,在此表示感谢。
附录 版本更新记录
错误修正:某些大图缩小时,会出错退出。
功能增强:支持某些特殊格式的TIFF文件。
功能增强:支持CMYK色彩空间的JPG图像。
功能增强:支持某些柯达扫描仪生成的OJPEG TIFF图像。
新增功能:支持jpeg 2000,包括jp2、j2k和jpc文件。
错误修正:在打开某些CCITT G4压缩的TIFF图像时,会出现缓冲区溢出错误。
功能增强:支持上一版本未能支持的非标准OJPEG格式TIFF文件,怪文件还真是层出不穷。
功能增强:对于长、宽DPI不相等的TIFF文件,能够自动调整长宽比。
1、功能增强:继续加强对非标准OJPEG格式TIFF文件的支持,但是有些文件还是无法解码,只能保证软件不会异常退出。
2、功能增强:允许文件存储为TIFF格式,并且支持全部颜色选项(上一版本只能存储单色TIFF)。单色图像采用CCITTFAX4(G4)压缩,真彩图像采用JPEG压缩,其它图像采用LZW压缩。
新增功能:模仿Excel,在状态条上显示当前窗口列表。
新增功能:在状态条上显示当前文件序号/当前文件夹中的文件数。
新增功能:工具条。其实最初的版本是有的,后来由于与某些Windows 95环境冲突,所以删了,现在重新恢复。
新增功能:在“色彩”选项中,可以设定将24位真彩色减色为256色。
新增功能:减色后的图像允许存为BMP、TIFF格式。
功能增强:减色功能升级到CxImage 5.99c所带的源代码。
功能增强:在批量减色时,如果选择了“不处理彩色图像文件”,则根据图像的实际内容而不是文件格式判断图像是否为彩色图像。
功能增强:zlib升级为1.2.3,以避免潜在的安全风险。
功能增强:除了按文件扩展名外,还按文件头识别图像文件格式。
功能增强:GIF解码器换成了cximage提供的解码器,虽然速度差了点,不过容错能力比原来的强。
功能增强:在“文件-&打开”对话框中,可以选择是否打开预览功能(缺省不打开)。
功能增强:对libtiff源代码进行修正,以更好地支持OJPEG格式的TIFF文件。由于历史的和技术的原因,国内很多扫描外包公司提供的彩色TIFF影像文件都是非标准的OJPEG格式(没有核心技术的悲哀!)。由于地址错位,Photoshop、ACDSee等正宗图像处理软件都会将这些文件当作已损坏的文件加以拒绝,俺实在是被逼无奈,才会捏着鼻子去支持这些垃圾格式。
功能增强:改进“打开文件”对话框的图像预览效果。
功能增强:加快用箭头键移动图像的速度,代价是图像移动不是那么平滑。
错误修正:在分辨率下,用鼠标拖动很大的图像时,图像会乱跑。
错误修正:在“参数”对话框中,先选中“Jpg质量”后再切换到“缩放”,会出现“缩放”项中的最大值变为100(滑动条处于最右端)。感谢樊云军的指正。
1、功能增强:减色功能升级到CxImage 5.80所带的源代码。
2、功能增强:缩小图像时,允许指定缩小算法。以前缩小时一律使用bilinear算法。
3、功能增强:在将彩色图像转换成灰度图像时,灰度计算公式从G = (R + G + B) / 3改成G = (54 * R + 183 * G + 19 * B) / 256,与libpng采用的公式相同。
4、功能增强:读取BMP文件时,能够处理BI_RLE8、BI_RLE4、BI_BITFIELDS格式的图像。
5、功能增强:“打开文件”对话框升级到ComicsViewer 1.20带图像预览的对话框。
6、功能增强:“打开目录”对话框升级到ComicsViewer的树型目录对话框。
7、功能增强:libtiff升级到v3.7.1,libpng升级到v1.2.8,zlib升级到v1.2.2。并且zlib使用的是ASM版(其实只有两个文件是ASM的)。虽然没有确凿的测试数据,不过我相信png文件的编/解码速度会快一点。
8、功能增强:简体中文版对话框的字体全部修改成宋体9。
新增功能:缩放的时候,可以选择放大算法:bilinear、bicubic和nearest,分别适应于中档、高档、低档机,当然放大后的效果也不一样。
功能修正:png格式的压缩率从Z_BEST_COMPRESSION改成Z_DEFAULT_COMPRESSION,牺牲了一点文件长度,但是速度加快许多。
错误修正:批量处理时源文件不能包含TIFF、WMF。
新增功能:支持读取TIFF、WMF格式的文件,但是不能输出这两种格式。
功能修正:透明GIF文件的背景色改为窗口背景色,而不是黑色,以符合习惯。
功能修正:色彩的缺省选项从“黑白漫画”修改为“保持原样”。
1、新增功能:可以将彩色和256级灰度图像降低到16级、8级、4级灰度或单色。
2、新增功能:支持16级、8级、4级灰度和单色效果预览。
3、新增功能:PNG格式支持16级、8级、4级灰度和单色图像的输出。
1、新增功能:支持PNG格式。读取的时候可以读取所有色彩模式的PNG,输出的时候只能输出24位真彩和256级灰度的PNG。
2、新增功能:切边。可以批量处理,切边参数可以保存。
3、功能修正:页面浏览的快捷键改为与ComicsViewer相同。
为了更好地处理动画截图,对图像增强进行如下调整:
a. 锐化操作在操作流中的顺序提前。
b. 锐化参数增加到9级。
增强线程安全性。
同步发行英文版。
除JPG文件外,输入格式增加对UFO、GIF、BMP的支持,输出格式增加对BMP的支持。现在本程序也可以当作文件格式转换工具使用了。
将“参数”对话框的标签由一行改为两行,避免用箭头按钮进行切换。
1. 对“批量转换”界面进行了调整。
2. 窗口背景色改为黑色。
3. 增加了错误记录文件访问的鲁棒性。
1. 新增“自动播放”功能:从当前文件开始,顺序显示同一目录下的后续文件。文件显示顺序同浏览顺序。自动播放间隔通过“自动播放设置”功能进行设置。
2. 对用箭头键操纵的大图像滚动算法进行了改进:采用多媒体专用的高精度定时器(精度到1ms),对时间进行精确定位,保证在高、低速机器上均能得到平滑的滚动效果。测试平台包括:在赛扬300A/128MB上跑的Windows Me、Windows NT Server 4.06,在PIII 1G/256MB上跑的Windows 98 SE2、Windows 2000 Server。
1. 新增鼠标浏览功能:除了普通的按住左键拖动大图外,还支持鼠标翻页(双击左键下翻,按住左键单击右键则上翻)。
2. 增加文件监测功能:当目录中的文件发生变化(添加、删除、更名)时,自动刷新文件缓冲,翻页时就能浏览到更新后的文件。但是继续保留2.10版加上去的“刷新目录”菜单,原因很简单:为了保证在不同的平台上都能运行,程序中使用了通用监测函数,而没有采用NT专用函数,这样如果打开的是网路驱动器上的文件,自动监测功能可能不太可靠,还要手动刷新。浏览本机图像则不存在这种问题。
继续从ComicsViewer引进idea和s/c:
1. 仿照Photoshop的Curve功能,增加了“曲线”(专业术语应该叫“对比度延展”)功能。不过可能是因为我在曲线生成方面偷了点懒,效果不如Photoshop明显,但也有长处:(1).参数化曲线,结果可重复;(2).预设多种模式,便于初学者上手,也便于学习Photoshop的Curve功能。
2. 仿照IE中的“后退”和“前进”功能,增加了“前一页”和“后一页”功能。这样在浏览时就不用担心无意中碰到Home或End键了:只要敲一下退格键(BackSpace)或选“查看-&前一页”菜单即可返回原页面。
3. 增加“全屏浏览”和“自动缩小到窗口大小”功能。其中“全屏浏览”的效果看起来有点土,但MFC只能做到这一步,我又懒得用DirectX,所以就这样了。
4. 增加“刷新目录”功能。如果当前窗口所显示文件的目录中有文件加入或删除,选择此功能后就能正确地用PgDn和PgUp键浏览变化后的文件。其实对用户来讲这个功能应该是多余的,好的程序应该能够自动检测到目录所发生的变化。请期待以后的升级吧。
5. 增加关键性的条件判断,在读取图像文件失败后不会再出现保护性错误。
以现在的浏览功能来看,ComicEnhancer Pro已经差不多可以用来看漫画了,并且和其它图像浏览器相比具有独到的特点:
1. 可以随时根据漫画质量和当前显示器设置对图像进行增强,保证最佳视觉效果,同时图像文件本身保持不变。
2. 可以在一个主窗口下同时浏览多个文件,或同一文件的多个备份,便于比较。不过每打开一个图像窗口均需消耗大量内存,因此在低于128MB内存的机器上不提倡同时打开4个以上的窗口。基本上当你听到硬盘狂响不止时就是物理内存不足了。
从ComicsViewer引进了新的idea和s/c:
1. 增加了基本图像浏览功能:打开某个文件后,用PgDn、PgUp、Home、End键可以在同一个窗口中打开同级目录下的其它文件。文件的浏览顺序通过“查看-&文件显示顺序”菜单项进行设置。
2. 经高人指点,对mask滤波算法内核进行了优化。受其影响,放大、锐化、柔化操作速度均有提高。
3. 对用鼠标、键盘操作的图像滚动进行了更改,使滚动过程更平滑。
4. 修正了一个bug:参数栏中的“尺寸缩放”不等于100,“以上参数仅适用于当前窗口”项也未选中,但是新打开的窗口仍然按100%显示。
5. 为“参数”栏增加了快捷键:Ctrl+P和Ctrl+A,以方便左撇子和右撇子。
修正了v2.0中的一个bug:在进行“成批转换”时,只有“属性”对话框中的参数起作用,“批量漫画增强”(原ComicEnhancer界面)中的参数不起作用。
推出了众望所归的“预览”功能,而且是:
1. 全尺寸“所见即所得”的预览效果;
2. 真正MDI的预览界面,可以同时预览多个文件,或打开同一文件的多个窗口(窗口上限受内存、CPU速度等限制,建议不超过10个);
3. 预览时可以指定参数的作用范围,可以单页调节/保存,也可以成批调节/保存;
4. 通过预览确定参数后,选择“文件-&成批转换”菜单即可调出原ComicEnhancer界面,对成批图像文件进行处理。
由于用户界面、功能等改动较大,因此软件版本号升级为整数,软件名称也由ComicEnhancer更改为ComicEnhancer Pro。
原来的“转换”按钮更改为“全部转换”,即对源目录下的所有文件进行转换,适用于参数已确定的情况;新增“选择转换”按钮,允许对选定的(多个)文件进行转换,适用于参数尝试、调整阶段。
为了与Mpeg2Jpeg相配合,对放大时的平滑算法进行了调整。此调整对黑白漫画几乎没有什么影响。
如果图像放大后在边线、文字附近出现碎片,可以通过“柔化”进行过滤,也可以通过增加亮度、对比度加以消除,不过亮度上去后可能需要进行Gamma校正,否则会太刺眼。
& & (1).原有“锐化”功能的效果太显著了,增加两档较弱的效果,便于实用。
& & (2).将“黑白漫画”选项由复选项改成列表项,更加直观、方便,选项也增加到彩色漫画、黑白漫画、保持原样三个。
& & (3).增加目录选择对话框的尺寸,方便浏览。
& & (1).对亮度、高亮度、对比度、Gamma校正算法进行了最彻底的优化,速度接近理论极限值,大概用于实时处理都够了。
& & (2).由于Gamma校正的查表由二维表改为一维表,表格所占内存减少为原来的1/80,“输入值圆整为5的倍数”这项内部限制也被取消。
& & (3).全部重写了JPEG访问接口。以前的访问接口其实是copy来的,经过了层层封装,使用起来很方便,可是中间环节太多,影响效率。新的接口去掉了所有不必要的中间环节,直接对IJG的JPEGLIB进行操作,缓冲切换也减至最小。但是毕竟是文件操作,还有复杂的编码/解码过程,所以速度改进有限。不过光是其中的错误处理一项就让我头昏了一下午。
& & (4).对尺寸缩放、锐化、柔化进行了微小改进,速度提高不很明显。这些功能的核心算法是各种高/低通滤波,能到这种程度已经让我偷笑了。幸好这三个功能也不常用。
将Gamma校正的算法由硬碰硬的幂运算改成了查表,速度终于优化到可以用于大尺寸图像的地步。
& & (1).应公众要求,破例将界面由英文转为中文,如果使用的不是简体中文Windows,需要外挂NJStar。
& & (2).增加了一批图像新功能:Gamma校正、尺寸缩放、锐化、柔化。
& & (3).增加了设置管理功能:保存、调入、恢复。
& & (4).增加停止功能:在开始转换后,用户如果愿意可以中断当前正在进行的转换。
& & (5).Logo图像由静态变成动态。当时手头一时找不到合适的动画制作软件,临时现编了一个的说。
& & (6).更正了一个错误:如果目标目录在源目录里的话,会一直目录套目录转换下去不会停。
& & (7).去掉了两个装饰性的选项:Auto Level(自动平衡)和Edge Enhance(边缘增强)。
增加对Highlight的阀值的调节功能,缺省阀值从原来的170涨到190,加强对较淡的边线、文字的保护。
将Slider的Pagesize从10降到5,方便懒人使用。
对Brightness、Highlight的运行速度进行了优化
提供Brightness、Contrast、Highlight、JPEG Quiality、Gray Scale、Edge Enhance功能,支持JPG文件格式。
附件下载:(已经经过卡巴查毒检查)
  下载次数: 1298
(488.43 KB)
搜索更多相关主题的帖子:
UID 479476
阅读权限 1
好东西是要支持的,不光是下载,要不是不厚道了,嘿。谢谢楼主!
UID 1229349
阅读权限 1
谢谢楼主无私奉献。
当前时区 GMT+8, 现在时间是
Powered by

我要回帖

更多关于 哪位大神给个网站 的文章

 

随机推荐