繁体   English   中英

在 openpyxl 中调整图像大小

[英]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()
  1. 创建文件指针fp,可以通过对get请求获取的image binary调用BytesIO获取,也可以直接打开文件路径获取。

  2. 用pillow打开这个文件指针得到PILImage图像对象,用它的resize函数进行缩放,

  3. 手动为缩放后的图像对象分配一个文件指针,并使用它来生成一个新的 XLImage 图像对象

  4. 调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM