将图像转换为N灰色+透明度

时间:2012-12-05 10:02:59

标签: php image

我一直在尝试各种图像功能组合,但我似乎无法获得良好的效果。

我试图将图像转换为固定数量的灰度级,加上透明度(如果它存在于原始图像中)。

它需要能够转换真彩色图像和基于调色板的图像。

输出图像应该有......

  1. 固定数量的灰色等级,包括纯黑色(0,0,0)和纯白色(255,255,255)。
  2. 源像素具有高透明度的任何位置的透明像素。
  3. 我的主要问题是imagetruecolortopalette的工作,它确实减少了调色板,但似乎总是失去任何透明度。

    我最后编写了一段很长很复杂的代码,用于逐像素分析图像的灰度级,然后选择调色板颜色,然后逐像素地重新创建图像,但它非常漂亮慢,所以我希望有更好的方法。

    感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

大约一年前,我曾尝试过这样的事情。然而,由于我只将图像转换为黑色或白色,因此任务稍微简单一些。

  • 该算法创建了一个与旧图像大小相同的新图像。
  • 然后它查看旧像素的每个像素,并通过加权和计算其亮度:
    0.2 R + 0.7 G + 0.1 B =亮度
  • 然后使用亮度来确定颜色。
  • 并且新颜色被写入第二张图像的相应像素

我使用的图像没有透明度,但我想你可以将透明度值复制到新图像。我不明白你是如何丢失透明度信息的。难道你不能只读取和写入alpha通道吗?

当时我在python中实现了它并且它运行得非常快。处理1.000.000像素只花了几分钟。因此我猜你的性能问题与php有关,而不是与任务本身有关。此外,我认为没有太多优化空间。毕竟,您必须查看所有像素,否则您将失去图像分辨率。处理本身非常简单。