将图像 base64 数据转换成图片文件

最近刚好遇到一个需要将图像 base64 数据转换成文件的功能,为了方便我直接用 chatGPT 生成功能函数就拿来直接用,结果反复测试了几次图片文件无法正常查看。chatGPT 生成的代码如下:

<?php

// 原始的 base64 数据
$base64Data = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAIAAgADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQ';

// 去掉 base64 数据中的文件类型信息
$base64Data = str_replace('data:image/jpeg;base64,', '', $base64Data);

// 将 base64 数据解码
$imageData = base64_decode($base64Data);

// 检查是否解码成功
if ($imageData !== false) {
  // 写入文件
  $filename = 'image.jpg';
  file_put_contents($filename, $imageData);

  echo '文件写入成功!';
} else {
  echo '无法解码 base64 数据!';
}

?>

思考问题出在哪儿? 平时使用 file_put_contents() 函数多是用来写日志或缓存文件,它写入文件的数据是字符串、数组或其他可序列化的数据,而实例中的图像 base64 数据 去除文件类型信息后,base64 解码后是二进制数据。

更深层的原因以我现在的知识解决不了。接下来的代码才是能正常使用的。

要使用PHP代码将图像的Base64数据转换为图片文件,您可以使用以下代码示例:

<?php 
/**
  * 将图像 base64 数据转换成 文件
  * @param $base64Data
  * @param $outputFile
  * @return mixed
  */
function base64_to_image($base64_data, $file_path) {
    // 去掉 base64 数据中的文件类型信息
    $base64Data = str_replace('data:image/jpeg;base64,', '', $base64Data);
    $base64Data = str_replace('data:image/png;base64,', '', $base64Data);
    // 将base64数据解码为图像数据
    $image_data = base64_decode($base64_data);
    // 创建输出文件
    $file = fopen($file_path, 'wb');
    // 将图像数据写入文件
    $bytes_written = fwrite($file, $image_data);
    // 关闭文件
    fclose($file);
    
    if($bytes_written !== false){
       return true;
    }else{
       return false;
    }
}
 // 示例用法
$base64_data = "这里替换为您的Base64数据";
$file_path = "这里替换为您想要保存图片的文件路径";
base64_to_image($base64_data, $file_path);

这段代码实现了将Base64编码的图像数据转换为图像文件的功能。以下是代码的步骤解释:

  1. 首先,传入两个参数:$base64Data(Base64编码的图像数据)和$outputFile(输出文件路径)。
  2. 使用str_replace函数去掉$base64Data中的文件类型信息,将'image/jpeg;base64,''image/png;base64,'替换为空字符串,得到纯净的Base64数据。
  3. 使用base64_decode函数将纯净的Base64数据解码为图像数据。
  4. 使用fopen函数创建一个以二进制写入模式打开的文件句柄$file,用于写入图像数据。
  5. 使用fwrite函数将图像数据写入文件。
  6. 使用fclose函数关闭文件句柄。
  7. 成功返回 true, 失败返回 false.

扩展:

图像文件类型信息有哪些?

常见的图像文件类型信息包括:

  • JPEG(.jpg、.jpeg):一种常用的有损压缩格式,适用于存储照片和彩色图像。
  • PNG(.png):一种无损压缩格式,适用于存储图标、透明图像和图形等。
  • GIF(.gif):一种支持动画的图像格式,适用于简单的动画和图形。
  • BMP(.bmp):一种无压缩的图像格式,适用于存储原始图像数据。
  • TIFF(.tiff、.tif):一种多页和高质量图像格式,适用于印刷和出版等领域。
  • SVG(.svg):一种矢量图像格式,适用于网页和可缩放图形。
  • WEBP(.webp):一种谷歌开发的图像格式,具有较高的压缩率和图像质量。
  • ICO(.ico):一种用于存储图标的文件格式,常用于Windows操作系统。
    这只是一些常见的图像文件类型,还有其他少见或特定用途的图像文件类型。

使用 file_put_contents() 将解码后图像的二进制数据写入文件,这样得来的图像文件无法正常查看。使用 fwrite() 写入文件操作后的图片文件是正常的,请分析下原因

如果使用 file_put_contents() 函数将解码后的图像二进制数据直接写入文件,有时候可能会导致无法正常查看的问题。这可能是由于 file_put_contents() 函数默认以文本模式写入数据,导致在写入过程中进行了一些文本处理,从而导致图像数据损坏。

相比之下,使用 fwrite() 函数进行二进制写入操作可以避免这个问题。fwrite() 函数以二进制模式将数据直接写入文件,不会进行额外的文本处理,因此适用于写入图像数据。

以下是使用 fwrite() 函数进行图像数据写入的示例代码:

<?php

// 原始的 base64 数据
$base64Data = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAIAAgADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQ';

// 去掉 base64 数据中的文件类型信息
$base64Data = str_replace('data:image/jpeg;base64,', '', $base64Data);

// 将 base64 数据解码
$imageData = base64_decode($base64Data);

// 检查是否解码成功
if ($imageData !== false) {
  // 写入文件
  $filename = 'image.jpg';
  $fileHandle = fopen($filename, 'wb'); // 以二进制模式打开文件
  if ($fileHandle !== false) {
    fwrite($fileHandle, $imageData);
    fclose($fileHandle);
    echo '文件写入成功!';
  } else {
    echo '无法打开文件!';
  }
} else {
  echo '无法解码 base64 数据!';
}

?>

在这个示例中,我们使用 fopen() 函数以二进制模式打开文件,并将返回的文件句柄传递给 fwrite() 函数进行写入操作。最后,记得使用 fclose() 函数关闭文件句柄。

使用 fwrite() 函数进行二进制写入操作可以确保图像数据不会被误处理,从而生成正常的图像文件。

原文链接: https://baijiahao.baidu.com/builder/preview/s?id=1769990005390742652

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要将Base64编码的字符串换为图片,您可以使用编程语言中的Base64解码器和适当的图像处理库。以下是Python的示例代码: ```python import base64 from PIL import Image from io import BytesIO # 将base64编码的字符串换为二进制数据 base64_string = "your base64 encoded string" image_data = base64.b64decode(base64_string) # 将二进制数据换为图像 img = Image.open(BytesIO(image_data)) # 展示图像 img.show() ``` 请注意,上述代码需要您安装Python的Pillow库(即`PIL`库的替代品),它用于加载图像数据并创建图像对象。如果您只需要保存图像而不需要显示它,请使用以下代码替换`img.show()`: ```python # 将图像保存到文件 img.save("image.png") ``` ### 回答2: 将base64换为图片的过程需要以下几个步骤: 1. 首先,获取到需要换的base64字符串。这个字符串通常以"data:image/png;base64,"开头,后面跟着具体的图片数据。 2. 接下来,我们需要将这个字符串中的前缀"data:image/png;base64,"去掉,只留下具体的图片数据部分。 3. 然后,将留下的图片数据进行解码,得到一个字节数组。 4. 最后,将字节数组转换成图片文件的形式,并保存到本地或者展示在页面上。 在具体的编程实现中,我们可以借助Base64解码库来进行解码操作,以及使用相关的编程语言提供的API来完成保存或展示图片的操作。 ### 回答3: 将base64字符串换为图片的过程可以通过以下步骤完成: 1. 首先,我们需要导入相关的库和模块,比如Python中的base64和PIL库。可以使用以下代码导入: ```python import base64 from PIL import Image ``` 2. 接下来,我们需要获取base64字符串并解码。假设我们已经获得了一个名为base64_str的base64字符串,可以使用以下代码将其解码成二进制数据: ```python image_data = base64.b64decode(base64_str) ``` 3. 接着,我们可以将解码后的二进制数据换为图片对象。可以使用PIL库中的Image.open()方法将二进制数据换为图片对象: ```python image = Image.open(BytesIO(image_data)) ``` 4. 最后,我们可以保存这张图片到本地硬盘中。可以使用Image对象的save()方法将图片保存到指定的路径上: ```python image.save('image.jpg') ``` 完整的代码示例: ```python import base64 from PIL import Image from io import BytesIO def base64_to_image(base64_str): image_data = base64.b64decode(base64_str) image = Image.open(BytesIO(image_data)) image.save('image.jpg') base64_str = "..." base64_to_image(base64_str) ``` 以上是将base64字符串换为图片的步骤及代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

witkey_ak9896

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值