繁体   English   中英

提高PHP GD生成图像的质量

[英]improve quality of PHP GD generated images

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

生成的图像是:

img

我的代码是:

<?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);

?>

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 ] 到目前为止,您的图像非常简单,这可能没什么区别,但是如果您生成更复杂的图像则会很重要。

如果您进行这两项更改,您的图像将确保具有完美的质量。

由于JPEG压缩(这是一种独特的压缩算法),质量的损失。

如果你想要最好的质量使用PNG而不是jpeg。

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

对于地图生成器,我会推荐PNG,因为有许多纯色区域将被PNG压缩很多。

如果PNG图像的大小不可接受地大,则只考虑使用JPEG。
在那种情况下,杰里米说使用imagejpeg的质量参数..

imagejpeg($canvas, NULL, $quality);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM