<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    找到兩篇相關帖子,mark一下:
    一。
    首先在model上要有一個ImageFiled字段,
    同時 模板上對應放一個<input type="file" name = "file">,
    以下就是視圖的代碼了,
    import Image
    import StringIO
    from datetime import datetime
    def add_topic(request):
           file_obj = request.FILES.get('file', None)   
           if file_obj:
                 data = file_obj['content']
                 f = StringIO.StringIO(data)
                 image = Image.open(f)
                 image = image.convert('RGB')
                 abs_name = '%s_%s_%s' %(str(request.user),"
                        str(datetime.today()).replace(':', '-')[:-7],"
                        file_obj['filename'])
                  image.save(file(abs_name, 'wb'))
            return HttpResponseRedirect("/forum/forum/")

    二。

    談談django中圖片上傳的2種處理方式

    關鍵字: django 上傳圖片 pil

        首先申明該文使用的django 版本為svn 版本,我每天都在更新python 是2.5,pil 也是最新的版本。

        通常情況下用django上傳圖片我們會定義一個django.forms.Form的子類,比如:

    Python代碼 復制代碼
    1. # coding: utf-8  
    2.   
    3. import django.forms as forms  
    4.   
    5. class PictureForm(forms.Form):   
    6.     # ......     
    7.     # 圖片  
    8.     imagefile = forms.ImageField()  
    9.     # ......  

         然后我們在服務端會定義一個函數來處理圖片上傳,我們先來看看一般的做法:

    Python代碼 復制代碼
    1. # coding: utf-8  
    2.   
    3. from django.http import HttpResponse  
    4.   
    5. def addPicture(request):  
    6.     if request.method == 'POST':  
    7.         form = PictureForm(request.POST, request.FILES)  
    8.         if form.is_valid():  
    9.             f = request.FILES["imagefile"]  
    10.             # des_origin_path 為你在服務器上保存原始圖片的文件物理路徑  
    11.             des_origin_f = open(des_origin_path, "ab")  
    12.             for chunk in f.chunks():  
    13.                 des_origin_f.write(chunk)  
    14.             des_origin_f.close()  
    15.               
    16.             # 圖片文件被保存在硬盤上后,你可以用pil的Image.open打開進行處理,比如改變大小,加水印等等  

         在上面這種傳統的做法中,是把圖片文件保存到硬盤上后,再由pil圖形庫從硬盤上加載,再進行圖片處理,明顯多了很多的硬盤IO操作,如果你是一個圖片處理量很大的應用,顯然不想看到這樣的局面。那我們來看看另外一個做法:

    Python代碼 復制代碼
    1. # coding: utf-8  
    2.   
    3. from django.http import HttpResponse  
    4. import ImageFile  
    5.   
    6. def addPicture(request):  
    7.     if request.method == 'POST':  
    8.         form = PictureForm(request.POST, request.FILES)  
    9.         if form.is_valid():  
    10.             f = request.FILES["imagefile"]  
    11.             parser = ImageFile.Parser()  
    12.             for chunk in f.chunks():  
    13.                 parser.feed(chunk)  
    14.             img = parser.close()  
    15.             # 在img被保存之前,可以進行圖片的各種操作,在各種操作完成后,在進行一次寫操作  
    16.             img.save("yoursavepath")  

         在上面的做法中,我們利用pil的ImageFile直接從django接收的數據流中構建出圖形對象,進行處理后,在保存,減少了硬盤的讀操作。現在網 上有些例子使用StringIO對象來作為pil Image.open的輸入,經過我多次嘗試,在ubuntu以及winxp、centos上都要報異常,我想可能跟pil的版本有關,或許以前的低版本 pil的確可以處理。



    posted on 2008-09-24 23:11 seal 閱讀(8272) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 国产亚洲av片在线观看16女人 | 西西人体免费视频| 亚洲国产精品一区二区三区在线观看| 亚洲日本在线观看视频| 岛国av无码免费无禁网站| 久久久久久国产精品免费免费男同| 国产在亚洲线视频观看| 国产精品亚洲精品青青青| 亚洲欧洲日产国产综合网| 亚洲精品字幕在线观看| 亚洲精品国产精品乱码不卞 | 美女视频黄频a免费大全视频| 亚洲神级电影国语版| 久久青草亚洲AV无码麻豆| 久久精品国产精品亚洲下载| 四虎影视免费永久在线观看| 超pen个人视频国产免费观看| 免费观看的毛片大全| 国产高清免费视频| 最近最好最新2019中文字幕免费| 搡女人免费免费视频观看| 一区二区在线免费视频| 欧洲美女大片免费播放器视频| 亚洲av无码偷拍在线观看| 亚洲国产精品精华液| 亚洲综合无码无在线观看| 亚洲av午夜精品无码专区| 337p日本欧洲亚洲大胆精品555588| 久久精品国产精品亚洲蜜月| 国产日韩亚洲大尺度高清| 伊人久久大香线蕉亚洲| 在线播放亚洲第一字幕| 国产亚洲精品成人AA片新蒲金 | 中文无码日韩欧免费视频| 国产精品极品美女自在线观看免费| 未满十八私人高清免费影院| caoporn成人免费公开| a级片在线免费看| 久久狠狠躁免费观看2020| 99久9在线|免费| 很黄很色很刺激的视频免费|