OCR-PIL.Image与Base64 String的互相转换

2023-05-16

1. 基本环境

  • py2: python2.7.13
  • py3: python3.6.2
  • PIL: pip(2/3) install pillow, PIL库已不再维护,而pillow是PIL的一个分支,如今已超越PIL

2. Convert PIL.Image to Base64 String

  • py2 :先使用CStringIO.StringIO把图片内容转为二进制流,再进行base64编码
# -*- coding: utf-8 -*-

import base64
from cStringIO import StringIO

# pip2 install pillow
from PIL import Image


def image_to_base64(image_path):
    img = Image.open(image_path)
    output_buffer = StringIO()
    img.save(output_buffer, format='JPEG')
    binary_data = output_buffer.getvalue()
    base64_data = base64.b64encode(binary_data)
    return base64_data
  • py3:python3中没有cStringIO,对应的是io,但却不能使用io.StringIO来处理图片,它用来处理文本的IO操作,处理图片的应该是io.BytesIO
import base64
from io import BytesIO

# pip3 install pillow
from PIL import Image

# 若img.save()报错 cannot write mode RGBA as JPEG
# 则img = Image.open(image_path).convert('RGB')
def image_to_base64(image_path):
    img = Image.open(image_path)
    output_buffer = BytesIO()
    img.save(output_buffer, format='JPEG')
    byte_data = output_buffer.getvalue()
    base64_str = base64.b64encode(byte_data)
    return base64_str

3. Convert Base64 String to PIL.Image

  • py2:
# -*- coding: utf-8 -*-

import re
import base64
from cStringIO import StringIO

from PIL import Image


def base64_to_image(base64_str, image_path=None):
    base64_data = re.sub('^data:image/.+;base64,', '', base64_str)
    binary_data = base64.b64decode(base64_data)
    img_data = StringIO(binary_data)
    img = Image.open(img_data)
    if image_path:
        img.save(image_path)
    return img
  • py3:
import re
import base64
from io import BytesIO

from PIL import Image


def base64_to_image(base64_str, image_path=None):
    base64_data = re.sub('^data:image/.+;base64,', '', base64_str)
    byte_data = base64.b64decode(base64_data)
    image_data = BytesIO(byte_data)
    img = Image.open(image_data)
    if image_path:
        img.save(image_path)
    return img

4. 参考网址

[1] https://stackoverflow.com/questions/16065694/is-it-possible-to-create-encodeb64-from-image-object

[2] https://stackoverflow.com/questions/31826335/how-to-convert-pil-image-image-object-to-base64-string

[3] https://stackoverflow.com/questions/26070547/decoding-base64-from-post-to-use-in-pil

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OCR-PIL.Image与Base64 String的互相转换 的相关文章

  • 当将utf-8编码的字符串从字节转换为字符时,计算机如何知道字符在哪里结束?

    给定一个以 UTF 8 编码的 Unicode 字符串 它只是内存中的字节 如果计算机想要将这些字节转换为其相应的 Unicode 代码点 数字 它如何知道一个字符在哪里结束 另一个字符在哪里开始 有些字符用 1 个字节表示 有些字符最多用
  • 将由空格分隔的整数字符串更改为 int 列表[重复]

    这个问题在这里已经有答案了 我该如何做类似的东西 x 1 2 3 45 87 65 6 8 gt gt gt foo x 1 2 3 45 87 65 6 8 我完全陷入困境 如果我按索引执行此操作 那么超过 1 位数字的数字将被分解 请帮
  • 为什么 C#/.NET 字符串带有长度前缀并以 null 结尾?

    看完之后空终止字符串的基本原理是什么 https stackoverflow com questions 4418708 whats the rationale for null terminated strings和一些类似的问题 我发现
  • 为什么 String 类扩展了 Object

    看着String类声明 你可以看到它扩展了Object class public final class String extends Object implements Serializable Comparable
  • 如何使Python格式的浮点数具有一定数量的有效数字?

    我希望我的 Python 2 4 3 输出数字具有特定的格式 具体来说 如果数字是有效数字 6 位有效数字 则仅输出 6 位有效数字 A 显示了 Python 如何编写浮点数 B 显示了我希望它们如何书写 我怎样才能让Python以这种方式
  • 是否可以基于正则表达式模式生成示例字符串?

    在我的应用程序中 用户可以在文本框中输入他自己的正则表达式模式 以便他可以强制另一个用户 文本框进行特定输入 用户是否可以看到与他输入的正则表达式匹配的字符串示例 例如 如果他要输入 A Z 2 它会生成一个像 XX 向用户表明他只能输入两
  • 如何在Android中将位图转换为PNG,然后转换为base64?

    正如标题所暗示的 我试图让我的 Android 应用程序的用户从他的设备中选择一个图像 完成 然后我想缩小图像 完成 将图像压缩 转换为 png 并发送它作为 Base64 字符串发送给 API 所以我目前调整图像大小 如下所示 optio
  • 从数组中提取值并将其转换为字符串的最佳方法是什么(允许 ES6)?

    我正在尝试采用这样的数组 location Id 000 000 Name Foo Id 000 001 Name Bar etc 提取 Id 并将它们组合成单个字符串 同时在每个值前面附加一个静态字符串 myId 的最有效 最干净的方法是
  • BIRT 不显示 base64 编码的图像

    我想将图像包含到 BIRT 报告中 图像应由 XML 数据源 base64 编码 给出 但XML数据源不支持Blob数据类型 我找到了一个很好的答案这个 BIRT 问题 https stackoverflow com questions 2
  • 无需画布,用纯 JS 生成图像

    如何在没有画布的情况下用纯 JavaScript 无外部库 从像素数组生成 绘制图片 我尝试以URI形式生成图像但没有成功 图片格式不容易快速理解和实现 BMP 数据URI 您可以使用以下函数生成 BMP 位图 dataURI 24 位的
  • 具有多行值的 PEP8 多行字典

    我使用 Black for Python 它符合 PEP8 https github com psf black the black code style 它删除两行长值字符串的第二行的缩进 mydict key0 value0 key1
  • 有没有更简单的方法来分割/重建字符串?

    目前我正在使用String split 像这样 String tmp props get i getFullName split String name for int j 1 j lt tmp length j if j gt 1 nam
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • Java:ImageIcon 与 Image 的区别

    谁能以菜鸟的方式向我解释一下两者之间有什么区别图像图标 and ImageJava 中的类 对象 谢谢 它们的性质和应用是不同的 Image http docs oracle com javase 6 docs api java awt I
  • gcc 没有小字符串优化吗?

    Most std string实现 包括 GCC 使用小字符串优化 例如 有一个answer https stackoverflow com a 21710033 2640636讨论这个 今天 我决定检查我编译的代码中的字符串在什么时候被移
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用

随机推荐