PIL.Image与Base64 String的互相转换

news/2024/7/9 20:15:54

https://www.jianshu.com/p/2ff8e6f98257

 

 

PIL.Image与Base64 String的互相转换

96
mona_alwyn
2018.01.18 19:02* 字数 281 阅读 39评论 0

0.环境

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

1.Convert PIL.Image to Base64 String

  • py2 :
    先使用CStringIO.StringIO把图片内容转为二进制流,再进行base64编码
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 

2. Convert Base64 String to PIL.Image

要注意的是图片内容转化所得的Base64 String是不带有头信息/html标签(data:image/jpeg;base64,)的,这是在h5使用的时候需要添加用来声明数据类型的,如果拿到的Base64 String带了这个标签的话,需要处理一下,这里从参考的博客中找了一种正则处理方法。

  • py2:
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 

3. 参考

https://stackoverflow.com/questions/16065694/is-it-possible-to-create-encodeb64-from-image-object
https://stackoverflow.com/questions/31826335/how-to-convert-pil-image-image-object-to-base64-string
https://stackoverflow.com/questions/26070547/decoding-base64-from-post-to-use-in-pil

转载于:https://www.cnblogs.com/changbaishan/p/8618035.html


http://www.niftyadmin.cn/n/4030653.html

相关文章

私企也有点儿干不下去,再次离职——北漂18年(35)

上次讲到山西项目投标失败,回到北京之后我心里有些过意不去,公司老板倒没说啥。此事也埋下了之后离开这家私企的种子,并不是因为平台太小,而是因为两个老板根本没想明白公司要往哪个方向发展,如何走下去。 消磨意志的公…

http tcp ip 模型解释 ngix expoll select apache

1 httpC/sClient: User Agent,http requestServer: web server,http responserequeset/responseASCII: html (http) MIME: Multipurpose Internet Mail Extensions 非文本 编码成为 文本 展现给客户端web object web resource (URL)css javascript p_w_picpaths html 独立取回内…

数据库事务的四大特性讲解

我们都知道数据事务有四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。所谓事务,它是一个操作序列,这…

外企!外企!我来了!——北漂18年(36)

离开ZB之后,我又开始了四处投简历过工作的日子,机缘巧合进了一家外企。里面发生的故事,很也值得讲讲。找工作就是工作2002年再次开始找工作,四处投简历时已经相对有经验,也读了一些求职方面的书(后来我自己…

外企也不好混,开除了一个销售——北漂18年(37)

在公司角落里坐了一个星期,每天看LilyG给的几个售前方案。开始觉得比较高大上,毕竟是CMM,看了三天把不知道啥意思的词儿搞定,比如:能力成熟度,然后看了几遍,想明白了也没啥。我跟直属领导LilyG的…

PAT L2-007.家庭房产

L2-007. 家庭房产 时间限制内存限制代码长度限制判题程序作者400ms65536kB8000BStandar 陈越给定每个人的家庭成员和其自己名下的房产&#xff0c;请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;<1000…

Apache Spark 1.5.0正式发布

2019独角兽企业重金招聘Python工程师标准>>> Spark 1.5.0是1.x线上的第6个发行版。这个版本共处理了来自230contributors和80机构的1400个patches。Spark 1.5的许多改变都是围绕在提升Spark的性能、可用性以及操作稳定性。Spark 1.5.0焦点在Tungsten项目&#xff0c…

不是更快更强,而是更加自如——2015年终总结

此前&#xff0c;我一直感觉这个世界有些不对劲儿&#xff0c;2015年9月之后&#xff0c;这种感觉基本消失了。我确定了一些之前自认为是正确&#xff0c;但是别人多数不会干的事&#xff0c;比如&#xff1a;在这个急躁的世界上无私的帮助别人&#xff1b;切断跟不靠谱但是所谓…