本文实例讲述了Django imgareaselect手动剪切头像的方法。分享给大家供大家参考。具体如下:
index.html:
上传图片
show.html:
HTML5的标题 {% if messages %} {% for message in messages %}{{ message }}
{% endfor %} {% endif %}
cut.html:
剪切 头像剪切 返回
{% if messages %} {% for message in messages %}{{ message }}
{% endfor %} {% endif %}点击原图 选择剪切区域
![]()
预览选择区域
![]()
forms.py:
#coding=utf-8
from django import forms
class PhotoForm(forms.Form):
photo_name = forms.ImageField(label=u\"头像\")
class HatHeadCutForm(forms.Form):
x1=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
y1=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
x2=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
y2=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
w=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
h=forms.IntegerField(widget=forms.TextInput(attrs={\'size\': 4,}))
models.py:
#coding=utf-8 from django.db import models class Photo(models.Model): photo_name=models.CharField(u\"图片路径\",max_length=255) photo_thumb=models.CharField(u\"图片缩略图\",max_length=255)
views.py:
#coding=utf-8
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse,HttpResponseRedirect
from django.template import RequestContext
from django.contrib import messages
import os,uuid,ImageFile,Image
from PhotoCut.headhat.forms import PhotoForm,HatHeadCutForm
from PhotoCut.headhat.models import Photo
from PhotoCut.settings import MEDIA_ROOT,HEADHAT_ABS_PATH,HEADHAT_VIR_PATH
def index(request,templates=\"headhat/index.html\"):
template_var={}
form=PhotoForm()
if request.method==\"POST\":
form = PhotoForm(request.POST.copy(),request.FILES)
if form.is_valid():
file=request.FILES.get(\"photo_name\",None)
if file:
p=ImageFile.Parser()
for c in file.chunks():
p.feed(c)
img=p.close()
if img.mode != \'RGBA\':
img = img.convert(\'RGBA\')
if img.size[0]>img.size[1]:
offset=int(img.size[0]-img.size[1])/2
img=img.crop((offset,0,int(img.size[0]-offset),img.size[1]))
else:
offset=int(img.size[1]-img.size[0])/2
img=img.crop((0,offset,img.size[0],(img.size[1]-offset)))
img.thumbnail((300, 300))
file_name=\"%s.jpg\"%str(uuid.uuid1())
img.save(os.path.join(HEADHAT_ABS_PATH,file_name),\"JPEG\",quality=100)
messages.info(request,u\"上传成功!\")
p=Photo.objects.create(photo_name=file_name)
p.save()
return HttpResponseRedirect(reverse(\"headhat_cut\",kwargs={\"id\":p.id}))
template_var[\"form\"]=form
return render_to_response(templates,template_var,context_instance=RequestContext(request))
def cut(request,id,templates=\"headhat/cut.html\"):
template_var={}
p=get_object_or_404(Photo,pk=int(id))
if not p.photo_name:
messages.info(request,u\"请先上传图片!\")
return HttpResponseRedirect(reverse(\"headhat_index\"))
template_var[\"vir_path\"]=os.path.join(HEADHAT_VIR_PATH,p.photo_name)
form=HatHeadCutForm()
if request.method==\'POST\':
form=HatHeadCutForm(request.POST)
if form.is_valid():
try:
img=Image.open(os.path.join(HEADHAT_ABS_PATH,p.photo_name))
except IOError:
messages.info(request,u\"读取文件错误!\")
data=form.cleaned_data
img=img.crop((data[\"x1\"],data[\"y1\"],data[\"x2\"],data[\"y2\"]))
img.thumbnail((50, 50))
file_name=\"%s_%s\"%(os.path.splitext(p.photo_name)[0],\"_50_50.jpg\")
img.save(os.path.join(HEADHAT_ABS_PATH,file_name),\"JPEG\",quality=100)
p.photo_thumb=file_name
p.save()
messages.info(request,u\"剪切成功!\")
return HttpResponseRedirect(reverse(\"headhat_show\"))
else:
messages.info(request,u\"请剪切后 再保存!\")
template_var[\"form\"]=form
return render_to_response(templates,template_var,context_instance=RequestContext(request))
def show(request,templates=\"headhat/show.html\"):
template_var={}
photos=Photo.objects.all()
template_var[\"path\"]=HEADHAT_VIR_PATH
template_var[\"photos\"]=photos
return render_to_response(templates,template_var,context_instance=RequestContext(request))
希望本文所述对大家的Python程序设计有所帮助。