• 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课程推荐。
    在这里插入图片描述

  • 相关阅读:
    opencv+python实时人脸检测、磨皮
    opencv人脸检测
    均值模糊、中值模糊、自定义模糊
    双边滤波
    表面模糊
    水纹滤镜
    爬取https网站
    字符串、数组、切片、map
    tcpdump抓包和Wireshark解包
    iptables详解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302774.html
Copyright © 2020-2023  润新知