<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
    主站蜘蛛池模板: a在线视频免费观看在线视频三区| 亚洲精品无码mⅴ在线观看| 久久久精品视频免费观看 | 无码中文在线二区免费| 亚洲理论片在线观看| 1000部啪啪毛片免费看| 亚洲黄色免费在线观看| 在线观看成人免费视频不卡| 亚洲精品日韩专区silk| 波多野结衣免费在线| 亚洲日韩国产二区无码| 在线观看免费国产视频| 一道本在线免费视频| 国产亚洲精品久久久久秋霞| a成人毛片免费观看| 久久青草亚洲AV无码麻豆| 6080午夜一级毛片免费看6080夜福利| 在线观看亚洲一区二区| 国产精品无码免费播放| 国产精品亚洲一区二区三区| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲人成无码久久电影网站| 中文字幕视频免费在线观看| 亚洲免费视频网站| 欧洲乱码伦视频免费| 日本亚洲高清乱码中文在线观看| 亚洲精品国产福利一二区| 久操视频免费观看| 四虎必出精品亚洲高清| 亚洲成人国产精品| 一级毛片不卡片免费观看| 精品亚洲456在线播放| 亚洲人成色77777在线观看大| 亚洲一区免费观看| 成人亚洲国产va天堂| 亚洲女人被黑人巨大进入| 99re视频精品全部免费| 国产偷国产偷亚洲高清人| 日韩亚洲人成在线综合日本| 青青在线久青草免费观看| 一边摸一边爽一边叫床免费视频 |