ComicEnhancer vs. Photoshop
其實我個人認(rèn)為,Photoshop的漫畫增強(qiáng)效果還是不錯的,但在分享轉(zhuǎn)換參數(shù)方面還存在一些不足,所以我才會編這個程序。
從總體上說,ComicEnhancer模仿的是Photoshop的Batch Action功能,但支持的圖像格式、圖像處理方法和效果、效率均比Photoshop差一點,畢竟是在業(yè)余時間里 鼓搗出來的東西。
Batch Action看得見的參數(shù)不多,建立時一般是對圖像操作進(jìn)行錄制,因此如果在BBS上撒個帖子:“我用Photoshop進(jìn)行了××操作,增強(qiáng)了××漫畫”,別人大概也是有聽沒有用。而ComicEnhancer的所有參數(shù)均是可見的,結(jié)果也是可重復(fù)的,因此如果在BBS上撒個帖子:“我用ComicEnhancer增強(qiáng)了××漫畫,所用參數(shù)為××”,大家都可以受益。
Photoshop里我最欣賞的就是Curve功能,通過用樣條函數(shù)表示的非線性映射,能夠同時調(diào)整圖像的亮度和對比度。但是這個功能的可重復(fù)性實在是太小。ComicEnhancer的所有操作都是可重復(fù)的。
最要命的一點,Photoshop實在是太大、太全了,會用它處理漫畫的人好象不太多,而且自從開始收集電子版漫畫后,我對Photoshop在硬盤上所占據(jù)的100多兆空間一直耿耿于懷。
在參數(shù)確定后,選擇“文件->成批轉(zhuǎn)換”菜單,即可調(diào)出原ComicEnhancer界面,對成批圖像文件進(jìn)行處理:
在“需增強(qiáng)的漫畫”框中,點擊“選擇”按鈕,選擇源文件(需處理的漫畫文件)所在目錄,再從“源文件”列表中選擇源文件類型。點擊“查看文件”按鈕可以啟動圖像瀏覽器并打開目錄下的第一個源文件。如果“包括子目錄”選項被選中,處理時連源目錄所帶子目錄下的文件一起處理,否則只處理源目錄下的文件。
在“增強(qiáng)后的漫畫”框中,點擊“選擇”按鈕,選擇目標(biāo)文件(處理后生成的新文件)的存放目錄,再從“新文件擴(kuò)展名”列表中選擇目標(biāo)文件類型。點擊“查看文件”按鈕可以啟動圖像瀏覽器并打開目錄下的第一個目標(biāo)文件。源文件和目標(biāo)文件如果是同一個目錄,處理前會提示用戶是否要覆蓋源文件。
如有必要,調(diào)節(jié)“選項”框中的各個選項(含義見后)。
如有必要,可以點“選擇轉(zhuǎn)換”按鈕,先選擇幾個源文件轉(zhuǎn)換一下,看一下實際轉(zhuǎn)換后的效果。
所有參數(shù)配置好后,點擊右上方的“全部轉(zhuǎn)換”按鈕開始圖像處理。處理過程中底部的進(jìn)度條會顯示當(dāng)前處理進(jìn)度,處理完后彈出對話框顯示需處理的文件數(shù)、成功處理的文件數(shù)。如果有文件不能成功處理(不能讀或不能寫),會提示用戶打開處理過程的記錄文件,從中可以知道具體哪些文件不能讀或?qū)。不能讀的原因可能是源文件損壞,或不是標(biāo)準(zhǔn)的文件格式,可以用ACDSee轉(zhuǎn)換一下再重試。不能寫的原因可能是因為目標(biāo)目錄不允許寫,或磁盤空間不夠。
在點擊“全部轉(zhuǎn)換”按鈕開始處理后,“全部轉(zhuǎn)換”按鈕變成“停止轉(zhuǎn)換”按鈕,其它控件變灰。用戶點擊“停止轉(zhuǎn)換”按鈕可以中斷正在進(jìn)行的處理。
如果對調(diào)整效果比較滿意,點擊“保存”按鈕可以將參數(shù)存盤。點擊“調(diào)入”按鈕可以調(diào)入以前存盤的參數(shù)。點擊“恢復(fù)”按鈕則將參數(shù)設(shè)置為默認(rèn)值。如果需要刪除某次保存的參數(shù)值,點擊“調(diào)入”按鈕,在打開“參數(shù)管理”對話框后,選擇欲刪除的設(shè)置,點“刪除”按鈕。
提示:
源文件目錄最好和目標(biāo)文件目錄不一樣,避免覆蓋,并且可以反復(fù)運行。
由于各選項參數(shù)的設(shè)置與具體圖像質(zhì)量有關(guān),因此如果一次需要處理的圖像很多,最好先從中選擇幾張進(jìn)行試調(diào)節(jié),參數(shù)調(diào)試好后再對所有文件進(jìn)行最終調(diào)節(jié),以節(jié)省運行時間。
從1.24版開始,原來的“轉(zhuǎn)換”按鈕更改為“全部轉(zhuǎn)換”,即對源目錄下的所有文件進(jìn)行轉(zhuǎn)換,適用于參數(shù)已確定的情況;新增“選擇轉(zhuǎn)換”按鈕,允許對選定的(多個)文件進(jìn)行轉(zhuǎn)換,適用于參數(shù)嘗試、調(diào)整階段。
參數(shù)調(diào)節(jié)步驟:
如果彩色頁面明顯發(fā)白,或因為紙張陳舊而發(fā)黃,可以試著選擇自動色階或自動對比度。
在無偏色的情況下,首選是曲線功能,此功能大致相當(dāng)于Photoshop的Curve功能,但是內(nèi)置了幾種調(diào)節(jié)模式。一般先根據(jù)圖像情況選擇其中的某種模式,再對調(diào)節(jié)點進(jìn)行調(diào)節(jié)。
如果對曲線功能調(diào)節(jié)效果不滿意,則選擇“原畫面保持不變”模式,改用其它調(diào)節(jié)方式。一般畫面背景透光嚴(yán)重時,可以增加畫面對比度和亮度。但是增加亮度會造成畫面整體發(fā)白,這時可以將亮度恢復(fù)成100%,改為調(diào)節(jié)高亮度。
如果增加高亮度后對文字、邊線造成損傷,則增加高亮值,減小亮度。
如果增加高亮值后在背景上出現(xiàn)較多麻點,減小高亮值,增加亮度。
如果調(diào)節(jié)后圖像整體發(fā)白,或文字、邊線較模糊、黯淡,增加Gamma校正值。
如果畫面模糊,可以選擇銳化選項。如果圖像邊線、文字比較單薄,有間斷,或圖像放大后鋸齒比較嚴(yán)重,可選擇柔化操作。不過這兩項操作比較費時間,如果機(jī)器不好的話會感覺速度明顯變慢。
如有必要,調(diào)節(jié)圖像縮放比例。注意如果選擇放大圖像,則每一步操作均需要更多的時間。如果機(jī)器夠快,建議選擇bicubic,嫌太慢可以選bilinear,只有在不得已的情況下才選擇nearest。
如果看的是黑白漫畫,最好將色彩選項置為“黑白漫畫”,而不是缺省的“保持原樣”,這樣可以減輕紙張發(fā)黃、發(fā)紅等造成的背景雜亂。
如果希望生成的JPG文件更小一點,可以減小JPG壓縮比。
對于黑白漫畫,色彩選項選為“黑白漫畫”可以使生成的文件小一些;如果畫面非常干凈,也可以選擇“16級灰度”、“8級灰度”或“4級灰度”,并選擇按PNG格式輸出,可以獲取最佳壓縮比。對于純文字頁面,選“單色”,并選擇按TIFF格式輸出,可以獲取最佳壓縮比。如果需要處理的漫畫中包含彩色封面,可以勾選“不處理彩色圖像文件”選項,以避免損失。
如果瀏覽的是純文字頁面(掃描電子書),并且筆畫較細(xì)影響閱讀,可以選擇“加粗”選項進(jìn)行加粗。
各Option項的含義:
1. 亮度
范圍0~200,100表示亮度不變,小于100圖像變暗,大于100圖像變亮。增加亮度一般可以消除斑點、背透、紙張顏色、印刷時油墨不勻造成的黑印,但是較淡的文字、邊線可能會更看不清。
2. 對比度
范圍0~200,100表示圖像不變,小于100圖像變灰,大于100圖像更加黑白分明,有助于解決因單純增加亮度而造成的文字、邊線變淡,因此常和增加亮度同用。
3. 高亮度
范圍0~200,100表示高亮區(qū)(圖像空白區(qū))亮度不變,小于100高亮區(qū)圖像變暗,大于100高亮區(qū)圖像變亮。這可是本軟件最獨特的地方,能夠在因源圖像文件中的文字、邊線較淡而很難再增加總體亮度的情況下,僅增加圖像空白區(qū)的亮度,從而能有效清除背景上的斑點、紙色、背透等等,在ACDSee 3.1的Photo Enhancer和Microsoft的“照片編輯器97”中可都找不到類似的功能。所謂“高亮區(qū)”,其實是由旁邊的“高亮值”定義的。在使用本功能去除背景上的紙色、背透時,如果增加高亮值,可以保護(hù)較淡的文字、邊線,但是去除效果就會下降;如果減少高亮值,去除效果就會更明顯,但可能會誤傷教淡的文字、邊線。
4. 高亮值
定義高亮度區(qū)加亮功能的“高亮區(qū)”:當(dāng)象素的亮度值(0~255)大于等于該值時,象素處于高良區(qū),執(zhí)行加亮操作,否則保持不變。一般來講,增加此值時,可以保護(hù)較淡的文字、邊線,但是去除底紋效果就會下降;如果減少此值,去除效果就會更明顯,但可能會誤傷較淡的文字、邊線。
5. 曲線
大致相當(dāng)于Photoshop的Curve功能,專業(yè)術(shù)語稱“對比度延展”。此功能可以綜合調(diào)節(jié)畫面對比度和亮度,并且設(shè)置了幾種典型模式,應(yīng)該是首選的調(diào)節(jié)手段,宜勤加練習(xí)。
6. Gamma校正
范圍0~200,100表示圖像不變,小于100圖像變白,大于100圖像變黑,有助于解決因增加亮度、對比度、高亮度等而造成的畫面發(fā)白,并能使模糊、黯淡的文字、邊線變得更堅實,當(dāng)然如果圖面上有麻點也會變得更顯眼。
7. 尺寸縮放
范圍0~200,100表示圖像尺寸不變,小于100輸出圖像變小,但圖像可能會更清晰(致密);大于100輸出圖像變大,但可能會更模糊。放大的時候有三種選擇,如果機(jī)器夠快,建議選擇bicubic,嫌bicubic太慢可以選bilinear,只有在不得已的情況下才選擇nearest。
8. JPG壓縮比
范圍0~100,此值越低表示存盤后的JPG圖像質(zhì)量越差,但文件長度更;此值越高表示存盤后的質(zhì)量越好,但文件長度更大。
9. 切邊
如果“填白”選項沒有選中,則所選區(qū)域外的部分將被裁剪掉,否則用白色填充而不裁剪。
10. 銳化
對于墨色教濃、文字筆畫粘連的圖像,此選項可以使文字更清晰。換言之,如果文字、邊線本來就細(xì),經(jīng)此功能處理后就更雪上加霜了。
11. 柔化
能夠使銳利的邊緣、鋸齒變?nèi)岷。但如果原來圖像就模糊,用此功能后大概就該出重影了。 不過如果“色彩”選擇了“單色”,也可以用此功能去除噪點。
12. 色彩
如果選擇“黑白漫畫”選項,處理后的文件按256級灰度保存,對于黑白漫畫可以減少文件長度,但對于彩色漫畫就太可惜了。如果選擇“彩色漫畫”,按24位真彩色格式存盤,對黑白漫畫來說又太浪費。如果選擇“保持原樣”,則原來是256級灰度或24位真彩的,存盤后還是256級灰度或24位真彩,適用于那些封面為彩色,內(nèi)容為黑白的漫畫。如果畫面非常干凈,也可以選擇“16級灰度”、“8級灰度”或“4級灰度”,并選擇按PNG格式輸出,可以獲取最佳壓縮比。對于純文字頁面,選“單色”,并選擇按TIFF格式輸出,可以獲取最佳壓縮比。
13. 自動色階/自動對比度
對于彩色圖像來說,有時會由于掃描亮度設(shè)置失當(dāng)而造成畫面發(fā)白,或由于紙張陳舊而造成畫面偏黃。對于這種偏色畫面,通常可以通過色階調(diào)整進(jìn)行校正。
本軟件的“自動色階”功能與PhotoShop的同名功能在算法上一致,但是在參數(shù)上與PhotoShop的缺省參數(shù)不一樣,效果要更強(qiáng)烈一些。通過修改PhotoShop的缺省參數(shù),可以達(dá)到相同的效果。
PhotoShop的“色階”功能雖然強(qiáng)大,但是色階是基于直方圖的變換,而每一張圖像的直方圖都可能不同,因此對于PhotoShop來說可以用“色階”慢慢調(diào)節(jié)每一張圖像,但對于本軟件這種用一套參數(shù)處理一系列圖片的情況,“色階”顯然不適用,只能用“自動色階”。
自動色階功能由于是對三原色直方圖分別進(jìn)行校正,因此校正后可能會出現(xiàn)偏色,如偏黃的校正后偏藍(lán)。如果不希望出現(xiàn)偏色,可以選擇“自動對比度”,自動對比度針對灰度直方圖進(jìn)行調(diào)整,因此不會出現(xiàn)偏色。
14. 旋轉(zhuǎn)
包括左、右旋轉(zhuǎn)90度,及180度旋轉(zhuǎn)。
15. 加粗
如果瀏覽的是純文字頁面(掃描電子書),并且筆畫較細(xì)影響閱讀,可以選擇“加粗”選項進(jìn)行加粗。對于彩色畫面,此選項會加深顏色。對于灰度圖像,此選項可能會出現(xiàn)小灰斑。
16. 不處理彩色圖像文件
只有在色彩選項為“黑白漫畫”或“16級灰度”、“8級灰度”或“4級灰度”、“單色”時才允許選擇此選項。如果需要處理的漫畫中包含彩色封面,可以勾選此選項,以避免將封面轉(zhuǎn)成灰度或黑白圖像,造成損失。
13. 紅藍(lán)互換
將RGB中的R通道與B通道互換,通常用于瀏覽紅外照片等特殊圖像。
17. 復(fù)制文件日期、時間
如果選中,則結(jié)果文件與源文件具有相同的文件日期、時間;否則結(jié)果文件的日期、時間為當(dāng)前系統(tǒng)日期、時間。
圖像增強(qiáng)參數(shù)的作用順序:
在處理每一張圖片時,本軟件依照下列先后順序:轉(zhuǎn)灰度、切邊、紅藍(lán)互換、放大、銳化、高亮度、自動色階/自動對比度、曲線調(diào)節(jié)、亮度、對比度、Gamma校正、柔化、加粗、縮小、填白、旋轉(zhuǎn)、減色。
如果需要批量處理的順序與上述順序不同,可以采用多遍處理的方法,即第一遍處理后,再進(jìn)行第二遍處理,中間結(jié)果存儲為無損壓縮的PNG格式,以免損失。
如果奇偶頁需要處理的參數(shù)不同,可以將奇偶頁復(fù)制到不同的文件夾,然后再處理。下面這個批處理命令將奇數(shù)頁文件(文件名以1、3、5、7、9結(jié)尾)移動到odd文件夾:
for %%a in (1 3 5 7 9) do move *%%a.* odd
密技曝光
一、256 vs. 24-bit
不論是漫畫還是其他圖像,只用黑/白二色的幾乎沒有,黑白漫畫一般用256級灰度,少數(shù)用16級、8級、4級灰度;彩色漫畫和照片一般用24位真彩色表示,少數(shù)可以用256色。
在進(jìn)行本軟件所支持的任何一項圖像處理的時候,都需要對圖像的每一個象素的R、G、B值進(jìn)行四則運算,再將運算結(jié)果保存為象素的R、G、B值。低于24位色的所有圖像,如16位色、8位(256)色、4位(16)色、二位(4)色,讀/寫象素R、G、B值時均需頻繁進(jìn)行移位運算和邏輯運算,而24位色以上的圖像,由于每個象素的R、G、B值分別用DIB位流中的一個字節(jié)表示,只需移動字節(jié)指針即可進(jìn)行訪問,因此速度優(yōu)化十分明顯。
考慮到速度的優(yōu)化和代碼的簡化,本程序每讀入一幅圖像,均先轉(zhuǎn)換為24位真彩色,以后所有的圖像處理運算均針對24位DIB位流進(jìn)行,存盤的時候根據(jù)“色彩”選項設(shè)定JPEG、PNG、BMP編碼數(shù)據(jù)結(jié)構(gòu),將結(jié)果存為灰度或24位真彩。
二、Decode vs.encode
在編寫本程序的時候,我首先考慮的就是圖像文件的載入。在網(wǎng)絡(luò)上搜尋了一大圈,最后發(fā)現(xiàn)討論圖像解碼(decode,讀。┑奈恼、代碼和庫函數(shù),要比討論編碼(encode,存盤)的多得多。
其實如果要求的僅僅是將圖像文件顯示到屏幕,根本不需要任何第三方的代碼或組件,調(diào)用Windows本身的API就足夠了:用OleLoadPicture函數(shù)調(diào)入圖像(支持BMP、JGP、GIF、WMF等),再調(diào)用IPicture::Render函數(shù)即能顯示圖像,在Code Project上有不只一個VC++實例。
如果調(diào)用Render時使用的是自己創(chuàng)建的內(nèi)存DC,顯示完后在內(nèi)存DC中就生成了一幅DDB(device dependent bitmap,設(shè)備相關(guān)位圖),理論上講這時候就可以進(jìn)行圖像處理了,但實際上還存在問題:
對DDB的象素進(jìn)行操作保證慢得讓你想跳樓,只能通過API調(diào)用將DDB轉(zhuǎn)換為DIB(device independent bitmap,設(shè)備無關(guān)位圖)才能忍受,即在內(nèi)存中同時有兩份內(nèi)存拷貝,增加無謂的內(nèi)存消耗。
內(nèi)存DC、DDB均是與當(dāng)前顯示設(shè)備相兼容的,其所能表示的顏色數(shù)、內(nèi)存消耗也與當(dāng)前顯示設(shè)置相關(guān),如果當(dāng)前顯示器設(shè)定為256色,則原來24位真彩的JPG載入后也縮水成256色;如果當(dāng)前顯示器設(shè)置為32位色,雖然顏色不會縮水,但內(nèi)存消耗又上去了。而且誰知道用戶運行程序的時候顯示器會設(shè)成什么樣?
DDB轉(zhuǎn)DIB除消耗內(nèi)存外,還需要消耗時間,圖像尺寸大、顏色設(shè)置高時更明顯。
由于以上種種原因,我雖然開始時采用了OleLoadPicture+Render的方法,但最后還是放棄了。
Windows API雖然提供了圖像解碼功能,但是沒有提供圖像編碼功能,因此在存盤的時候,一般還需要第三方工具的支持,不然就需要苦讀《圖像格式大全》,再熬夜寫代碼了。對于JPG格式,現(xiàn)在最有名也最流行的第三方工具有IJG和IJL兩個。