導讀Adobe Photoshop,簡稱“PS”,是由Adobe Systems開發和發行的圖像處理軟件。Photoshop主要處理以像素所構成的數字圖像。使用其眾多的編修與繪圖工具,可以有效地進行圖片... Adobe Photoshop,簡稱“PS”,是由Adobe Systems開發和發行的圖像處理軟件。Photoshop主要處理以像素所構成的數字圖像。使用其眾多的編修與繪圖工具,可以有效地進行圖片編輯工作。ps有很多功能,在圖像、圖形、文字、視頻、出版等各方面都有涉及。 這是我為 Photoshop 編寫的一個文件格式插件,IcoFormat,用于讀寫 Windows 圖標文件(擴展名為ICO, CUR)。圖標文件格式的PS插件在很多年前有一個老外曾經寫過,不過我現在提供的插件則功能上更好,有足夠的理由替換掉老外提供的插件。老外的插件的特點我記得不是很清楚了,大概根據記憶對比如下: (1)老外的插件在文件對話框中選擇該插件時,無法顯示 ICO 文件。可能是因為他的 PiPL 資源寫的有問題。我的插件沒有該問題。 (2)老外的插件在打開含有多個圖像的文件時,無法預覽,而我提供了對話框上的預覽圖,對用戶更友好。 (3)老外的插件對圖標的透明部分不能很好處理(記憶中),而用我的插件,你可以很好的設置透明部分。 (4)老外的插件不能保存XP系統的多圖像的反鋸齒圖標,而我的插件能保存為反鋸齒圖標,并且自動生成其他質量和標準大小的圖像 (這一點我認為是最重要的替換老外的插件的理由)。 (5)圖像降級時采用了八叉樹算法,降級后的圖像質量要比例如IconWorkshop之類的軟件采用的方法更好。 (6)我的插件是 scripting-aware 的(即插件參數會存放在PS腳本系統中),在運行時可以記住用戶的設定。 (7)我的插件可以打開和保存光標(CUR)文件,老外的插件貌似不能。并且我可能還會后續繼續開發從PE文件導入圖標等其他功能。 下面主要是對這個插件一些簡單的說明和介紹。這個插件一共有4個對話框,分別是關于對話框,圖像選取對話框(打開文件時),透明部分設置對話框,圖像保存選項設置對話框。下面我將一一展示一下。
(1)圖像選擇對話框 當打開含有多個圖像的圖標時,會彈出圖像選擇對話框: 在這里主要是要求用戶從文件中選擇一個要打開的圖像,“添加AND MASK或Alhpa為獨立通道”是指,如果是32 BPP 以下的圖標,會把 AND MASK (黑白兩色位圖,白色表示透明)添加到PS中的新建通道,如果是32 BPP 圖標,會把 Alpha 通道添加為 PS 中新建通道。“是否顯示棋盤網格”是針對對話框上的圖像預覽圖而言的,如果勾選,實際上是調用了 PS 中的回調函數進行繪制的,否則是通過 WIN32 的 GDI 函數繪制的。
(2)圖像質量選擇對話框 當保存文件時,根據圖像模式的不同彈出不同對話框。如果當前的圖像模式是RGB模式,則會彈出下面的對話框,要求用戶設置要保存為什么質量的圖標。如果你選擇的是反鋸齒圖標,我會自動的為文件中增加其他大小和顏色質量的圖像(最后文件中可能含有 3 到 12 個圖像,具體個數將依據文件尺寸和標準圖像尺寸之間的關系決定),此插件生成的反鋸齒圖標完全是參考 MSDN 對 XP 系統使用的圖標的要求而生成的,所以此插件生成的反鋸齒圖標可以直接導入到 VS 的 Windows 應用程序項目中進行使用。關于反鋸齒圖標,可以參考我之前的文章。 下面的拉伸模式選項,僅針對 32BPP 反鋸齒圖標時有效,因為在這里只有 32 BPP 涉及到需要把圖像縮小。所謂刪除像素是指像素重疊時,只會取圖像上的某一個像素。線性插值是指在源圖上的某4個像素中取一個線性插值。從原則上講,刪除像素比線性插值的運算量小,而線性插值的縮放質量可能更好一點,但是實際上很難感受到太大差別。 如果選擇的是 16 BPP,則保存的圖像是 X-5-5-5 分布的圖像。選擇 4 BPP 或 8 BPP 圖像時采用的圖像降級算法是八叉樹算法(我在前一篇文章中曾經介紹過)。由于八叉樹算法在顏色數量很少時可能會使圖像突變成全部同一個顏色,所以我沒有提供保存為單色圖像的選項(最低BPP是4)。下圖顯示了把一個圖標降級保存后的圖像質量效果: 通過這個插件你可以很容易把PNG圖片,轉換成反鋸齒圖標。方法是:在PS中打開PNG圖片,然后再另存為 ICO 文件即可。
(3)AND MASK設置對話框 保存文件時,如果圖像是索引模式,則要求用戶設置透明部分(AND MASK部分)。默認選項是直接使用 PS 文檔本身的透明信息,但這個對話框也允許你選擇其他方式去設置透明信息。 這里有很多設置,你可以用下拉框切換,則下方可能會提供不同的輸入界面。你可以設置透明色為黑色,白色,前景,背景,某個采樣點的顏色,某個指定RGB顏色,或者alpha通道(白色表示透明),或者指定一個顏色表中的索引。
(4)關于對話框 你可以在PS的菜單:幫助-關于增效工具-ICO...中看到它,這個對話框也是我精心設計和編寫的,還是蠻漂亮的。當你在這個對話框中移動鼠標時,能看到我的博客網址對鼠標的反饋,你可以在網址上面點擊,即調用默認瀏覽器打開網址。這是通過PS提供的 CallBack Suite 實現的,我在之前寫的如何編寫 PS 濾鏡的教程中曾經介紹過。
(5)其他說明: 該插件是建立在我最近的一些已發表的博客的研究基礎上的,從圖像文件格式查看器開始,到AlphaBlend和反鋸齒圖標,生成索引圖像的八叉樹算法,這些文章發表的目的都是為本插件做的技術準備。要開發這個插件,需要耗費很大精力,包括研究 ICO 文件格式,PS SDK 等等。已參考的資料(例如八叉樹算法)在之前的博文中已有介紹,在此省略。 5.1 如果文件中沒有指定 X,Y 分辨率,則我會在 PS 中保持 PS 的默認值:72像素/英寸。 5.2 如果打開了索引圖像,你可以在菜單:圖像-模式-顏色表 中看到當前的顏色表。由于有些軟件(例如AcdSee)不能正確解析顏色表為實際顏色數量的圖像,所以我保存文件時,顏色表一律設置為 16 或者 256,而不是實際的顏色個數。 5.3 本插件尤其適用于以下用戶,我會向下列人群強烈推薦你安裝這個插件: PS熟練用戶,Windows 圖標設計師, 喜歡自己參與 UI 設計的程序員,工程師等技術人員(就像我這樣的人)。 這個插件使用戶可以完全利用到 Photoshop 的強大圖像處理能力,而不再受限制于 VC,VS.NET 等IDE的有限編輯能力,這樣你就能借助 Photoshop 制作出更漂亮的圖標,當然你也可以很方便的把網絡上很多 PNG 素材方便的轉換成在程序中使用的圖標。 我衷心的希望有更多的人喜歡它,使用它。如果你有任何的使用意見和建議和需求,歡迎你在我的博客留言,或者發送 Email 到我的信箱(信箱地址位于左側的公告欄)。
(6)最后是該插件的發行包的下載連接: http://files.cnblogs.com/hoodlum1980/PsPlugIns_V2013.zip
(7)安裝方法: 把 “IcoFormat.8BI” 文件復制到Photoshop的文件格式插件目錄 ①,例如 C:\Program Files\Adobe\Photoshop CS\增效工具\文件格式\,重啟 PS 即可。檢查在PS的菜單中如果有下面的菜單:“幫助-關于增效工具-ICO...”,則說明插件安裝成功。
(8)更新記錄 (BUG等級:H: 極其重要; M: 中等; L: 無關緊要) : 8.1 M: 保存為32BPP以下質量時,調整了設置ANDMASK的邏輯(Alpha通道中所有小于255的都被設置為透明),已避免顯示出比較生硬的陰影。2010-12-17。 8.2 H: 修正在保存32BPP反鋸齒圖標,選擇線性插值時,錯誤的將Alpha通道也使用線性插值的BUG(正確的做法是 Alpha 通道依然用刪除像素方法生成)。該BUG導致在產生其他大小的圖像時,可能會錯誤的使不應該透明的像素成為透明。值得一提的是,此 BUG 是由 8.1 引入的。2010-12-18 2:04:15。 8.3 L: 修正以下BUG,打開圖標中的索引圖像,取消勾選“開啟圖像透明效果”選項,但結果有時仍然應用了透明。2010-12-18 3:36:08。 8.4 H: 調整了插件的 PIPL 資源,使濾鏡可以直接從 PS 中獲取到文檔的透明信息(不再需要用戶顯式提供附加通道了)。調整了線性插值的代碼中邏輯不夠準確的部分,并避免像素與源圖上的透明部分(黑色)合成。2010-12-19 0:55:23。 8.5 M: 調整了生成 32 BPP 圖標的邏輯,直接從 PS 文檔中的數據去降級圖像 (原方式在產生索引圖像時偶發顏色缺失,原因不詳)。2010-12-19 1:41:08。 8.6 L: 增加存儲為 32 BPP 單個圖像的反鋸齒圖標選項。2010-12-22 2:05:30。 8.7 L: 讀取索引圖像時,設置透明的方法重新改為之前的方法。可以保證應用透明更加準確,對于16色圖像一定會正確應用透明,對256色圖像嘗試尋找把圖像上沒有使用的顏色作為透明色,因此有可能無法應用透明。該方法主要缺點是,另存為時,可能使16色索引圖像升級成256色圖像。2010-12-23 2:57:17。 8.8 L: 細微調整了讀取 16 BPP 圖像的像素取值的線性映射方法(影響不大)。2010-12-24 18:48。
(9)致謝: 感謝 Chris Cox (Adobe 員工)在官方論壇上對我提的問題給予答復。 Adoble 論壇的 Photoshop SDK 版塊網址: http://forums.adobe.com/community/photoshop/photoshop_sdk
(10)參考資料: 10.1 八叉樹算法(地址略)。 10.2 Photoshop SDK(6.0, CS)。 10.3 ICONPRO(MSDN 技術文檔中提供的范例)。
(11)本文中使用的術語介紹 11.1 BPP(Bits Per Pixel) 即圖像的位深度。其含義是描述每個像素所使用的位數(一個字節含有8位)。例如對于 RGB 真彩色位圖來說,每個像素用三個字節表示,其BPP = 24。黑白圖像(二元位圖)的位深度為1。16色索引圖像的位深度為4(每個字節可表示兩個像素),256色索引圖像的位深度為8(每個字節表示一個像素)。通常位深度除以8,就是表示每個像素的字節個數。 我們常說的灰度圖像實際上并不是一種專有格式,而是一種特殊的256色索引圖像,其調色板的特征是每個顏色的R,G,B三個分量是相等的,256個調色板顏色從(0,0,0)到(255,255,255),因此其圖像數據的值本質上依然是顏色索引,但同時也可以理解為其灰度的亮度。 11.2 反鋸齒(AntiAlias) 這里是我個人的譯法,可能不夠準確,可能應該稱為抗鋸齒才更符合更多人的習慣。這是一種使用半透明像素的技術,用于消除鋸齒感。首先我們需要了解的是鋸齒感其產生的原因是顯示器呈現圖像使用的是一個密集的矩陣柵格,GDI按照計算機圖像算法設置點陣像素(本質上把數學的模擬信號變成離散化后的數字化信號),這種呈現類型的直線看上去帶有鋸齒,有點像樓梯。相鄰像素的非平滑性突變使人產生鋸齒觀感。 更為復雜的呈現直線的技術需要使用部分透明的像素和不透明的像素。像素被設為純色或與背景色的混合色(取決于它們和直線的接近程度)。這種呈現方式被稱為消除鋸齒,它可以生成視覺上更感平滑,柔和的直線。 本文中提到的反鋸齒圖標,指的是 32 BPP 的圖像。即每個像素用4個字節表示,分別代表的是R,G,B,A(lpha),比普通RGB位圖多出來的一個 Alpha 通道,用于描述該像素的透明程度。因此能夠指定像素的半透明,從而和背景產生柔和的融合,即達到反鋸齒的效果。
① PS 插件目錄通常是指 $(PS INSTALL DIR) \ Plug-Ins,只要把第三方插件的文件(.8B*)放在這個目錄下,PS在啟動時就會去掃描并嘗試加載這個目錄下的 8B* 文件。插件是什么種類,并不是由后綴名決定的,而是由其PIPL屬性指定的。在這個目錄下,又可以按照插件種類建立相應的子目錄。例如濾鏡(Filter),文件格式(File Format),但注意只要把文件放到PS的插件目錄即可被PS嘗試加載。 插件目錄可以通過查找注冊表的下列位置得到: HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\(版本號,例如8.0)\PluginPath 但是對于 PS CS 中文版來說,這個值保持著英文版路徑(沒有被漢化),所以是錯誤的,所以這給我們為插件提供一個更簡單易用的安裝工具造成了一點小障礙。對于英文版來說,可以認為就是PS安裝目錄下面的 Plug-Ins 子目錄。 更多 用于讀寫ICO圖標文件的 Photoshop 插件相關文章請關注PHP中文網! Photoshop默認保存的文件格式,可以保留所有有圖層、色版、通道、蒙版、路徑、未柵格化文字以及圖層樣式等。 |
溫馨提示:喜歡本站的話,請收藏一下本站!