[英]resize image in openpyxl
我正在尝试以 PIL 样式缩放图像,以便可以保持纵横比。 看来 openpyxl 图像没有 resize 属性。 我收到错误“AttributeError: 'Image' object has no attribute 'resize'”。 如果我使用 PIL 来调整大小,那么我会在添加图像“UnboundLocalError:分配前引用的局部变量‘rel’”时出错。 有没有办法重新缩放图像,我正在尝试这样做。
import openpyxl
import PIL
from PIL import ImageGrab
#from PIL import Image
from openpyxl.drawing.image import Image
image_scale=2
column_start=3
row_start=3
def screen_capture():
img=ImageGrab.grab()
img.save('test.jpg','JPEG')
def screen_scaling():
image_scale=3
img = Image('test.jpg')
img = img.resize((int(img.size[0]/image_scale), int(img.size[1]/image_scale)),PIL.Image.ANTIALIAS)
img.save('test.jpg','JPEG')
wb = openpyxl.Workbook()
ws = wb.active
screen_capture()
screen_scaling()
img1=Image('test.jpg')
img1.anchor = ws.cell(row=row_start, column=column_start).coordinate
ws.add_image(img1)
wb.save('Save_test_data.xlsx')
wb.close()
创建文件指针fp,可以通过对get请求获取的image binary调用BytesIO获取,也可以直接打开文件路径获取。
用pillow打开这个文件指针得到PILImage图像对象,用它的resize函数进行缩放,
手动为缩放后的图像对象分配一个文件指针,并使用它来生成一个新的 XLImage 图像对象
调用openpyxl的add_image函数不会像你一样报错。
from openpyxl import Workbook from openpyxl.drawing.image import Image as XLImage from PIL import Image as PILImage from io import BytesIO fp = BytesIO(imageBytes) fp.seek(0) img = PILImage.open(fp) resizedImg = img.resize(size) resizedImg.fp = fp resizedImg = XLImage(resizedImg) ws.add_image(resizedImg,"A1")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.