2013-06-03 40 views
1

我目前正在開發一個使用PHP和Javascript的AJAX應用程序,該應用程序允許用戶上傳將打印在鋁箔上的圖像。由於我將使用標準的CMYK打印機,因此它不會打印任何白色部分,而只是將這些部分留空 - 這在白皮書中通常沒有什麼區別,但在這裏它確實存在,因爲我正在打印在箔上。當你考慮到一個灰點會變成半透明的黑色時,它會變得更加複雜,我甚至沒有談到顏色。將圖像中的白色部分轉換爲透明以模擬打印

然而,我想創建一個帶有模擬打印過程的alpha通道的PNG文件,所以我可以預覽在不同背景下打印的鋁箔的外觀。

現在我明白了減色法和加色法模型的基本理論,還有RGBA和CMYK的基本理論,但是這只是基礎知識,在這裏我對如何繼續進行了一些研究。我想理論上你會將每個像素轉換成CMYK,並將每個通道解釋爲從透明到顏色而不是從白色到彩色的比例,但是如何將其轉換回RGBA?

當然,最好的事情是,如果ImageMagick會提供這樣的功能....不是,或者我必須手動循環像素嗎?如果是後者,我將如何進行計算?

我不知道這是否是以前的問題。我在Stackoverflow或Google找不到任何東西,但也許我錯過了正確的關鍵字。任何進一步的閱讀,想法或超鏈接的食物和一張紙條「我們討論過這一百萬次,白癡!」將受到熱烈歡迎。

感謝

回答

2

你基本上需要的是一個alpha通道添加到上傳的圖片,並創建一個PNG文件。

alpha通道應該表示打印顏色的不透明度。要生成它,你有幾個選擇:

  1. 拿一份圖像,將其轉換爲灰度,反轉它,並將其用作alpha通道。

  2. 創建alpha通道計算從原始圖像導出的每個像素的阿爾法值:阿爾法= 1.0 - 分鐘(紅,綠,藍)(取決於使用255而不是1.0是否使用整數或浮點數)。

  3. 將原始圖像轉換爲CMYK(使用顏色配置文件,而不是通過互聯網找到的窮公式),並將其用作爲原始RGB圖像創建Alpha通道的基礎:alpha = max(青色,品紅色,黃色,黑色)

  4. 拿出一個更好的公式來計算每個像素的透明度,例如:阿爾法=分鐘(0.2 *青色+ 0.5 *品紅+ 0.1 *黃+ 0.7 *黑,1.0)

最後一個只是猜測每種顏色的相對不透明度。你當然可以改進它。

+0

哇,非常感謝。這是4個奇妙的解決方案,適用於我卡住的部分。特別是第一個由於其簡單和優雅而令我非常有趣。鑑於我們只是在這裏討論印刷品預覽,我認爲結果將會滿足需求。我會嘗試他們,讓你知道它的工作。 – clausvdb

+0

備註:變體1的作品,但它會讓你的顏色看起來蒼白。這就是爲什麼我添加了一部分來調整遮罩圖像的級別。我的批處理腳本現在看起來像這樣:'convert a.png -colorspace Gray -negate -level-colors black,「#aaaaaa」b.png'和'convert a.png b.png -alpha Off -compose CopyOpacity -composite c.png'。這給了我目前相當不錯的結果,但從長遠來看,我可能會更改爲變體3以獲得更準確的結果。 – clausvdb

相關問題