首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python快速做一个国庆头像

用python快速做一个国庆头像

作者头像
江米小枣
发布2021-10-20 10:29:24
3210
发布2021-10-20 10:29:24
举报
文章被收录于专栏:云前端云前端

又到了一年一度的国庆假期七天乐,互联网公司的 IT 小能手们,终于又回到久违的家中,立即变身父母的乖宝、另一半的臭宝,或是小宝们的超级奶妈奶爸;现代社会的节奏就是这样快,彷佛头一天还忙忙碌碌的对需求、过排期、写代码的生活已经恍若隔世一般了。

大部分的人的假期安排其实也不复杂,就是那句能瞬间激活小孩和狗的魔法口令 -- 出去玩!

不管是惬意的郊游、热闹的街头,还是人头攒动的景区,掏出手机咔咔一通的自拍合影是必不可少的了。

这时家里的老人可能会提出一个需求 -- 把自拍或家庭合影的手机照片做成微信头像

随着智能手机和微信在中老年群体中的普及,这样的需求往往是大概率甚至高频的,一个好的微信头像,既能彰显家庭的和睦幸福,也能在国画班、广场舞天团中收获艳羡的目光。

但一个小问题随之产生 -- 微信默认的头像处理界面,只能截取手机照片的一个正方形区域,而无法保留全部图片,这可能造成家庭合影无法完整呈现的问题。

微信默认的头像处理

要是能将手机照片自动放置到一个正方形区域中,并且用颜色相近的模糊效果填充背景,那就好了~

比如下面的照片:

原图

如果做成我们期望的效果,再加个圆形小效果,多好!

期望的效果

如果用 PS 一张张处理图片,一来太麻烦,二来大部分人也搞不来。还好这年头互联网公司中,无论是专业的程序员还是产品经理、运营、测试的同学,好像人人都会写点 SQL 或 Python 啥的,这不就成了嘛~

说干就干,请出懒人小助手 Python 君,用不了几行代码就能达到我们的效果!

新建一个 circle.py 文件:

import os
import re
import sys
from PIL import Image, ImageFilter, ImageDraw, ImageOps

首先引入了一些系统库和 PIL,这是 Python 平台最常用的图片处理工具集,算得上事实上的图像处理标准库了。

但由于 PIL 本身仅支持到 Python 2.7,我们可以直接安装叫做 pillow 的兼容版本,既支持最新的 Python 3.x,又加入了许多新特性,用下面的命令就可以安装了:

pip3 install pillow

然后来声明一个函数:

def make_circle(path, maxS = 600):
    foreImg = Image.open(path)
    if foreImg.mode in ("RGBA", "P"):
        foreImg = foreImg.convert('RGB')
    
    h,w = foreImg.size
    maxSize = max(h, w)
    imgPosi = (int((maxSize - h) / 2), int((maxSize - w) / 2))
    bgBlur = ImageFilter.GaussianBlur(radius=6.18)
    bgSize = (maxSize, maxSize)
    
    backImg = foreImg.copy()
    backImg = backImg.resize(bgSize)
    backImg = backImg.filter(bgBlur)
    backImg.paste(foreImg, imgPosi)
    
    mask = Image.new('L', bgSize, 0)
    draw = ImageDraw.Draw(mask) 
    draw.ellipse((0, 0) + bgSize, fill=255)
    
    backImg = ImageOps.fit(backImg, mask.size, centering=(0.5, 0.5))
    backImg.putalpha(mask)

    if maxSize > maxS:
        backImg = backImg.resize((maxS, maxS))
    
    return backImg

这几行简短的代码比较清晰,基本就是按我们期望的顺序处理了目标路径的图片,相关的 API 查询 pillow 的文档即可,就不过多赘述了。

file_name = sys.argv[1]
save_name = re.sub(r'(jpg|jpeg)$', 'png', file_name.lower())
img = make_circle('./' + file_name)
img.save('./circle_' + save_name)

最后几行是让程序接收命令行传入的文件名参数并执行处理函数的。

只需在终端中执行这样一条命令:

python3 circle.py 1.jpg

就能立即得到一张处理好的头像图片啦,方便又实用!

另外,在视频号“云前端”的系列视频“编程术语古典史”中,涉及希腊神话中众神的头像,也是用这个 Python 函数一键生成的哦,欢迎大家围观转发!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档