【问题标题】:Convert image to N grays + transparency将图像转换为灰色+透明度
【发布时间】:2012-11-23 02:55:25
【问题描述】:

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

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

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

输出图像应该有...

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

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

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

感谢您的任何建议!

【问题讨论】:

    标签: php image


    【解决方案1】:

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

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

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

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

    【讨论】:

    • PHP 在进行逐像素更新时肯定存在一些性能问题,因此最好尽可能使用内置的图像函数。我已经简化了我的方法,并提高了性能,但我仍然想知道它是否可以仅使用图像函数而不是这种蛮力逐像素方法来完成。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多