python处理圆角图片、圆形图片的例子
发布时间:2021-06-08 15:20:15
效果图如下:
图1(头像图片剪成圆形的,其他为透明)
图2(给图片的4个角加椭圆)
以前没处理过,处理起来真是有点费力呀。
用到的模块:
import os, math
import Image
import ImageDraw
1 头像图片剪成圆形的,其他为透明
搜索了好久,没有找到比较好的方法,有个博客(不好意思,忘记博客地址了)用了一个比较诡异的方法,我试了一下,除了处理jpg图片没有格式转换,其他的都没有问题,我当时就先按照那个方法来了
def circle():
ima = Image.open("test.jpg").convert("RGBA")
size = ima.size
# 因为是要圆形,所以需要正方形的图片
r2 = min(size[0], size[1])
if size[0] != size[1]:
ima = ima.resize((r2, r2), Image.ANTIALIAS)
imb = Image.new('RGBA', (r2, r2),(255,255,255,0))
pima = ima.load()
pimb = imb.load()
r = float(r2/2) #圆心横坐标
for i in range(r2):
for j in range(r2):
lx = abs(i-r+0.5) #到圆心距离的横坐标
ly = abs(j-r+0.5)#到圆心距离的纵坐标
l = pow(lx,2) + pow(ly,2)
if l <= pow(r, 2):
pimb[i,j] = pima[i,j]
imb.save("test_circle.png")
这个方法是 计算每个像素到原点(就是图片中心点)的距离来画圆形的
2、给图片的4个角加椭圆
def circle_corder_image():
im = Image.open("test.jpg").convert("RGBA")
rad = 10 # 设置半径
circle = Image.new('L', (rad * 2, rad * 2), 0)
draw = ImageDraw.Draw(circle)
draw.ellipse((0, 0, rad * 2, rad * 2), fill=255)
alpha = Image.new('L', im.size, 255)
w, h = im.size
alpha.paste(circle.crop((0, 0, rad, rad)), (0, 0))
alpha.paste(circle.crop((0, rad, rad, rad * 2)), (0, h – rad))
alpha.paste(circle.crop((rad, 0, rad * 2, rad)), (w – rad, 0))
alpha.paste(circle.crop((rad, rad, rad * 2, rad * 2)), (w – rad, h – rad))
im.putalpha(alpha)
im.save('test_circle_corder.png')
用了这个方法后,想了一想,头像图片剪成圆形的,其他为透明,用这个方法也是可以的,于是画圆形有了下面的方法:
def circle_new():
ima = Image.open("test.jpg").convert("RGBA")
size = ima.size
r2 = min(size[0], size[1])
if size[0] != size[1]:
ima = ima.resize((r2, r2), Image.ANTIALIAS)
circle = Image.new('L', (r2, r2), 0)
draw = ImageDraw.Draw(circle)
draw.ellipse((0, 0, r2, r2), fill=255)
alpha = Image.new('L', (r2, r2), 255)
alpha.paste(circle, (0, 0))
ima.putalpha(alpha)
ima.save('test_circle.png')
虽然最后我想要的都有了,但是通过对这2个问题的研究,我看到了python 图片处理的强大,好多还值得我去学习研究。


猜你喜欢
- import turtle as tt.setup(800,600,0,0,)t.pensize(2)t.speed(1)t.color(&
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。
- 最近心血来潮加上有点闲情,动手写了第一个JavaScript版的俄罗斯方块Easy Tetris.先上Easy Tetris俄罗斯方块游戏截
- 本文实例为大家分享了python3.5绘制随机漫步图的具体代码,供大家参考,具体内容如下代码中我们定义两个模型,一个是RandomWalk.
- Mysql中的concat函数(拼接函数)概述很多时候,我们需要将不同地方获得的字符串拼接在一起,此时就需要使用CONCAT和CONCAT_
- 一、共享变量共享变量:当多个线程访问同一个变量的时候。会产生共享变量的问题。例子:import threadingsum = 0loopSu
- 由于一些读者对于960 Grid System CSS Framework的原理和使用方法比较感兴趣,暴风彬彬今天将和大家一同分享这篇关于9
- 今日一同时问我,new Date(Date(str))这段代码什么意思?我一看就晕了,一个new Date 一个Date这是什么意思?这函数
- forEach()函数从头到尾把数组遍历一遍。有三个参数分别是:数组元素,元素的索引,数组本身(如果是一个参数就是数组元素,也就是数组的值。
- Python最基本的数据结构是序列(列表/元组)。一个序列中的每个元素都分配有一个数字- 它的位置或索引。第一个索引是0,第二个
- 前言一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的。程序员在晒什么,程序员在加班。但是礼物还是少不了的,送什么好?
- 题目描述:(1)模拟登陆界面,判别用户名和密码,给出合适的提示,如果超过三次,锁定输入。用代替密码;或者最新输入显示,前面的变成;安全性措施
- 简介有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的
- from keras.utils.np_utils import to_categorical注意:当使用categorical_cross
- 1.random库的使用:random库是使用随机数的Python标准库从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是
- 1.查看mysql上都有哪些库mysql> show databases \G***************************
- /************************************************************ * Code
- #!/usr/bin/env python# -*- coding:utf-8 -*-# *************************
- 小编今天教你们python怎么导入坐标点,解决你在生活中遇到的小问题。首先下载安装python,打开文本编辑器,将文件保存成 py格式,如果
- 区块链中的共识算法在比特币公链架构解析中,就曾提到过为了实现去中介化的设计,比特币设计了一套共识协议,并通过此协议来保证系统的稳定性和防攻击