如何使用 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)?