如何使用 PHP 从 base64 编码的数据/字符串创建图像并将其保存到网站文件夹

Posted

技术标签:

【中文标题】如何使用 PHP 从 base64 编码的数据/字符串创建图像并将其保存到网站文件夹【英文标题】:How to create and save image to a website folder from a base64 encoded data/string using PHP 【发布时间】:2014-12-11 06:43:36 【问题描述】:

我的 php 文件中有以下代码,它工作正常,它解码 base64 字符串并将其显示为网页上的图像,但我希望它也将其保存在文件夹中。

<?php
$base = $_POST['encoded'];
$base = base64_decode($base);

$im = imagecreatefromstring($base);
if ($im !== false) 
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);

else 
    echo 'An error occurred.';

?>

我已经尝试过这些链接中描述的解决方案,但这些都不适合我

How to save a PNG image server-side, from a base64 data string

How to create GD Image from base64 encoded jpeg?

可以将此图像保存到文件夹的额外代码行是什么

【问题讨论】:

imagepng(); 有第二个参数,即文件名/文件路径。 已经用 imagepng($im,'image.png');它停止在网页上显示图像,甚至不将其保存在文件夹中 它会停止显示,是的,但它应该输出到与执行文件相同的目录。该文件与运行此脚本的页面不在同一空间中吗? 是的,文件在同一个地方。但不将图像保存在同一目录中 哦,现在我明白了。它的文件权限问题。写权限已关闭,这就是它不创建图像的原因。现在 imagepng($im,'image.png');正在工作 【参考方案1】:
$base = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
       .'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
       .'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
       .'8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$base = base64_decode($base);

$im = imagecreatefromstring($base);
if ($im !== false) 
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);

else 
    echo 'An error occurred.';

代码对我有用。 如果您看到空白页,则表示编码的字符串不正确。

【讨论】:

【参考方案2】:

文件权限未设置为写入模式。将其设置为 777 并使用以下代码进行测试。

<?php
$base = $_POST['encoded'];
$base = base64_decode($base);

$im = imagecreatefromstring($base);
if ($im !== false) 
    header('Content-Type: image/png');

    imagepng($im,'image.png'); // saving image to the same directory

    imagedestroy($im);


else 
    echo 'An error occurred.';

?>

【讨论】:

如果你创建一个函数,你可以制作两张图片,一张保存到文件,一张显示【参考方案3】:

此代码适用于 JPEG 图像

$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHB'; // image data 

define('UPLOAD_DIR','dir_path/'); // image dir path

list($type, $data) = explode(';', $data); 

list(, $data)      = explode(',', $data);

$data = str_replace(' ', '+', $data);

$data = base64_decode($data); // base 64 decoding 

file_put_contents(UPLOAD_DIR.$img_name.".jpeg", $data); // saving the image to required path

【讨论】:

以上是关于如何使用 PHP 从 base64 编码的数据/字符串创建图像并将其保存到网站文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何判断字符串所用何种加密编码

Java如何进行Base64的编码(Encode)与解码(Decode)?

如何将音频文件转为base64 编码

如何从 html 图像中获取 base64 编码数据

我有一个 base64 编码的 png,如何将图像写入 PHP 中的文件?

php 图片流 转为base64