python外库--pillow

1. 作用

图像处理库

2. 操作

from PIL import Image # 引入Image类

# 创建一个新的图片
def img_create(outfile, mode='RGB', size=(100, 100), color='red'):
    new_img= Image.new(mode, size, color) # 创建一个新的Image实例
    new_img.save(outfile)

# 展示图片
def img_open(infile):
    with Image.open(infile) as im: # 读取图片,读取不成功抛出IOError
        print(im.format, im.size, im.mode) # 图片格式, 图片像素, 图片模式(一般RGB)
        im.show() # debian下不管用,需要安装xv

# 读写图片
def img_save(infile, outfile):
    try:
        Image.open(infile).save(outfile) # 打开图片并保存为另外的格式
        # open时,pillow获取文件信息如format、mode,余下数据需要时出处理
    except IOError:
        print('connot convert {}'.format(infile))

# 转换模式 mode
def img_convert(infile, outfile, mode):
    with Image.open(infile) as im:
        im_copy = im.copy()
        im_copy.convert(mode).save(outfile)
        # mode参数: 1\L\P\RGB\RGBA\CMYK\YCbCr\LAB\HSV\I\F

# 缩略图
def img_thumbnail(infile, outfile, size=(100, 200)):
    with Image.open(infile) as im:
        im.thumbnail(size)
        im.save(outfile)

# 复制图片
def img_copy(infile, outfile):
    with Image.open(infile) as im:
        im.copy().save(outfile)

# 剪裁图片
def img_crop(infile, outfile, size=(100, 100, 400, 400)):
    with Image.open(infile) as im:
        im.crop(size).save(outfile) # size=(左, 顶, 右, 底),左上角为坐标原点,
        # (100, 100, 400, 400) 表示300*300的像素,就是右-左, 底-顶

# 粘贴图片
def img_paste(infile, outfile, size=(200, 200, 400, 400)):
    with Image.open(infile) as im:
        im_crop = im.crop(size)
        crop_width, crop_height = im_crop.size
        width, height = im.size
        im_copy = im.copy()
        
        for left in range(0, width, crop_width):
            for top in range(0, height, crop_height):
                im_copy.paste(im_crop, (left, top))
        im_copy.save(outfile)

# 调整图片大小
def img_resize(infile, outfile, size=(200, 400), expand=True):
    with Image.open(infile) as im:
        im.resize(size, expand).save(outfile) # 参数expand=True适应原图片

# 翻转图片
def img_transpose(infile, outfile, flip_point): # flip_point为翻转参数
    with Image.open(infile) as im:
        im.transpose(flip_point).save(outfile)
        # 参数flip_point : 
        # Image.ROTATE_90/180/270 类似rotate()没有性能差别。
        # Image.FLIP_LEFT_RIGHT
        # Image.FLIP_TOP_BUTTOM


# 旋转图片
def img_rotate(infile, outfile, size=90):
    with Image.open(infile) as im:
        im.rotate(size).save(outfile)

# 移动图片
def img_roll(infile, outfile, delta):
    with Image.open(infile) as im:
        image = im.copy() # 复制图片
        x, y = image.size

        delta = delta % x # 防止delta比x大
        if delta == 0: 
            image.save(outfile)
            return

        part1 = image.crop((0, 0, delta, y))
        part2 = image.crop((delta, 0, x, y))
        image.paste(part2, (0, 0, x - delta, y))
        image.paste(part1, (x - delta, 0, x, y))
        image.save(outfile)

from PIL import ImageFilter
# 图片过滤
def img_filter(infile, outfile, filter_point): # filter_point模糊模式
    with Image.open(infile) as im:
        im.filter(filter_point).save(outfile)
        # 参数filter_point参照pillow文档ImageFileter

def img_point(infile, outfile):
    with Image.open(infile) as im:
        im_point = im.point(lambda i: i * 2) # 高级函数,日,类似Map
        im_point.save(outfile)

###要进行图案、文字的绘制,可使用ImageDraw###

if __name__ == '__main__':
    # img_create('timg_new.jpeg', mode='RGB', size=(100, 100), color='blue')
    # img_open('timg_new.jpeg')
    # img_save('timg.jpeg', 'timg_conv.png')
    # img_convert('timg.jpeg', 'timg_convert.jpeg', 'L')
    # img_thumbnail('timg.jpeg', 'timg_thum.jpeg', size=(100, 200))
    # img_copy('timg.jpeg', 'timg_copy.jpeg')
    # img_crop('timg.jpeg', 'timg_crop.jpeg', size=(100, 100, 400, 400))
    # img_paste('timg.jpeg', 'timg_past.jpeg', size=(200, 200, 400, 400))
    # img_resize('timg.jpeg','timg_resi.jpeg', size=(200, 400))
    # img_transpose('timg.jpeg', 'timg_righ.jpeg', Image.FLIP_LEFT_RIGHT)
    # img_transpose('timg.jpeg', 'timg_bott.jpeg', Image.FLIP_TOP_BOTTOM) 
    # img_rotate('timg.jpeg', 'timg_rota.jpeg', size=90)
    # img_roll('timg.jpeg', 'timg_roll.jpeg', 500)
    # img_filter('timg.jpeg', 'timg_filt.jpeg', ImageFilter.EMBOSS)
    img_point('timg.jpeg', 'timg_poin.jpeg')


3. 文档

pillow文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容