0

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

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

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

输出图像应该有...

  1. 固定数量的灰度等级,包括纯黑色(0、0、0)和纯白色(255、255、255)。
  2. 源像素具有高透明度的任何地方的透明像素。

我的主要问题是 imagetruecolortopalette 的工作,它确实减少了调色板,但似乎总是在这个过程中失去任何透明度。

我最终编写了一段很长、很复杂的代码,逐个像素地分析图像的灰度,然后选择调色板颜色,然后逐个像素地重新创建图像,但是速度很慢,所以我希望有更好的方法。

感谢您的任何建议!

4

1 回答 1

0

大约一年前,我尝试过这样做。但是,由于我仅将图像转换为黑色或白色,因此任务要简单一些。

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

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

那时我在 python 中实现了这个,它运行得非常快。处理 1.000.000 像素只需几秒钟。因此,我猜您的性能问题与 php 而不是任务本身有关。此外,我认为优化空间不大。毕竟,您要么必须查看所有像素,要么会丢失图像分辨率。处理本身相当简单。

于 2012-12-05T10:16:41.553 回答