如何将Base64格式的PNG图片转换为JPG格式的图片?

5

我有一个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...

JPEG和PNG之间的区别不仅是扩展名,而且是完全不同的编码。 - Aram Kocharyan
我知道,你有什么想法可以用不同的编码方式来实现吗? - Nader Khan
请使用PHP将PNG转换为带有压缩的JPG:https://dev59.com/sXM_5IYBdhLWcg3w2XBg 或者 https://dev59.com/-moy5IYBdhLWcg3wcNlO? - Aram Kocharyan
2个回答

9

Base64是一种编码格式,严格用于将数据转换为可传输的文本格式。如果你想使用其他格式,需要进一步转换该编码格式。因此,如果您想将PNG转换为JPEG,则需要使用另一种工具将其解码后转换为JPEG。这个问题有一些好的建议。回答该问题的Andrew Moore建议使用这样的函数。请确保GD库已作为PHP设置的一部分安装:

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

9
自PHP 5.2.0以来,最简单的方法是使用data://包装器,在许多函数中可以像文件一样使用它。
$image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhE...';
$image = imagecreatefrompng($image);
imagejpeg($image, 'myDirectory/filename.jpg', 100);
imagedestroy($image);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接