使用python主要使用的是PIL库,
安装所需库PIL
安装方式推荐有很多种,推荐使用pip;
pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。
安装pip:
- 安装python; 这个是必须安装的;
下载pip:
> 官网地址:https://pypi.org/project/pip/#downloads; 下载完毕后,解压
打开命令行窗口,进入到pip解压后的目录;执行代码
python3 setup.py install
进行安装,
安装完成后,将pip加入到系统环境变量中
- 验证
打开命令行窗口,输入pip list 或者pip3 list
以上只针对于windows系统,其他系统也可以参考;
安装所需库:
打开命令行窗口,输入执行以下代码,并回车pip install pillow
等待提示第三库安装成功既可;
安装成功后引入所需库:
#!/usr/bin/env python
# encoding: utf-8
from PIL import Image , ImageDraw,ImageFont
用python画圆圈
使用python画圆,主要使用的是ImageDraw里面的ellipse函数;主要步骤如下:
- 加载图片。Image.new()
- 加载到ImageDraw
- 调用ellipse方法
def genCycle(out_path = 'F:\\cycle.png'):
'''画圆圈'''
img = Image.new("RGBA",(500,500),(255,0,255,255))
draw = ImageDraw.Draw(img)
draw.ellipse((50,50,450,450),fill=True,outline='red',width=5)
img.save(out_path)
用python生成圆形图片
首先需要一个正方形图片,
其次根据三角函数获取圆心到各个圆边的坐标点
最后裁减图片
报存图片成圆形
具体完整代码如下:
def genCircle():
img = Image.open('F:\\cyc.png').convert("RGBA")
size = img.size
# 因为是要圆形,所以需要正方形的图片
img_r = min(size[0], size[1])
if size[0] != size[1]:
#如果图片不是正方形,需要裁减
img = img.resize((img_r, img_r), Image.ANTIALIAS)
cycle_r = 300
imb = Image.new("RGBA",(cycle_r * 2,cycle_r * 2),(255,0,255,0))
img_a = img.load()
img_b = imb.load()
r = float(img_r/2) #圆心横坐标
for i in range(img_r):
for j in range(img_r):
lx = abs(i-r) #到圆心距离的横坐标
ly = abs(j-r) #到圆心距离的纵坐标
l = (pow(lx,2) + pow(ly,2)) ** 0.5 # 三角函数 半径
if l < cycle_r:
img_b[i-(r-cycle_r),j-(r-cycle_r)] = img_a[i,j]
imb.save("F://test_circle.png")
使用python在图片上添加文字
可以实现在透明图片上添加文字
- 在图片上添加横排文字
需要准备好字体文件和图片文件;
具体参考以下代码注释:
'''
参数:
xy-文字的左上角。
text-要绘制的文本。如果包含任何换行符,则文本将传递到multiline_text()
fill-用于文本的颜色。
font-一个ImageFont实例。
spacing-如果文本传递到multiline_text()换行文本,则行之间的像素数。
align-如果文本已传递到multiline_text(),“left”,“center”或“right”。
'''
def genTitle(text=None,size=(800,500),font_path=None,font_size=60,out_path=None):
img = Image.new("RGBA",size,(255,255,255,100))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font_path,font_size)
txtsize_1 = draw.textsize(text,font=font,spacing=10)
draw.text(((size[0]-txtsize_1[0])/2,(size[1]-txtsize_1[1])/2),text,fill='red',font=font,spacing=10)
img.save(out_path)
- 在图片上添加竖排文字
竖排文字主要是计算每个文字的坐标,按照一般写文字方式,写入到指定坐标,既可以实现竖排文字的呈现方式;
具体代码如下:
def genVtitle():
'''竖排文字'''
text = '明月几时有 \n 把酒问青天'
size = (200,600)
font_size = 50
out_path = 'F:\\cyc.png'
font_path = r'C:\Users\**\Fonts\egular.ttf'
img = Image.new("RGBA",size,(255,255,255,10))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font_path,font_size)
x = 0
y = 0
r_space = 10 #行距
w_space = 10 #字距
for i,s in enumerate(text):
if i == 0:
w,h = font.getsize(s)
if s=='\n' or s==',':
x = x + w + r_space
y = 0
continue
else:
y = y + h + w_space
draw.text((x+50,y+50),s,fill='red',font=font)
img.save(out_path)