1

我有个疑问。如果我强制 imagejpeg 保存 .png 文件,会有问题吗?就像在这个例子中一样:

imagejpeg($img,$_SERVER['DOCUMENT_ROOT']."/test.png",80);

我想使用这种方法,因为我可以使用$quality过滤器。在这种方法中,我保存了一个大约 25kb 的 .png 文件,但如果我使用 imagepng,我的图像大约为 200kb(我使用了 0-9 的 $quality 级别,但我没有看到任何变化,只有 -20 kb) . 我不想犯错,因为我的网站每秒都在生成 .png 图像。

方法 2。我尝试使用 pngquant 压缩 .png 图像,但是当我使用 imagepng 函数时,我不知道该怎么做。我尝试过这样的事情,但是如果我将图像传递给函数,它就不起作用。

ob_start();
imagepng($img);
$png = ob_get_clean();
file_put_contents($_SERVER['DOCUMENT_ROOT']."/test.png", compress($png);

function compresss($img)
{
    //...
}

在其他情况下,如果我有$png = $_FILES['file']['tmp_name']工作。那么有没有办法用 pngquant 进行压缩,或者如果我强制 imagejpeg 保存 .png 文件有问题吗?

4

2 回答 2

2

您只强制创建文件的文件名。生成的文件将是 jpg 及其所有属性。imagejpeg()如果您使用该方法,您将不会获得压缩的 png 文件。

您需要了解这两种格式的区别。jpg 是一种压缩格式,在压缩时会丢失图像信息,而 png 是一种无损格式。png 也有压缩级别,但由于没有破坏图像信息,因此它会比 jpg 文件更大。

如果你使用imagepng($image, $filename, 9),你会得到一个压缩最好的 png 文件。

于 2016-09-06T14:18:26.347 回答
1

您应该使用imagepng()而不是imagejpeg()创建 png 文件。

http://php.net/manual/fr/function.imagepng.php

于 2016-09-06T14:00:08.097 回答