zoukankan      html  css  js  c++  java
  • python PIL的Image.resize()和Image.thumbnail()函数的区别

    欢迎关注WX公众号:【程序员管小亮】

    Image.resize()函数用于修改图片的尺寸。

    Image.thumbnail()函数用于制作当前图片的缩略图。

    • resize() 函数是修改图片的size, resample参数传入采样算法, 一般使用高质量缩放的Image.LANCZOS参数。

    • thumbnail() 函数是制作当前图片的缩略图, 参数size指定了图片的最大的宽度和高度。

    Image.resize

    from PIL import Image
    
    img2 = Image.open('./1.jpg')
    print("初始尺寸",img2.size)
    img2.resize((128,128))
    print("Image.resize",img2.size)
    
    # 初始尺寸 (500, 336)
    # Image.resize (500, 336)
    

    Image.thumbnail

    from PIL import Image
    
    img = Image.open('./1.jpg')
    print("初始尺寸",img.size)
    img.thumbnail((128,128))
    print("默认缩放NEARESET",img.size)
    img.thumbnail((127,127),Image.BILINEAR)
    print("BILINEAR",img.size)
    img.thumbnail((126,126),Image.BICUBIC)
    print("BICUBIC",img.size)
    img.thumbnail((125,125),Image.ANTIALIAS)
    print("ANTIALIAS",img.size)
    
    # 初始尺寸 (500, 336)
    # 默认缩放NEARESET (128, 86)
    # BILINEAR (127, 85)
    # BICUBIC (126, 84)
    # ANTIALIAS (125, 83)
    

    差别

    细心的同学应该发现了 Image.thumbnail 之后的图片出现“设定大小和输出大小不一致”的这个情况,而 Image.resize 就不是这样的,为什么会这样呢?这要从两个函数各自的特性说起:

    这两个函数都是对图片进行缩放,但是存在区别的:

    • resize()函数会返回一个Image对象, thumbnail()函数返回None

    • resize()中的size参数直接设定了resize之后图片的规格, 而thumbnail()中的size参数则是设定了x/y上的最大值. 也就是说, 经过resize()处理的图片可能会被拉伸, 而经过thumbnail()处理的图片不会被拉伸。

    • thumbnail()函数内部调用了resize(), 可以认为thumbnail()是对resize()的一种封装。

    from PIL import Image
    
    img = Image.open('./1.jpg')
    print("thumbnail前的尺寸", img.size)
    img.thumbnail((128, 128))
    # img3 = thumbnail.thumbnail((128,128))
    # print("thumbnail后的尺寸", img3.size)
    # AttributeError: 'NoneType' object has no attribute 'size'
    img.save("thumbnail.jpg")
    img_thumbnail = Image.open('./thumbnail.jpg')
    print("thumbnail后的尺寸", img_thumbnail.size)
    img_thumbnail.show()
    
    print('* -' * 15)
    
    img2 = Image.open('./1.jpg')
    print("resize前的尺寸", img2.size)
    img2 = img2.resize((128, 128))
    img2.save("resized.jpg")
    img_resize = Image.open('./resized.jpg')
    print("resize后的尺寸", img_resize.size)
    img_resize.show()
    
    # thumbnail前的形状 (500, 336)
    # thumbnail后的形状 (128, 86)
    # * -* -* -* -* -* -* -* -* -* -* -* -* -* -* -
    # resize前的形状 (500, 336)
    # resize后的形状 (128, 128)
    

    原始图片
    在这里插入图片描述
    thumbnail后的图片:
    在这里插入图片描述
    resize后的图片
    在这里插入图片描述

    • 可以看出thumbnail后的图片还是原有的宽长比例,而resize后的图片就是我们设置的比例了——正方形;

    • 可以看出thumbnail返回的是None,而resize返回的就是图片。

    img.thumbnail((128, 128))
    # img3 = thumbnail.thumbnail((128,128))
    # print("thumbnail后的尺寸", img3.size)
    # AttributeError: 'NoneType' object has no attribute 'size'
    img.save("thumbnail.jpg")
    
    img2 = img2.resize((128, 128))
    img2.save("resized.jpg")
    

    python课程推荐。
    在这里插入图片描述

  • 相关阅读:
    一分钟认识:Cucumber框架(一)
    迭代=冲刺?
    Nresource服务之接口缓存化
    58集团支付网关设计
    服务治理在资源中心的实践
    资源中心——连接池调优
    4种常用的演讲结构: 黄金圈法则结构、PREP结构、时间轴结构、金字塔结构
    微服务时代,领域驱动设计在携程国际火车票的实践
    Sentinel -- FLOW SLOT核心原理篇
    管理篇-如何跨部门沟通?
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302774.html
Copyright © 2011-2022 走看看