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