Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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通过压缩将PNG转换为JPG?_Php_Png_Jpeg - Fatal编程技术网

使用PHP通过压缩将PNG转换为JPG?

使用PHP通过压缩将PNG转换为JPG?,php,png,jpeg,Php,Png,Jpeg,我有一堆高质量的PNG文件。我想使用PHP将它们转换为JPG,因为它在保持质量的同时,文件大小更小。我想在网上显示JPG文件 PHP是否有函数/库来实现这一点?质量/压缩有什么好处吗?PHP还有一些和。第一个将创建PNG图像文件的内部表示,而第二个用于将该表示保存为JPEG图像文件。您可能需要查看,通常被认为是图像处理的事实标准库。需要安装一个额外的php模块,但不确定默认安装中是否有可用的 HTH.小心要转换的内容。JPG不支持alpha透明,而PNG支持。你会丢失这些信息 要转换,可以使用以

我有一堆高质量的PNG文件。我想使用PHP将它们转换为JPG,因为它在保持质量的同时,文件大小更小。我想在网上显示JPG文件


PHP是否有函数/库来实现这一点?质量/压缩有什么好处吗?

PHP还有一些和。第一个将创建PNG图像文件的内部表示,而第二个用于将该表示保存为JPEG图像文件。

您可能需要查看,通常被认为是图像处理的事实标准库。需要安装一个额外的php模块,但不确定默认安装中是否有可用的


HTH.

小心要转换的内容。JPG不支持alpha透明,而PNG支持。你会丢失这些信息

要转换,可以使用以下功能:

// Quality is a number between 0 (best compression) and 100 (best quality)
function png2jpg($originalFile, $outputFile, $quality) {
    $image = imagecreatefrompng($originalFile);
    imagejpeg($image, $outputFile, $quality);
    imagedestroy($image);
}

此函数使用和GD库中的函数。

请参阅。基本上是GD或Imagemagick。

这是一个小示例,它将以70%的图像质量将“image.png”转换为“image.jpg”:

<?php
$image = imagecreatefrompng('image.png');
imagejpeg($image, 'image.jpg', 70);
imagedestroy($image);
?>

希望这会有所帮助

我知道这不是对OP的确切答案,但因为答案已经给出了

您真的需要在PHP中执行此操作吗?
我的意思是:如果需要转换大量图像,用PHP进行转换可能不是最好的方法:您将面临
内存限制
最大执行时间

我还想说,GD可能无法为您提供最佳的质量/尺寸比;但对此不确定(如果您对GD和其他解决方案进行比较,我对结果非常感兴趣;-)

另一种不使用PHP的方法是通过命令行使用(而不是像其他人建议的那样作为PHP扩展)

您必须编写一个shell脚本来遍历所有
.png
文件,并将它们提供给

  • 为每个
    .png
    文件创建一个新的
    .jpg
    文件
  • 或者直接处理原始文件并覆盖它

作为旁注:如果您直接在生产服务器上执行此操作,您可以在转换之间留出一些睡眠时间,以便有时让它冷却下来^^


我已经多次使用shell脚本+
convert
/
mogrify
(让它们一次运行大约10个小时),它们的工作做得非常好:-)


这是一个非常好的缩略图脚本=) 下面是一个例子:

$path=原始图片所在文件夹的路径。 $name=要制作缩略图的文件的文件名。 $thumbpath=要将缩略图保存到的目录的路径。 $maxwidth=缩略图的最大宽度,以像素为单位,例如100(其中将为100px)


create缩略图($path,$name,$thumbpath,$maxwidth)

这样做可以安全地将PNG转换为白色透明的JPG

$image = imagecreatefrompng($filePath);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 50; // 0 = worst / smaller file, 100 = better / bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality);
imagedestroy($bg);

请注意,根据图像的不同,JPG的文件大小并不总是比PNG小,因此请确保使用适合您情况的文件。这是安全地将PNG转换为JPG的最正确方法。想为这个回复添加top++评级。这更好,涉及透明度。两个最重要的答案现在是平等的!你让我今天过得更好,伙计!非常感谢。这段代码是否适用于其他类型的源文件,如bmp?我知道这是一个老问题,但这是如何将PNG转换为JPG的最正确方法?这难道不简单吗?请看看danLeon关于安全地将PNG转换为JPG的答案。
$image = imagecreatefrompng($filePath);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);
$quality = 50; // 0 = worst / smaller file, 100 = better / bigger file 
imagejpeg($bg, $filePath . ".jpg", $quality);
imagedestroy($bg);