Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将图像转换为N灰度+;透明度_Php_Image - Fatal编程技术网

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

Php 将图像转换为N灰度+;透明度,php,image,Php,Image,我一直在尝试各种图像函数的组合,但是我似乎没有得到一个好的结果 我试图将图像转换为固定数量的灰度,再加上透明度(如果它存在于原始图像中) 它需要能够转换真彩色图像和调色板图像 输出图像应具有 固定数量的灰色级别,包括纯黑色(0,0,0)和纯白色(255,255,255) 透明像素源像素具有高透明度的任何位置 我的主要问题是imagetruecolortopalette的工作,它确实减少了调色板,但在这个过程中似乎总是失去任何透明度 最后我写了一段很长很复杂的代码,逐像素分析图像的灰度,然后选择调

我一直在尝试各种图像函数的组合,但是我似乎没有得到一个好的结果

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

它需要能够转换真彩色图像和调色板图像

输出图像应具有

  • 固定数量的灰色级别,包括纯黑色(0,0,0)和纯白色(255,255,255)
  • 透明像素源像素具有高透明度的任何位置
  • 我的主要问题是imagetruecolortopalette的工作,它确实减少了调色板,但在这个过程中似乎总是失去任何透明度

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


    谢谢你的建议

    大约一年前,我就尝试过这样做。但是,由于我只将图像转换为黑色或白色,所以任务稍微简单了一点

    • 该算法创建了一个与旧图像大小相同的新图像
    • 然后观察旧像素的每个像素,并通过加权和计算其亮度:
      0.2R+0.7G+0.1B=亮度
    • 然后用亮度来确定颜色
    • 并将新颜色写入第二图像的对应像素
    我使用的图像没有透明度,但我想您可以将透明度值复制到新图像。我不明白你是怎么失去透明度的。你就不能读写阿尔法通道吗


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

    PHP在逐像素更新时肯定存在一些性能问题,因此最好尽可能使用内置图像函数。我已经简化了我的方法,并提高了性能,但我仍然想知道,是否可以只使用图像函数,而不是这种暴力逐像素的方法来完成。