2012-03-09 110 views
0

我有一个脚本,使用GD库和PHP上传和调整图像的大小。 我现在想上传一个PNG图像,并将其存储为PNG和JPEG,然后我将调整它的大小,但没关系。PHP的PNG转换成JPG格式的问题,图像失真

我遇到的问题是,有时,图像(jpg)的转换版本被扭曲。其他时间没问题。

我的代码是从这里另一个答案在计算器上采取:

function png2jpg($originalFile, $outputFile, $quality){ 
    $image = imagecreatefrompng($originalFile); 
    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
} 

扭曲的结果的一个例子如下所示,我完全知道,我不会得到透明度的JPG,我只是想要一个白色的背景。有任何想法吗?

我不能发表图片,所以链接到原:http://private.granvilleoil.com/prodImages/large/Petro-Patch.png) 和JPG:http://private.granvilleoil.com/prodImages/large/Petro-Patch.jpg

回答

2

你需要创建一个新的图像与白色(或任何你想要的)背景,并从PNG复制没有透明像素到图像:

function png2jpg($originalFile, $outputFile, $quality) { 
    $source = imagecreatefrompng($originalFile); 
    $image = imagecreatetruecolor(imagesx($source), imagesy($source)); 

    $white = imagecolorallocate($image, 255, 255, 255); 
    imagefill($image, 0, 0, $white); 

    imagecopy($image, $source, 0, 0, 0, 0, imagesx($image), imagesy($image)); 

    imagejpeg($image, $outputFile, $quality); 
    imagedestroy($image); 
    imagedestroy($source); 
} 
+0

纯粹的天才! - 感谢您的帮助,完美的作品! – 2012-03-09 10:57:29

0

PHP将只从PNG文件复制像素,并且如果您的PNG具有透明,这将不会被PHP处理导致您在转换后看到的内容。

+0

感谢您的答复,但我不明白满。那么如何让PHP将PNG转换为JPG呢? – 2012-03-09 10:39:21

+0

我的意思是你会失去PNG文件中具有透明度的任何像素,你最终会得到一个像你的例子中的图像。这是使用php将png转换为jpeg的唯一方法。 – slash197 2012-03-09 10:42:54

0

JPG格式不支持透明像素。

相反,你可以用白色/黑色透明替换像素,然后进行转换:

function png2jpg($originalFile, $outputFile, $quality){ 
    $size = getimagesize($originalFile); 
    $blank = imagecreate($size[0], $size[1]); 
    $newImage = imagecopymerge($blank, $originalFile, 0, 0, 0, 0, $size[0], $size[1], $quality); 
    png2jpg($newImage, $outputFile,); 
    $image = imagecreatefrompng($newImage); 
    imagejpeg($image, $outputFile, $quality); 
} 
0

也许如果您尝试从png格式上,你可以修复这个问题的白色图像的顶部使图像。

+0

感谢您的回答! – 2012-03-09 10:57:56

0

有我遇到了一个库它基本上是PHP的GD库的封装。它被称为GDImageManipulation或其他东西。它是一个简单的文件类,它处理您正在讨论的大部分初步图像操作。

看看它。它可能有帮助。

问候
Binaek萨卡

相关问题