2012-12-05 44 views
0

我一直在嘗試各種圖像功能的組合,但我似乎無法得到一個好的結果。轉換圖像爲N灰度+透明度

我試圖將圖像轉換爲固定數量的灰度級,加上透明度(如果它存在於原始圖像中)。

它需要能夠轉換真彩色圖像和基於調色板的圖像。

輸出圖像應具有...

  1. 固定數量的灰度級,其中包括純黑色的(0,0,0)和純白色(255,255,255)。
  2. 透明像素的任何地方,源像素具有高水平的透明度。

我的主要問題是與imagetruecolortopalette的工作,這確實降低了調色板,但似乎總是失去任何透明度的過程。我最終編寫了一段非常長的,複雜的代碼,分析圖像逐個像素的灰度級,然後選擇調色板顏色,然後逐個像素地重新創建圖像,但它很慢,所以我希望有更好的方法。

感謝您的任何建議!

回答

0

大約一年前,我試過這樣做。然而,由於我只將圖像轉換爲黑色或白色,因此該任務稍微簡單一些。

  • 該算法創建了一個與舊的尺寸相同的新圖像。
  • 然後看着老一個的每個像素,並通過加權和計算其亮度:
    0.2 R + 0.7 G + 0.1 B =亮度
  • 然後將亮度來確定的顏色。
  • 而新的顏色寫入第二圖像

的對應像素,我使用的圖像沒有透明度,但我猜你可能只是透明度值複製到新的圖像。我不明白你是如何失去透明度信息的。你不能只是讀寫Alpha通道嗎?

當時我在python中實現了它,它運行得非常快。處理1.000.000像素需要幾秒鐘。因此,我猜想你的性能問題是連接到php而不是任務本身。此外,我認爲沒有太多優化空間。畢竟,你必須看所有的像素,否則你會失去圖像分辨率。處理本身相當簡單。

+0

在進行逐像素更新時,PHP中肯定存在一些性能問題,所以最好在可能的情況下使用內置的圖像函數。我已經簡化了我的方法,並且提高了性能,但我仍然想知道是否可以僅使用圖像函數而不是這種蠻力逐像素方法來完成。 – xtempore