当前位置: 首页 > news >正文

python PIL图片转base64字符串

以下是使用Python PIL库将图片转换为Base64字符串的详细步骤和代码示例:

方法一:直接读取文件(无需图像处理)

import base64# 读取图片二进制数据
with open("input.jpg", "rb") as file:img_data = file.read()# 转换为Base64字符串
base64_str = base64.b64encode(img_data).decode('utf-8')# 输出结果(可选Data URL格式)
data_url = f"data:image/jpeg;base64,{base64_str}"
print(data_url)

方法二:使用PIL处理后转换(推荐)

from PIL import Image
import io
import base64# 1. 打开图片文件
img = Image.open("input.jpg")# 2. (可选)图像处理示例
img = img.resize((200, 200))  # 调整尺寸
img = img.convert("RGB")      # 转换模式(如去除透明度)# 3. 创建内存缓冲区
buffer = io.BytesIO()# 4. 保存处理后的图片到缓冲区
img.save(buffer, format="PNG")  # 可指定格式:JPEG/PNG等# 5. 获取二进制数据并编码
base64_str = base64.b64encode(buffer.getvalue()).decode('utf-8')# 6. 生成完整Data URL(可选)
data_url = f"data:image/png;base64,{base64_str}"
print(data_url)

关键说明:

  1. 安装依赖:需先安装Pillow库

    pip install Pillow
    
  2. 格式选择

    • format参数需与文件扩展名匹配(如保存为PNG格式应使用.png扩展名)
    • 常见格式:JPEG(有损压缩)、PNG(无损压缩)、WEBP(现代格式)
  3. Data URL

    • 格式为:data:[MIME类型];base64,[Base64字符串]
    • 示例:data:image/png;base64,iVBORw0KGgoAAAAN...
  4. 应用场景

    • 网页直接显示图片:<img src="{data_url}">
    • API传输二进制数据
    • 数据库存储图片

常见问题处理:

  1. 透明通道问题

    img = img.convert("RGBA")  # 保留透明度
    
  2. 质量调整(JPEG)

    img.save(buffer, format="JPEG", quality=85)  # 质量参数1-100
    
  3. 大文件优化

    # 分块读取处理
    from PIL import ImageFile
    ImageFile.LOAD_TRUNCATED_IMAGES = True
    

建议根据实际需求选择处理方式,如需保留图片元数据可使用img.info属性获取额外信息。

http://www.dtcms.com/a/309815.html

相关文章:

  • [极客大挑战 2019]RCE ME
  • RockAI 的破壁之战:Yan 架构如何啃下“端侧炼丹”硬骨头?
  • Vue3 setup、ref和reactive函数
  • 元策联盈:深耕金融领域,赋能行业发展​
  • 【Flutter3.8x】flutter从入门到实战基础教程(四):自定义实现一个自增的StatefulWidget组件
  • 磁力搜索+磁力下载!无需解释!直接上车!
  • 工作好用小工具积累
  • EGE 流量开关 LG 518 GSP P11237
  • 异步函数被调用多次,多次处理同一个文件导致占用,如何让异步函数按顺序执行?
  • 书生浦语第五期L0G2
  • 【音视频】WebRTC 中的RTP、RTCP、SDP、Candidate
  • Ubuntu-Server-24.04-LTS版本操作系统如何关闭自动更新,并移除不必要的内核
  • C++在类的构造函数中调用另一个构造函数
  • STM32CubeIDE新建项目过程记录备忘(四)EXTI外部中断
  • 网络编程-加密算法
  • Spring Boot 异步执行方式全解析:@Async、CompletableFuture 与 TaskExecutor 对比
  • 面试题:怎么理解 OSI 参考模型(开放式系统互联参考模型) 和 TCP/IP 模型(传输控制协议 / 网际协议模型 )
  • Node.js中Buffer的用法
  • Linux中Docker Swarm介绍和使用
  • 数据结构学习基础和从包装类缓存到泛型擦除的避坑指南
  • QT初入门-界面设置
  • Metamorph、LlamaFusion、MetaQuery论文解读
  • Linux的对称多处理(SMP)机制
  • embodied复现所需docker环境配置粗略流程
  • CentOS7下同步时间的几种方式(NTP 、Chrony和systemd-timesyncd)
  • 2025年08月01日Github流行趋势
  • 注解退散!纯XML打造MyBatis持久层的终极形态
  • OCR、文档解析工具合集
  • C++ 前缀和、双指针
  • [位运算]2411. 按位或最大的最小子数组长度