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

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

PHP有function/库来做到这一点? 质量/压缩是否好?

小心你想要转换的东西。 JPG不支持Alpha透明,而PNG则支持。 你会失去这些信息。

要转换,您可以使用以下function:

// 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库中的imagecreatefrompng()imagejpeg()函数。

这样做安全地将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); 

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

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

希望有所帮助

 <?php function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) { $explode = explode(".", $imageName); $filetype = $explode[1]; if ($filetype == 'jpg') { $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); } else if ($filetype == 'jpeg') { $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); } else if ($filetype == 'png') { $srcImg = imagecreatefrompng("$imageDirectory/$imageName"); } else if ($filetype == 'gif') { $srcImg = imagecreatefromgif("$imageDirectory/$imageName"); } $origWidth = imagesx($srcImg); $origHeight = imagesy($srcImg); $ratio = $origWidth / $thumbWidth; $thumbHeight = $origHeight / $ratio; $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight); if ($filetype == 'jpg') { imagejpeg($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'jpeg') { imagejpeg($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'png') { imagepng($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'gif') { imagegif($thumbImg, "$thumbDirectory/$imageName"); } } ?> 

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

$ path =原始图片所在文件夹的path。 $ name =要制作缩略图的文件的文件名。 $ thumbpath =要将缩略图保存到的目录的path。 $ maxwidth = PX中缩略图的最大宽度,例如。 100(这将是100px)。

createThumbnail($path, $name, $thumbpath, $maxwidth);

你可能想看看Image Magick ,通常被认为是事实上的image processing标准库。 是否需要安装额外的PHP模块,不知道是否有/默认安装。

HTH。

PHP具有一些image processingfunction以及imagecreatefrompngimagejpegfunction 。 第一个将创build一个PNG图像文件的内部表示,而第二个用于将该表示保存为JPEG图像文件。

看到这个PHP图像库列表 。 基本上是GD或Imagemagick。

我知道这不是一个确切的答案,但作为答案已经给出…

你真的需要在PHP中这样做吗?
我的意思是:如果你需要转换大量的图像,用PHP做的可能不是最好的方法:你将遇到memory_limitmax_execution_time ,…

我也会说GD可能不会给你最好的质量/尺寸比例; 但不知道(如果你做GD和其他解决scheme之间的比较,我对结果非常感兴趣;-))

另一种不使用PHP的方法是通过命令行使用Image Magick (而不是像其他人推荐的PHP扩展)

你必须编写一个经过所有.png文件的shell脚本,并将它们提供给它们

  • convert为每个.png文件创build一个新的.jpg文件
  • 或者mogrify直接在原文件上工作并覆盖它。

作为一个旁注:如果你直接在你的生产服务器上这样做,你可以在一堆转换之间放一些hibernate时间,让它冷却一下有时候^^

我已经使用了shell脚本+ convert / mogrify几次(让它们运行10小时一次) ,而且他们的工作非常好:-)