1

我正在尝试将图像保存为真正的灰度图像。我相信我在 PHP 中使用imagefilter($im, IMG_FILTER_GRAYSCALE)或使用以下代码的方式不是将图像保存为真正的灰度,而是保存为灰度图像的 RGB JPG,如此处所述

function imagegreyscale(&$img, $dither=0) {    
    if (!($t = imagecolorstotal($img))) {
        $t = 256;
        imagetruecolortopalette($img, $dither, $t);    
    }
    for ($c = 0; $c < $t; $c++) {    
        $col = imagecolorsforindex($img, $c);
        $min = min($col['red'],$col['green'],$col['blue']);
        $max = max($col['red'],$col['green'],$col['blue']);
        $i = ($max+$min)/2;
        imagecolorset($img, $c, $i, $i, $i);
    }
}

function imagetograyscale($im)
{
    if (imageistruecolor($im)) {
        imagetruecolortopalette($im, false, 256);
    }

    for ($c = 0; $c < imagecolorstotal($im); $c++) {
        $col = imagecolorsforindex($im, $c);
        $gray = round(0.299 * $col['red'] + 0.587 * $col['green'] + 0.114 * $col['blue']);
        imagecolorset($im, $c, $gray, $gray, $gray);
    }
}

我将我的 PHP 代码生成的照片与 IrfanView 渲染的灰度照片进行了比较。结果如下。第一张图片显示的是没有“灰度”一词的 JPG,而第二张(由 Irfanview 提供)似乎是真正的灰度。

在此处输入图像描述 在此处输入图像描述

我需要一个真正的灰度图像来确保我的图像是最小的文件大小,而不会进一步降低尺寸和质量。那么,如何使用 PHP 真正创建灰度图像呢?

4

0 回答 0