百万美食网
您的当前位置:首页Djangoimgareaselect手动剪切头像实现方法

Djangoimgareaselect手动剪切头像实现方法

来源:百万美食网
 本文实例讲述了Django imgareaselect手动剪切头像的方法。分享给大家供大家参考。具体如下:

index.html:

 
 
 
 
上传图片 
 
 
 
 
 

show.html:

 
 
 
 
HTML5的标题 
 
 
 
 

继续上传头像

{% if messages %} {% for message in messages %} {{ message }}

{% endfor %} {% endif %} {%for p in photos%}

  • 继续剪切
  • {%endfor%}

    cut.html:

     
     
     
     
    剪切 
     
     
    
    
    

    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程序设计有所帮助。

    显示全文