如何将Base64 PNG转换为JPG图像?

时间:2013-01-25 02:52:37

标签: php image png base64 jpeg

我有这个Base64 PNG,我想解码为JPG。如果我转换为PNG,它可以正常使用:

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('myDirectory/filename.png', $data);

但如果我尝试将其保存为JPG,则会使用(MyDirectory/filename.jpg)以黑白方式显示。

如何将其转换为JPG?这是我的Base64 PNG的一个例子:

data:image/png;base64,iVBORw0KGgoAAAANSUhE...

2 个答案:

答案 0 :(得分:8)

Base64是一种编码格式,严格用于将数据转换为文本可传输格式。如果你想要另一种格式,那么编码格式需要进一步转换。因此,如果您希望PNG为JPEG,则在Base64解码后,需要将其他工具转换为JPEG。 This thread有一些很好的建议。回答线程的@Andrew Moore建议使用这样的函数。确保在PHP设置中安装了GD库:

// 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);
}

因此,以您的代码为例,您将使用此函数执行以下操作:

png2jpg('myDirectory/filename.png','myDirectory/filename.jpg', 100);

或者您可以解构该png2jpg函数的函数并在代码中使用它们,如下所示:

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('myDirectory/filename.png', $data);
$image = imagecreatefrompng('myDirectory/filename.png');
imagejpeg($image, 'myDirectory/filename.jpg', 100);
imagedestroy($image);

答案 1 :(得分:6)

自PHP 5.2.0以来最简单的方法就是使用data://包装器,你可以像许多函数中的文件一样使用它。

$image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE...';
$image = imagecreatefrompng($image);
imagejpeg($image, 'myDirectory/filename.jpg', 100);
imagedestroy($image);
相关问题