如何使用PHP将图像保存为TRUE灰度?

最后发布: 2019-08-04 17:25:46


问题

我正在尝试将图像保存为真实的灰度图像。 我相信我在使用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创建灰度图像?

php image image-processing jpeg imagecreatefromjpg