PDG转PDF注定会文件膨胀、质量下降吗?
作者:馬健
郵箱:stronghorse_mj@hotmail.com
發布:2006.07.16
更新:2006.07.20
事先聲明:
對于標題所提問題,我的回答是:大多數情況下轉換后文件長度應該相當,略有增加或減少,質量應該保持不變。如果文件長度、畫面質量差很多,多半是用錯了方法或軟件。本文將說明理由。
注意在上面的回答中我使用了“大多數”等表示概率的詞匯,因此在討論答案之前,需要先對PDG文件格式進行分類,并估計每種PDG文件出現的可能性。
目前比較流行的分類方法是按照PDG文件第16字節分類,通常PDG文件格式檢查軟件都是按照這個字節的16進制報告文件類型,如00H、02H、03H、04H、05H、10H、11H、AAH、ACH、64H、66H等等。由于這種分類法分出來的類型較多(理論上有256種),所以通常也按字節高4位進行歸類,簡稱0xH、1xH、AxH、6xH等。
這種分類方法可以表示出PDG文件的加密特征:
- 00H是最早,也是最原始的PDG格式,其格式為:PDG文件頭+原始圖像數據流。原始圖像數據流包括CCITT G4(黑白圖像)、JPG(彩色/灰度)、DjVu(黑白/彩色/灰度)。在超星服務器上,這種格式的文件已經非常少見,但是由于這種格式閱讀的時候不需要解密,因此閱讀 時的速度感覺比其它格式的要快,所以也有人用第三方軟件自己將其它格式轉換成00H格式。
- 0xH是對00H的弱加密格式,通常02H、03H用來加密CCITT G4圖像,04H加密JPG,05加密DjVu。順便說一句,可能是為了盡量減小文件長度,超星在壓制DjVu時,用的都是有損壓縮,可能會對漢字筆劃造成損傷,這也是為什么經常聽到有人說05H不如02H清晰的原因之一。
- 1xH是比0xH更強的加密,加密方法不再與原始圖像格式對應,如11H可以加密CCITT G4,也可以加密JPG、DjVu。
- AxH的加密強度比1xH更強,加密方法也不與原始圖像格式對應。正版超星瀏覽器如果下載到AxH格式的PDG,會將其完全破壞后變成FFH格式的PDG。
- 6xH是正版超星瀏覽器從服務器下載到PDG文件后在本地加密生成的文件。由于6xH加密使用了本地硬盤“指紋”,因此只能在下載的機器上看,換一臺就不能看。
但是加密方法畢竟是超星自己的事,用這種分類方法往PDF格式上套未免有點難。所以我更愿意用另一種分類標準:超星瀏覽器自帶的Pdg2控件的GetImageType方法的返回值。這個方法通常返回1、2、3,在Pdg2Pic中分別用T1、T2、T3表示,即Type1、Type2、Typ3的意思,分別對應三種圖像:
- T1:黑白圖像,原始圖像格式為CCITT G4或DjVu。
- T2:灰度/彩色圖像,原始圖像格式為JPG或DjVu。可能超星覺得掃描時區別灰度、彩色太麻煩了,所以灰度圖像一律按彩色存儲,這 也是國內掃描外包商的通常做法,但是對技術較真的客戶一般會要求外包商舉行區別。
- T3:多層圖像,底層黑白文字層通常用CCITT G4,上層插圖用JPG。我猜測這種類型應該是在DjVu基礎上發展出來的,符合“按需存儲”的原則:對于重要的文字層使用無損壓縮,對于相對不重要的插圖則用有損壓縮存儲。
從出現的概率來說,這三種格式按從高到低排列依次是T1、T3、T2:
- 最常見的格式還是T1,畢竟大多數書籍都是白紙黑字。
- T3出現的概率比T1小,一般用于圖文混排的插圖頁,或某些彩印書籍。
- T2出現的概率最小,畢竟除了封面和某些特殊書籍外,整頁都是圖的情況在一本書里也不會有幾頁,而封面、封底還有很大一部分直接用JPG文件存儲。
在轉換成PDF時,正常情況下這三種格式與PDF中壓縮算法的對應關系為:
- T1:CCITT G4或JBig2。
- T2:JPEG或JPEG 2000。
- T3:這個比較復雜,取決于轉換軟件:可以轉換成多層PDF,也可以將PDG中的所有層合并成一個圖像再放入PDF。
如果T1原始圖像是CCITT G4,轉換成PDF的CCITT G4后文件尺寸會略有膨脹,因為PDF文件本身要增加一些必要的格式信息;如果轉換成PDF的JBig2,通常文件尺寸不會增加,只會減少,畢竟JBig2的壓縮算法要比CCITT G4更先進。
如果T1原始圖像是DjVu,轉換成PDF的CCITT G4后文件無疑將會膨脹;轉換成JBig2則取決于是有損JBig2還是無損JBig2。理論上說,DjVu對黑白圖像的壓縮能力與JBig2相當,但由于超星用的全是有損DjVu,因此轉換成PDF時只有選有損JBig2才能保持二者尺寸 大致相當,選無損JBig2則會造成文件膨脹。由于有損壓縮會對漢字筆劃造成損傷,因此我寧愿文件長度膨脹,也不愿選擇有損。
如果T2原始格式是JPG,轉換結果取決于轉換軟件:如果轉換軟件能夠直接從PDG文件中提取原始JPG數據流嵌入PDF,則PDF文件只會略有膨脹 ,質量不變;如果轉換軟件非要把PDG先解碼成BMP再壓縮成JPG或JPEG 2000放到PDF里,文件長度可能增加也可能減小,取決于所選的壓縮比,但是在缺省的壓縮比下,質量下降是注定了的。
如果T2原始格式是DjVu,用于目前的PDF規范不支持DjVu(不排除將來會支持),因此只能將DjVu先解碼成BMP再壓縮成JPG或JPEG 2000放到PDF里,文件長度可能增加也可能減小,質量多半會下降。
對于T3,如果轉換軟件能夠直接從PDG文件中提取原始JPG數據流嵌入PDF文件,并且用無損JBig2壓縮原CCITT G4圖像,則PDF文件尺寸會減小,同時質量不變;如果轉換軟件非要把多層合并成一層,再壓縮成JPG或JPEG 2000放到PDF里,通常文件長度會增加,質量會下降:JPG或JPEG 2000都不適合壓縮文字圖像。
綜上所述,從原理上說,對于最常見的黑白PDG,轉換成PDF后應該長度略有減少,質量保持不變;對于帶插圖的多層PDG,轉換成PDF后應該長度略有減少,質量保持不變;對于純圖像頁面的PDG,轉換后長度可能略有增加而質量不變,也可能長度、質量都有較大變化,但是這種頁面畢竟不多。
現在各位明白我在本文開始部分給出的回答的含義了吧?
在明白的同時,我相信也會有人合理地引伸出另外一個問題:為什么現在大家看到從PDG轉出來的PDF,會和原始PDG差那么多?
我認為這方面最大的罪魁禍首就是廣為流傳的“打印大法”:將PDG文件直接從超星瀏覽器打印到虛擬PDF打印機。這種方法的制約因素我已經在《PDG轉圖像、PDF的若干方法》一文中加以說明,對轉換出來的PDF舉行分析所需的工具和方法,也在《圖像轉PDF的問題、方法及題外話》一文中詳細說明,喜歡較真的人不妨自己驗證,這里我只說我的結論:只要用打印的方法,不論如何破解、如何發現新的突破方法,打出來的PDF文件膨脹、質量下降那是注定了的,想改都難,更何況還會受到軟件方面的種種限制 ,所以奉勸各位還是趁早放棄。
另外一種所謂“利用中間BMP”的轉換方法也會產生問題:有人先用BooX Viewer或其它軟件將PDG轉換成BMP,再用Acrobat或其它軟件將BMP轉換成PDF。這種方法只能將T1圖像無損轉換成PDF;對于T2、T3,由于很難將BMP圖像無損存入PDF(那樣尺寸膨脹太過厲害),只能再壓縮成JPG或JPEG 2000后存入PDF,因此質量下降、尺寸膨脹等問題是免不了的。
那么什么樣的方法才是正確的轉換方法呢?
我的回答是:條條大道通羅馬,只要拋棄表層皮毛的束縛,直接深入到文件格式內部,就可以找到好的方法。就我自己來說,最常用的組合是Pdg2Pic+FreePic2Pdf:
- 先用Pdg2Pic將PDG直接解碼成常規圖像文件。能夠將PDG轉圖像的軟件不少,但是Pdg2Pic對除彩色/灰度DjVu外的圖像都能無損轉換,尤其是對多層PDG的無損分解,目前是獨一無二的。
- 再用FreePic2Pdf將Pdg2Pic的結果合并成PDF,黑白圖像用缺省的Jbig2無損就好。?
轉載于:https://www.cnblogs.com/stronghorse/p/4913239.html
總結
以上是生活随笔為你收集整理的PDG转PDF注定会文件膨胀、质量下降吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(666):赋值运算符
- 下一篇: Foobar2000目前最强解码方案