我将开始使用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);
?>
答案 0 :(得分:14)
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] 。到目前为止,您的图像非常简单,这可能没什么区别,但是如果您生成更复杂的图像则会很重要。
如果您进行了这两项更改,您的图片将确保具有完美品质。
答案 1 :(得分:1)
质量损失是由于JPEG压缩(这是一种独特的压缩算法)。
如果你想要最好的质量,请使用PNG而不是jpeg。
header('Content-Type: image/png');
imagepng($canvas);
对于地图生成器,我建议使用PNG,因为有很多纯色区域会被PNG压缩很多。
如果PNG图像的大小不可接受地大,则只考虑使用JPEG
在那种情况下,杰里米说使用imagejpeg
的质量参数..
imagejpeg($canvas, NULL, $quality);
我会尝试各种品质来寻找合适的尺寸质量权衡。就个人而言,我发现大多数情况下90的质量是可以接受的,但是如果你愿意,你可以把它提高到100.