python PIL的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python PIL的问题相关的知识,希望对你有一定的参考价值。

我用im = Image.open("XXXX")读入了一张图片之后,获取了我想要的值,之后我要把这张图片删除掉,但是会报这张图片正在被使用中
有没有类似于im.close()之类的,将加载的图片资源释放掉

Image 是python的图像处理接口类,你调用 im = Image.open("XXXX") 后是生成了一个 这个类的对象 im 而这个接口类中没有对就的 close 方法 ,这个图像对象生成后 你可以使用,当你要是不用了,你可以调用 im.destroy() ,将对象销毁。你可以试试 参考技术A 我能想的的是,不用 Image.open("XXXX")读文件,因为会有之后的惰性操作,
改用ImageFile从另一个open的图片文件中读到内存里面,读完也可以删除原文件
import ImageFile
fp = open("1.png", "rb")
p = ImageFile.Parser()
while 1:
s = fp.read(1024)
if not s:
break
p.feed(s)
im = p.close()
im.save("copy.jpg")本回答被提问者和网友采纳
参考技术B 试试del im

python PIL相关操作

项目中需要用python生成二维码,这里记录一下相关PIL相关操作。

RGBA问题:

  需要将图片A粘贴到图片B上,之前没有注意透明度问题,A的背景是透明的,粘贴到B上后,A的周围是黑的。后来才发现是PIL的Image模块,调用open打开文件以后,需要convert转换为‘RGBA’模式,R:red G:green B:blue A:Alpha 色彩空间 透明度,设置一下图片的透明度即可。

 

图片的粘贴,文字的添加需要调用ImageDraw模块,首先打开背景图

img = Image.open(./test.png).convert(RGBA)
drawImg = ImageDraw.Draw(img) 

图片A粘贴到图片B上

Image.resize()函数来调整图片A的大小,然后用paste将A粘贴到B上,qr_bos为A在B上的坐标,(右上,左上,右下,左下)

drawImg.paste(img.resize((self.qr_box[2] - self.qr_box[0], self.qr_box[3] - self.qr_box[1])), self.qr_box)

在图片B上添加文字

# 获取图片宽度,字体的高度
t_p_w_3, t_p_h_3 = (self.width, 23)
# 加载字体
t_3_font = ImageFont.truetype(msyh.ttf, 23)
# 获取这段文字在图片上的长宽
t_p_w_3_t, t_p_h_3_t = drawBack.textsize(self.content_3, t_3_font)
#居中
drawBack.text(((t_p_w_3 - t_p_w_3_t) / 2, (t_p_h_3 - t_p_h_3_t) / 2), self.content_3,fill=#535256, font=t_3_font)

 

以上是关于python PIL的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python / PIL 进行多边形裁剪/剪辑

安装python 的PIL库遇到的问题

使用 Python/PIL 比较(相似)图像

新手小白求助:关于python安装PIL时的问题

python PIL相关操作

XP下python导入PIL问题