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

问题描述:

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

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

+6

请注意,根据图像的不同,JPG并不总是比PNG文件大小小,所以请确保您使用的是正确的文件。 http://lbrandy.com/blog/2008/10/my-first-and-last-webcomic/ – jimyi 2009-07-29 17:27:05

小心你想要转换的东西。 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库使用imagecreatefrompng()imagejpeg()功能。

+9

请看看danLeon的答案,以便安全地将PNG转换为JPG。 – Codemole 2012-08-28 02:31:55

+4

这个答案不适用于带有透明度的png文件。 – 2013-09-18 13:29:35

PHP有一些image processing functions以及imagecreatefrompngimagejpeg function。第一个将创建一个PNG图像文件的内部表示,而第二个用于将该表示保存为JPEG图像文件。

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

HTH。

参见this list of php image libraries。基本上它是GD或Imagemagick。

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

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

希望帮助

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

你真的需要在PHP中做到这一点?
我的意思是:如果你需要转换大量的图片,在PHP做它可能不是最好的办法:你会面临一场memory_limitmax_execution_time ...

我也想说GD可能无法为您带来最佳质量/尺寸比例;但不知道这一点(如果你GD和其他解决方案之间的比较,我对结果;-)很感兴趣)

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

你必须写一个shell脚本,通过所有.png文件去,并让他们要么

  • convert创建一个新的.jpg e ach .png文件
  • mogrify直接在原始文件上工作并覆盖它。


一点题外话:如果您在生产服务器上直接这样做,你可以把转换的束之间的一些睡眠时间,让它冷静下来有时^^


我已经使用+ convert/mogrify几次(有他们这样的事情10小时一次运行) shell脚本,他们做的工作非常好:-)

<?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 =原始图片所在文件夹的路径。 $ name =要制作缩略图的文件的文件名。 $ thumbpath =要将缩略图保存到的目录的路径。 $ maxwidth = PX中缩略图的最大宽度,例如。 100(这将是100px)。

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

+1

我用这个,它工作得很好,谢谢! – user1053263 2012-03-17 04:20:51

这样做是为了安全的一个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);