【问题标题】:How to convert a Base64 PNG to a JPG image?如何将 Base64 PNG 转换为 JPG 图像?
【发布时间】:2013-01-08 23:46:42
【问题描述】:

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

【问题讨论】:

标签: php image png base64 jpeg


【解决方案1】:

Base64 是一种严格用于将数据转换为文本可传输格式的编码格式。如果您想要另一种格式,则需要进一步转换该编码格式中的任何内容。因此,如果您希望 PNG 成为 JPEG,则在 Base64 解码后需要通过其他工具将其转换为 JPEG。 This thread 有一些很好的建议。回答该线程的@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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 2011-10-21
      • 2023-02-24
      • 1970-01-01
      • 2012-06-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      相关资源
      最近更新 更多