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

  • 相关阅读:
    Attach Files to Objects 将文件附加到对象
    Provide Several View Variants for End-Users 为最终用户提供多个视图变体
    Audit Object Changes 审核对象更改
    Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面
    Change Style of Navigation Items 更改导航项的样式
    Apply Grouping to List View Data 将分组应用于列表视图数据
    Choose the WinForms UI Type 选择 WinForms UI 类型
    Filter List Views 筛选器列表视图
    Make a List View Editable 使列表视图可编辑
    Add a Preview to a List View将预览添加到列表视图
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302774.html
Copyright © 2020-2023  润新知