zoukankan      html  css  js  c++  java
  • 使用Requests下载图片并使用openpyxl将图片写入Excel中

    之前爬取的数据,是直接把图片url放在Excel中的,或者直接下载到一个目录中,或者转存到自家服务器上,拿到新的链接。 这边收到需求要求把图片缩小到140*140直接放到Excel单元格中,操作如下。

    使用Requests下载图片

    使用Requests下载单张图片,只要将相应对象的二进制内容,二进制格式保存即可,示例如下:

    import requests
    url = 'https://www.bulgari.cn/media/catalog/product/cache/17a97ae74dcd05e3600304dfd5afbc49/3/5/356325_001.png'
    res = requests.get(url)
    file_name = url.split('/')[-1]
    with open(file_name, 'wb') as f:
        f.write(res.content)
    

    如果图片较大,为了优化性能,可以分块写入:

    ...
    with open(file_name, 'wb') as f:
        for data in res.iter_content(128):
                f.write(data)
    

    使用openpyxl,在Excel中插入图片

    使用openpyxl,可以使用sheet对象的add_image('图片文件路径或Image对象', '锚点')来在一个单元格中插入对象,使用openpyxl中的Image对象还可以设置图片尺寸。示例如下。

    from openpyxl import Workbook
    from openpyxl.drawing.image import Image
    wb = Workbook()
    sh = wb.active
    img = Image('demo.png')
    img.width, img.height=140, 140
    sh.add_image(img, 'A1')
    wb.save('demo.xlsx')
    

    保存后,打开Excel,效果如下。

    另外可以通过sh.column_dimensions['A'].width=140来设置列宽,通过 sh.row_dimensions[1].height=140来设置行高。

    完整代码

    import requests
    from openpyxl import Workbook
    from openpyxl.drawing.image import Image
    
    IMG_COL = 'A'
    
    def save_img(url):
        res = requests.get(url)
        file_name = url.split('/')[-1]
        with open(file_name, 'wb') as f:
             for data in res.iter_content(128):
                f.write(data)
        return file_name
    
    def insert_img(sh, line, file_name):
        sh.row_dimensions[line].height=140
        img = Image(file_name)
        img.width, img.height=140, 140
        sh.add_image(img, 'A1')
    
    if __name__ == "__main__":
        wb = Workbook()
        sh = wb.active
        sh.column_dimensions[IMG_COL].width=140
        url = 'https://www.bulgari.cn/media/catalog/product/cache/17a97ae74dcd05e3600304dfd5afbc49/3/5/356325_001.png'
        file_name = save_img(url)
        insert_img(sh, 1, file_name)
        wb.save('demo.xlsx')
    

    多张图片,添加循环即可。

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/superhin/p/12188265.html
Copyright © 2011-2022 走看看