【问题标题】:resize image in openpyxl在openpyxl中调整图像大小
【发布时间】:2020-01-09 15:44:24
【问题描述】:

我正在尝试以 PIL 样式缩放图像,以便保持纵横比。看来 openpyxl 图像没有调整大小属性。我收到错误“AttributeError:'Image' 对象没有属性'resize'”。如果我使用 PIL 来调整大小,那么在添加图像“UnboundLocalError: local variable 'rel' referenced before assignment”时会出错。 有没有办法重新缩放图像,我正在尝试这样做。

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()

【问题讨论】:

    标签: python waveform pyvisa


    【解决方案1】:
    1. 创建一个文件指针fp,可以在get请求得到的图片二进制上调用BytesIO获取,也可以直接打开文件路径获取。

    2. 用枕头打开这个文件指针得到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")
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2022-08-17
      • 2010-11-20
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多