一.前言

先看效果:
原图:

处理后的图:圆角+黑边

二.原理

PIL给图片添加圆角逻辑:

  • 1.创建一个黑色透明方块,边长为圆角直径

  • 2.在黑色方块内,创建一个白色不透明圆形,半径为圆角半径

  • 3.创建一个穿白色不透明的过滤层,尺寸和原图尺寸一样,用来切割图片圆角

  • 4.把步骤2的图片切割成四个角,分别paste到步骤3的过滤层的四个角,我们得到一张过滤层

  • 5.使用Image.putalpha函数,替换原图的aplha层,这样就切割成功了。

  • 6.然后我们使用ImageDraw类在原图上画一个圆角矩形即可

三.核心API

先附上Pillow的Image Module的官方文档:
https://pillow.readthedocs.io/en/stable/reference/Image.html

img = Image.New():创建一个Image
draw = ImageDraw.Draw(img):基于一个Image来进行绘制
circle.crop(box):从图像返回一个矩形区域
alpha.paste(im, box, mask):将另一个图像粘贴到该图像中
img.putalpha(alpha):添加或替换此图像中的 alpha 层

四.源码

下面直接上代码:

from PIL import Image, ImageDraw
import osdef circle_corner(img, radii):circle = Image.new('L', (radii * 2, radii * 2), 0)  # 创建黑色方形draw = ImageDraw.Draw(circle)draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)  # 黑色方形内切白色圆形img = img.convert("RGBA")w, h = img.size#创建一个alpha层,存放四个圆角,使用透明度切除圆角外的图片alpha = Image.new('L', img.size, 255)alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))  # 左上角alpha.paste(circle.crop((radii, 0, radii * 2, radii)),(w - radii, 0))  # 右上角alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)),(w - radii, h - radii))  # 右下角alpha.paste(circle.crop((0, radii, radii, radii * 2)),(0, h - radii))  # 左下角img.putalpha(alpha)  # 白色区域透明可见,黑色区域不可见# 添加圆角边框draw = ImageDraw.Draw(img)draw.rounded_rectangle(img.getbbox(), outline="black", width=3, radius=radii)return imgif __name__ == '__main__':radii = 20  # 圆角大小filePath = 'C:/Users/Desktop/Src'outPath = 'C:/Users/Desktop/Des'for i, j, k in os.walk(filePath):for filename in k:src = filePath + "/" + filenamedes = outPath + "/" + filenameprint(src)img = Image.open(src)img = circle_corner(img, radii)img.save(des, 'png', quality=100)

Python3如何使用PIL批量给图片加圆角和黑边相关推荐

  1. 怎么批量给图片加纯色边框?

    如何给图片加纯色边框?相信很多小伙伴都觉得很简单,用ps软件给图片描边即可完成.给图片添加边框后图片会变得更美观,所以工作中经常遇见,边框有很多种,如图片边框和纯色边框.那么如何批量给图片加纯色边框呢 ...

  2. 教你怎么批量给图片加水印

    我们在日常的生活或者学习中,有些小伙伴喜欢将自己设计的图片或者摄影作品在互联网上分享发布,但发现一些图片会被别人恶意盗用,还在图片上打标签水印.这时候我们需要保护自己的知识产权,需要在图片发布前加上自 ...

  3. 如何批量给图片加边框?

    不管是在日常工作还是生活学习中,我们经常需要对图片进行处理,比如给图片加上边框,给图片加边框是一项简单的工作,只要使用PS软件就可以帮我们解决问题,相信大部分的小伙伴知道怎么操作,小编就不做详细的介绍 ...

  4. 如何快速批量给图片加logo?

    如今人们的版权意识比较强,将自己的作品上传到网上时都注重声明版权所有,所以我们可以看到很多图片上都有logo水印的存在.将logo加在图片上是水印的一种形式,PS就可以帮我们实现这个,具体方法就不做介 ...

  5. python 批量给图片加水印

    在实际工作中可能会遇到批量给图片添加水印,这些水印可能是每个图片不一样的,但是格式要统一,字体.间距,位置等,要协调.怎么实现呢? 以下是用python实现的具体步骤: 数据情况: 统一标准命名的图片 ...

  6. 使用 ffmpeg批量给图片加水印

    ffmpeg是一款强大的音视频处理软件,基于命令行运行.最近在实践中碰到要给图片加水印的问题,想到写一个.bat文件批量处理的话效率会大大提高. 代码很简单,这是我第一次使用.bat文件,故marke ...

  7. Python+OpenCV批量给图片加噪声

    利用python和opencv批量给图像加噪声(椒盐噪声.高斯噪声.随机噪声) 导入头文件 import os import cv2 import numpy as np import random ...

  8. Android图片转换类 1. Bitmap去色,转换为黑白的灰度图, 2. Bitmap图片加圆角效果

    /** * 处理图片的工具类. * */public class ImageTools { /***//** * 图片去色,返回灰度图片 * @param bmpOriginal 传入的图片 * @r ...

  9. python读取多张图片文字为表格_python批量给图片加图文水印+读取excel

    在python3.7环境实现给图片添加图片水印以及文字水印.另附python读取excel单元格内容. 利用本程序修改后可以实现,给商品sku图片批量添加水印的功能.excel操作仅测试了读取单元格内 ...

最新文章

  1. 集体终止合作 航空代理模式走投无路背后
  2. php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...
  3. 如何使用多个端口访问tomcat
  4. 分布式链路跟踪中的traceid和spanid代表什么?
  5. Spring IOC核心原理分析
  6. 利用UTL_FILE包实现文件I/O操作
  7. Python基础1(2017-07-16)
  8. c post请求网页_Python使用urllib2抓取网页
  9. 程序员们平时常逛的论坛
  10. 质量评估:如何全面评价一份数据的质量高低?
  11. web前端开发分享-css,js进阶篇
  12. Sqlmap使用教程【笔记精华整理】
  13. Wondows Sever 2003密钥【收集】
  14. Debezium报错处理系列:Creation of database history topic failed, please create the topic manually
  15. 中央企业数字化转型案例架构
  16. 激光SLAM保存pcd点云地图
  17. 字符串处理、变量初始值处理、扩展的脚本技巧、正则表达式
  18. 等待事件:Streams AQ: qmn coordinator waiting for slave to start
  19. redis使用队列进行抢购活动(秒杀)
  20. 华为路由交换精讲系列⑦:super密码配置 密码重置与破解 权限级别 [肖哥]视频课程-肖宗鹏-专题视频课程...

热门文章

  1. w7系统计算机搜索无法搜索了,Win7系统搜索功能失效不能用解决方法
  2. django oracle数据库配置,使用Oracle 11g数据库issu配置django
  3. Android测试游戏帧数的方法
  4. friendly发音_friendly是什么意思_friendly的翻译_音标_读音_用法_例句_爱词霸在线词典...
  5. yolov5环境配置
  6. c++和java的区别
  7. 10.监视SQL Server性能
  8. android studio设置工具栏,Android Studio 工具栏添加图标
  9. 全民农场服务器维修,全民农场发家致富攻略 作坊养殖不可缺
  10. BTS, BTR 指令