2010年5月19日 星期三

色彩模型轉換程式

我這個小工具是在我修改這裡的版型時龜毛地弄出來的(我個人時常都很龜毛醬,總有些莫名的堅持),因為我不滿意繪圖軟體的調整色相功能,包括 Photoshop 、PhotoLine 32 等。使用方法如下。


全貌



一開始網頁就在 autoChange 為 on 的狀態,按一下該按鈕會轉為 off 狀態,再按一下轉回 on 狀態,在 on 狀態,只要有一個或一組欄位的數值改變了,其他相應欄位亦會跟著改變。

autoChange 在 on 狀態



autoChange 在 off 狀態


以下解說以 autoChange 在 on 狀態為主。

如果有一個十六進位顏色碼相對應的色相、飽和度、luma(可譯造「亮度」,為了與其他術語區分,這裡不譯),只要把該色碼填在下面的任一個「(in hex) color」欄位,再按 tab 鍵或用滑鼠點網頁其他地方,相應的色相(hue)、飽和度(saturation)和 luma 就會顯示在相應的欄位。

為了做到 100% 準確,所以這裡以分數(fraction)計數,我夠龜毛吧!(自豪貌 XD

為了方便理解,也有小數(decimal)顯示。在顯示數值的同時,也會在上方顯示相應的顏色。

這裡以色碼 #669922 為例。

填上色碼後顯示的樣子


填多一欄,以便改色相時有所對照


arc hue 和 chord hue 的分別(兩個皆為我自創的名詞):
圖修改自 http://en.wikipedia.org/wiki/File:Hsv-hexagons-to-circles.svg ,使用 cc-by-sa-3.0 授權。

因為計算 arc hue 要使用到三角函數,會變成無理數,所以無法以分數直接表示。


如果想改變色相,例如加 120 度,由綠色轉做藍色,那麼先選 single field change (因為要單單改 hue 欄位其他欄位就跟著變), hue 欄位填上 1440 / 7 (因為 400 + 120 * 7 = 1440)。

填上 1440 / 7 後的模貌

大家是否覺得該顏色只是改變了色相,其他沒有改變?是就成功了。

基本功能解說完畢,到進階一點的。

嫌逐個色碼填寫麻煩?可以一次過在「many colors」欄位填寫。

在 many colors 一次過填色碼。


色相加120度後的模貌


在自動模式下,可以選擇「group change」或是「single field change」,「group change」指填滿「red」、「green」 和「blue」三個欄位或填滿「chord hue」、「saturation」、「luma」三個欄位後其他欄位才相應改變數值,「single field change」指填了任一個欄位後其他欄位就立即相應改變。

如果不喜歡太自動,可以按一下 autoChange 按鈕,讓 autoChange 在 off 狀態。以下以 autoChange 在 off 狀態作說明。在「(in hex) color」欄位填上色碼後,按右上角的「hex color」按鈕。在「chord hue」欄位填上色相值後,按「HS luma」按鈕。

手動模式要按的按鈕。

這工具除了可以顯示 HS luma (hue / saturation / luma) 色彩空間的色彩模型外,也可以顯示 HSV (hue / saturation / value)色彩空間和 HSL (hue / saturation / lightness)色彩空間的色彩模型。在顯示 HS luma 色彩模型的時候,還有參數可以調整。根據英文維基百科的說明,HSI (hue / saturation / intensity)模型(亦即 HS luma 模型的特例)的飽和度的原本定義並不使模型 fill 在一個 cylinder (圓筒)中,但這裡經過我自行研究出的算式,HS luma 模型可以填滿在一個圓筒中。

不論使用哪個色彩模型,色相值的計法都是一樣的,但飽和度卻不一樣了(一樣計法的是 chroma值),因為飽和度是依據 luma 、value 或 lightness 等值和 chroma 值計算而來,而每個色彩模型的不同就在於 luma 、 value 或 lightness 等的計法是不同的。

luma 的計法是: luma = r * red + g * green + b * blue (red 、green 、blue 各大於或等於 0 及小於或等於 1 ,這裡是由色碼的紅、綠、藍三個成份除 255 得來 ),在這個工具,可以調整 r 、 g 、b 的數值,當然是份數值,這樣才夠龜毛 XD ,這裡預設使用 GIMP 軟體的 Luminosity 的數值,資料來源 http://docs.gimp.org/2.6/en/gimp-tool-desaturate.html ,即是計算灰階(grayscale)所使用的公式。


這工具的限制:
1、人眼看到的亮度實際上不是線性組合,但這裡的公式算是很好的近似了,大家看效果就可以知道了。
2、使用了份數作計算,雖然使用了最大公因數的方法,但數值太大依然會溢位,始終我不夠龜毛,沒有使用 Bignum 實作 Rational 。
3、逐堆圖素改圖太麻煩了,我當然又寫了小工具完成這工作,只是該工具未粉飾過,大家未必合用。


該未粉飾過的小工具的使用方法:

先把工具網頁和圖檔放在同一個資料夾。

先把工具網頁和圖檔放在同一個資料夾。


開啟原始檔 convert_hue.html ,在圖中的位置換上你自己的圖檔的檔名,之後存檔。


用 Google 瀏覽器瀏覽 convert_hue.html ,用滑鼠在右邊的圖檔按右鍵。

在右鍵選單中按「另存影像為(V)...」。

convert_hue.html 使用了 HTML5 Canvas 的進階功能,沒有測試過 firefox 支不支援。因為安全問題,所以現時只能在本地端使用。

未來將會增加的機能(無責任預告 XD ):
color_model_conversion.html 使用 BigInteger 。
convert_hue.html 做到可以線上使用並粉飾一輪。

線上應用服務:

原始碼:

convert_hue.html :

參考資料:

2010年5月16日 星期日

沒有辦法地通通忘記與題外話

曾經想過很多不同的文字要寫,但日子久了,還遲遲未開新網誌,網下又經過一些事,使自己忘記了過去所思考的。加上硬碟壞了,三年沒有備份呀!當下想把之前打下的文章貼上來也做不到了。唯有當過去這段時間通通忘記了。

話說忘記了是有點傷心,但放下了,人空空如也,也樂得輕鬆。有人說「不記得即是代表不重要」,雖然我覺得這句說有問題,當下也只能用這句說話自我安慰。希望硬碟資料救援那邊有氣息,始終有不少重要資料一旦永遠消失了,快來的日子會有不少麻煩和不便。反過來又說,沉重的資料常使我的工作列圖示滿滿的,我實在太心多又龜毛。

雖說通通忘記了,但也有些東西、有些計劃是依稀有些印象的,我現在盡量寫一些吧。

界列芝部會作為串連某幾個世界的部落格,希望打破某教授所說的隔行隔山,燃燒我的熱血。這幾個世界包括但不限於:ACG(動畫、漫畫、遊戲,這部落格主要是動畫)、同人遊戲創作、著作權、自由軟體、網頁技術、網站黑客、維基百科、程式語言、網站服務的應用。我個人依然學習中的有:數學、電腦科學、物理、黑客技術、哲學(主要是形而上學)、形式科學、影像處理、棋藝、政治。我曾經打算同一題材使用不同細節和標題去寫,用以吸引不同的人,亦能磨練自己的寫作技巧。

到現在,這部落格重新開業,先是用以介紹自己寫的小程式,再是寫寫廢話,希望大家不要介意,又希望以後會漸入佳境,做到為不同世界的人穿針引線,打破隔行如隔山必需乘乘聽所謂專家說話的道理與無理。


題外話中的題外話

這部落格的版型是我修改自 Son of Moto (Mean Green Blogging Machine variation) 的,在修改途中,我還寫了個小程式,學習了些關於色彩空間的知識。因為 Son of Moto 沒有表明授權條款(還是只是我沒有看到?),所以我沒有徑自採用自由版權,希望 Son of Moto 版型的原意是自由使用,我亦讓大家自由使用。

我的頭像是由南瓜姐所畫,謝謝她幫忙畫頭像,我實在是繪圖苦手,其實我一直想讀那些什麼繪畫班,身為遊戲製作人竟然不懂畫圖,嘆。大家說,南瓜姐畫的這隻貓是否很有趣呢?

這個部落格會有 Google 廣告,大家不喜歡那個廣告,請出聲, Google 是連慈善事業的捐款式廣告也有的,絕對可以做到多贏,值得鼓勵。