Pillow模块图片生成
0825自我总结
Pillow模块图片生成
一.模块安装
pip3 install pillow
二.模块的载入
import PIL
三.django结合img标签生成图片
img.html
复制<img src='/img/'>
url.py
复制from django.conf.urls import url
from django.contrib import admin
#主路由导入视图内函数
from app import views
urlpatterns = [
url(r'^img/', views.img),
url(r'^show/', views.show),
]
view.py
方法一:返回固定图片
复制def show(request):
return render(request,'img.html')
def img(request)
with open('static/img/lhf.jpg','rb') as f:
data=f.read()
return HttpResponse(data)
方法二:自动生成图片(借助第三方模块pillow)
复制from PIL import Image
def show(request):
return render(request,'img.html')
def img(request)
img=Image.new('RGB',(350,40),(123,222,222)) #颜色模式,长宽,rgb里面的颜色
#把图片保存起来
with open('static/img/code.png','wb') as f:
#把图片保存起来(注意,用img对象的save方法,把f传入)
img.save(f)
#打开返回
with open('static/img/code.png','rb') as f:
data=f.read()
return HttpResponse(data)
方法三:保存在内存中(需要借助io模块)
复制from PIL import Image
from io import BytesIO
def show(request):
return render(request,'img.html')
def img(request)
img=Image.new('RGB',(350,40),(123,222,222)) #颜色模式,长宽,rgb里面的颜色
#生成一个Byteio对象
f=BytesIO()
# #把文件保存到对象中
img.save(f,'png')
#f.getvalue() 把文件从对象中取出来
return HttpResponse(f.getvalue())
方法四,保存内存又保存文件中
复制from PIL import Image
from io import BytesIO
def show(request):
return render(request,'img.html')
def img(request)
img=Image.new('RGB',(350,40),(123,222,222)) #颜色模式,长宽,rgb里面的颜色
#写文字
#生成一个字体对象
font=ImageFont.truetype('static/font/kumo.ttf',34) #字体文件路径,字体大小
# 调用方法,返回一个画板对象
draw=ImageDraw.Draw(img)
draw.text((0,10),'python',font=font) #字体的XY坐标,字体内容,字体类型
f=BytesIO()
img.save(f,'png')
return HttpResponse(f.getvalue())
四.画点画线
复制from PIL import Image
from io import BytesIO
def show(request):
return render(request,'img.html')
def img(request)
img = Image.new('RGB', (350, 40), (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
# 写文字
# 生成一个字体对象
font = ImageFont.truetype('/static/Gabriola.ttf', 34)
# 调用方法,返回一个画板对象
draw = ImageDraw.Draw(img)
new_text =''
# 生成随机8位数字
for x_index in range(1, 8):
num = chr(random.randint(48, 57))
word = chr(random.randint(65, 90))
word_1 = chr(random.randint(97, 122))
text =random.choice((num, word, word_1))
draw.text((x_index * 32, 0),text, font=font)
new_text +=text
# 加点线
width = 320
height = 35
for i in range(5):
x1 = random.randint(0, width)
x2 = random.randint(0, width)
y1 = random.randint(0, height)
y2 = random.randint(0, height)
# 在图片上画线
draw.line((x1, y1, x2, y2), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
for i in range(33):
# 画点
draw.point([random.randint(0, width), random.randint(0, height)], fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
x = random.randint(0, width)
y = random.randint(0, height)
# 画弧形
draw.arc((x, y, x + 4, y + 4), 0, 90, fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
print(new_text)
#存在session中
request.session['code']=new_text
#存内存
f = BytesIO()
img.save(f, 'png')
return HttpResponse(f.getvalue())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理