Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP imagegif生成质量较差的图像_Php_Gif - Fatal编程技术网

PHP imagegif生成质量较差的图像

PHP imagegif生成质量较差的图像,php,gif,Php,Gif,我正在编写一个将jpg转换为gif的脚本。我面临的问题是,imagegif的输出质量不好,有些颜色会发生变化。黑色的 这是样品。一个是JPG格式,另一个是GIF格式 [JPG] [GIF] 正如你所看到的,GIF图像的颜色发生了一些变化 我正在使用以下代码 $img = imagecreatefromstring(base64_decode($image)); imagegif($img, "output.gif"); 如何提高gif图像的质量?gif的质量本质上比JPEG差,这是因为gif只

我正在编写一个将jpg转换为gif的脚本。我面临的问题是,imagegif的输出质量不好,有些颜色会发生变化。黑色的

这是样品。一个是JPG格式,另一个是GIF格式

[JPG] [GIF]

正如你所看到的,GIF图像的颜色发生了一些变化

我正在使用以下代码

$img = imagecreatefromstring(base64_decode($image));
imagegif($img, "output.gif");

如何提高gif图像的质量?

gif的质量本质上比JPEG差,这是因为gif只有256种颜色可供使用,而JPEG有4294967296种颜色


如果图像中的颜色少于256种,GIF实际上比JPEG质量更高,因为它不进行任何压缩,而JPEG进行压缩。

这与PHP无关:JPEG格式是真彩色或灰度格式,而GIF格式是调色板格式,最大调色板大小远低于真彩色

您需要重新考虑您的转换过程。

以下是您如何获得稍好的质量:

<?php

// load image
$image = imagecreatefromstring(file_get_contents('http://oi62.tinypic.com/atx1j.jpg'));

// create a true color image of the same size
$image2 = imagecreatetruecolor(imagesx($image), imagesy($image));

// copy the original gif image on to the true color image
imagecopy($image2, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));

// output image
header("Content-Type: image/gif");
imagegif($image2);
imagedestroy($image);
imagedestroy($image2);

?>
源图像

PHP生成的GIF图像


正如你所看到的,它稍微好一点。非常接近原始的。但是在GIF=[

中,您仍然被限制为256色,如果我使用ImageMagick,则质量相同,但大小更大。是否有一些功能可以帮助我解决此问题?您可能会使用抖动来通过增加大小来克服颜色限制,但基本上JPEG和GIF是用于不同紫色的。