如何在不保存到文件的情况下获取pil对象的md5?
imq.save('out.png')
hash = hashlib.md5(open('out.png','rb').read()).hexdigest()
Run Code Online (Sandbox Code Playgroud) 我正在尝试从剪贴板获取图像,并且想将该图像添加到 python-pptx 中。我不想将图像保存在磁盘中。我已经尝试过这个:
from pptx import Presentation
from PIL import ImageGrab,Image
from pptx.util import Inches
im = ImageGrab.grabclipboard()
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
left = top = Inches(1)
pic = slide.shapes.add_picture(im, left, top)
prs.save('PPT.pptx')
Run Code Online (Sandbox Code Playgroud)
但是出现这个错误
File "C:\Python27\lib\site-packages\PIL\Image.py", line 627, in __getattr__
raise AttributeError(name)
AttributeError: read
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
编辑:这个问题已被标记为重复?我的问题显然是关于优化这个过程,而不是如何做到这一点.我甚至提供了代码来证明我已经找到了后者.互联网大厅监视器甚至在标记之前读过这些问题吗?
我有以下代码块来使用PIL压缩图像,直到所述图像具有一定的大小.
from PIL import Image
import os
def compress(image_file, max_size, scale):
while os.path.getsize(image_file) > max_size:
pic = Image.open(image_file)
original_size = pic.size
pic = pic.resize((int(original_size[0] * scale),
int(original_size[1] * scale)),
Image.ANTIALIAS)
pic.save(image_file, optimize=True, quality=95)
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我os.path.getsize(image_file)
用来获取图像的大小.但是,这意味着每次循环运行时都必须保存文件pic.save(image_file, optimize=True, quality=95
.
这个过程需要很长时间.
有没有办法通过某种方式获得PIL
Image
对象中图像的大小来优化它pic
?
我在内存中有一个我创建的图像(使用 numpy 和 PIL),我想以编程方式将其附加到创建的电子邮件中。我知道我可以将其保存到文件系统,然后重新加载/附加它,但这似乎效率低下:有没有办法将其通过管道传输到 mime 附件而不保存?
保存/重新加载版本:
from PIL import Image
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
...some img creation steps...
msg = MIMEMultipart()
img_fname = '/tmp/temp_image.jpg'
img.save( img_fname)
with open( img_fname, 'rb') as fp:
img_file = MIMEImage( fp.read() )
img_file.add_header('Content-Disposition', 'attachment', filename=img_fname )
msg.attach( img_file)
...add other attachments and main body of email text...
Run Code Online (Sandbox Code Playgroud) 我有一个png
应该转换为jpg
并保存到的文件gridfs
,我使用python的PIL
lib加载该文件并执行转换工作,问题是我想将转换后的图像存储到MongoDB Gridfs中,在保存过程中,我可以只需使用该im.save()
方法。所以我用a StringIO
来保存临时文件,但是不起作用。
这是代码片段:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PIL import Image
from pymongo import MongoClient
import gridfs
from StringIO import StringIO
im = Image.open("test.png").convert("RGB")
#this is what I tried, define a
#fake_file with StringIO that stored the image temporarily.
fake_file = StringIO()
im.save(fake_file,"jpeg")
fs = gridfs.GridFS(MongoClient("localhost").stroage)
with fs.new_file(filename="test.png") as fp:
# this will not work
fp.write(fake_file.read())
# vim:ai:et:sts=4:sw=4:
Run Code Online (Sandbox Code Playgroud)
我对python的IO
机制非常了解,如何使这项工作有效?
我发现如何使用 FastAPI 将 numpy 数组作为图像返回?然而,我仍然在努力展示图像,它看起来只是一个白色的方块。
io.BytesIO
我像这样读入一个数组:
def iterarray(array):
output = io.BytesIO()
np.savez(output, array)
yield output.get_value()
Run Code Online (Sandbox Code Playgroud)
在我的端点中,我的回报是StreamingResponse(iterarray(), media_type='application/octet-stream')
当我留空media_type
以推断时,会下载一个 zip 文件。
如何将数组显示为图像?
我正在尝试制作一个 REST API,我遇到了这行代码-
_, img_encoded = cv2.imencode('.jpg', image)
Run Code Online (Sandbox Code Playgroud)
这是做什么的?不幸的是,我无法在 m 项目中使用 OpenCV,那么有什么方法可以使用 PIL 实现同样的效果呢?提前致谢!