提高 PHP GD 生成图像的质量

Posted

技术标签:

【中文标题】提高 PHP GD 生成图像的质量【英文标题】:improve quality of PHP GD generated images 【发布时间】:2011-09-14 18:29:54 【问题描述】:

我将开始使用 GD 库在 php 中构建地图生成器。我使用 lib 生成了一些图像,但它们的质量不高。我只是想知道有什么方法可以提高图像的质量。

生成的图片是:

我做的代码是:

<?php

$canvas = imagecreate(800, 350);

imagecolorallocate($canvas, 255, 255, 255);

$pink = imagecolorallocate($canvas, 255, 105, 180);
$white = imagecolorallocate($canvas, 255, 255, 255);
$green = imagecolorallocate($canvas, 132, 135, 28);

imagestring( $canvas, 20, 290, 25, "Quality is not the best :(", $green );
function drawlinebox($x1, $y1, $x2, $y2, $height, $color)
    global $canvas;
    imagesetthickness ( $canvas, 1 );
    for ($i=1; $i < $height; $i++)
        imageline( $canvas, $x1, $y1, $x2, $y2, $color );
        $y1++; $y2++;
    


drawlinebox(20, 20, 780, 300, 30, $green);
drawlinebox(20, 300, 780, 20, 30, $pink);
header('Content-Type: image/jpeg');
imagejpeg($canvas);
imagedestroy($canvas);

?>

【问题讨论】:

尝试使用imagepng 而不是imagejpeg。 PNG (header('Content-Type: image/png');) 可能是更好的格式。 你试过抗锯齿功能吗? 【参考方案1】:

imagejpeg[docs] 接受图像质量参数。默认为75,但您可以将其增加到最大100。例如:

imagejpeg($canvas, NULL, 90);

但是,对于具有大量连续颜色和清晰线条的生成图形,JPEG 可能不是最佳选择。 PNG 更适合这些类型的图像,并且可能会以更小的尺寸为您提供完美的质量。 imagepng[docs] 有几个选项,但默认应该没问题:

header('Content-Type: image/png');
imagepng($canvas);

 

您首先使用imagecreate[docs] 制作图像。这将创建一个“基于托盘”的图像:一个只能使用有限数量的颜色的图像。这与较低质量的 GIF 或 8 位 PNG 相匹配,但由于您没有使用这些格式,因此您应该改用 imagecreatetruecolor[docs]。到目前为止,您的图像非常简单,这可能不会产生影响,但如果您要生成更复杂的图像,这将很重要。

如果您进行这两项更改,您的图像一定会拥有完美的质量。

【讨论】:

另外,试试imagecreatetruecolor 而不是imagecreate @nikc:好建议,我已将其添加到我的帖子中。 @Ameer:很好,很高兴能帮上忙。如果您认为您的问题已经解决,您应该考虑通过单击旁边的灰色复选标记将最有帮助的答案标记为“已接受”。 imagecreatetruecolor() 返回黑色图像 :(【参考方案2】:

质量损失是因为 JPEG 压缩(这是一种有损压缩算法)。

如果您想获得最佳质量,请使用 PNG 而不是 jpeg。

header('Content-Type: image/png');
imagepng($canvas);

对于地图生成器,我建议使用 PNG,因为有许多纯色区域会被 PNG 压缩很多。

仅当 PNG 图像的尺寸大到无法接受时才考虑使用 JPEG。 在那种情况下,正如杰里米所说,使用imagejpeg..的质量参数。

imagejpeg($canvas, NULL, $quality);

我会尝试各种质量以找到合适的尺寸质量权衡。就我个人而言,我发现在大多数情况下,90 的质量是可以接受的,但如果你愿意,你可以将它提高到 100。

【讨论】:

以上是关于提高 PHP GD 生成图像的质量的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD 图像水印质量

PHP GD 库质量下降。其他想法?

PHP GD imagejpeg:输出文件大小比原始文件大

Perl Image Resize 使用 GD 并保持图像质量

提高制作的圆形缩略图的图像质量

听说PHP通过GD库生成缩略图后图片的大小没有变化是吗?