• 用 PIL 写了个简单的缩略图生成程序


    最近刚刚学了简单的 PIL (Python Image Library) 的使用方法,感觉比较简单好用!结合最近我要在 web 中做缩略图的需求,写了个函数。这个程序的思路是截取源图中间一块正方形区域,然后做缩放生成缩略图。

    啥也不说了,上代码:

    #!/usr/bin/env python
    #coding=utf-8
    import Image
    import os

    def make_thumb(path, sizes=(75, 32, 16
    )):
        
    """
        缩略图生成程序 by Neil Chen
        sizes 参数传递要生成的尺寸,可以生成多种尺寸
        """
       
        
    base, ext = os.path.splitext(path
    )
        try
    :
            im = Image.open(path
    )
        except IOError
    :
            
    return
        mode = im.mode
        if mode not in ('L', 'RGB'
    ):
            if mode == 'RGBA'
    :
                
    # 透明图片需要加白色底
                alpha = im.split()[3
    ]
                bgmask = alpha.point(lambda x: 255-x
    )
                im = im.convert('RGB'
    )
                
    # paste(color, box, mask)
                im.paste((255,255,255), None, bgmask
    )
            else
    :
                im = im.convert('RGB'
    )
                
        
    width, height = im.size
        if width == height
    :
            region = im
        else
    :
            if width > height
    :
                delta = (width - height)/
    2
                box = (delta, 0, delta+height, height
    )
            else
    :
                delta = (height - width)/
    2
                box = (0, delta, width, delta+width)
               
            
    region = im.crop(box
    )
                
        
    for size in sizes
    :
            filename = base + "_" + "%sx%s" % (str(size), str(size)) +
    ".jpg"
            thumb = region.resize((size,size), Image.ANTIALIAS
    )
            thumb.save(filename, quality=100)
    # 默认 JPEG 保存质量是 75, 不太清楚。可选值(0~100)

    if __name__ == '__main__':
       
        
    make_thumb(r"c:/testimg/test.jpg"
    )
        make_thumb(r"c:/testimg/test2.jpg"
    )
        make_thumb(r"c:/testimg/a.jpg"
    )
        make_thumb(r"c:/testimg/DSCF0111.jpg"
    )
        make_thumb(r"c:/testimg/test3.jpg")



    效果:
    test6.JPG
  • 相关阅读:
    python征程1.4(初识python)
    python征程1.3(初识python)
    python征程1.2(初识python)
    python征程1.1(初识python)
    什么是servlet
    什么是JavaBean
    基于Ajax的前后端分离
    项目开发流程
    项目框架和项目架构
    Java中使用 foreach 操作数组
  • 原文地址:https://www.cnblogs.com/RChen/p/pil_thumb.html
Copyright © 2020-2023  润新知