<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks
    找到兩篇相關(guān)帖子,mark一下:
    一。
    首先在model上要有一個(gè)ImageFiled字段,
    同時(shí) 模板上對(duì)應(yīng)放一個(gè)<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/")

    二。

    談?wù)刣jango中圖片上傳的2種處理方式

    關(guān)鍵字: django 上傳圖片 pil

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

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

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

         然后我們?cè)诜?wù)端會(huì)定義一個(gè)函數(shù)來(lái)處理圖片上傳,我們先來(lái)看看一般的做法:

    Python代碼 復(fù)制代碼
    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 為你在服務(wù)器上保存原始圖片的文件物理路徑  
    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打開(kāi)進(jìn)行處理,比如改變大小,加水印等等  

         在上面這種傳統(tǒng)的做法中,是把圖片文件保存到硬盤上后,再由pil圖形庫(kù)從硬盤上加載,再進(jìn)行圖片處理,明顯多了很多的硬盤IO操作,如果你是一個(gè)圖片處理量很大的應(yīng)用,顯然不想看到這樣的局面。那我們來(lái)看看另外一個(gè)做法:

    Python代碼 復(fù)制代碼
    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被保存之前,可以進(jìn)行圖片的各種操作,在各種操作完成后,在進(jìn)行一次寫(xiě)操作  
    16.             img.save("yoursavepath")  

         在上面的做法中,我們利用pil的ImageFile直接從django接收的數(shù)據(jù)流中構(gòu)建出圖形對(duì)象,進(jìn)行處理后,在保存,減少了硬盤的讀操作。現(xiàn)在網(wǎng) 上有些例子使用StringIO對(duì)象來(lái)作為pil Image.open的輸入,經(jīng)過(guò)我多次嘗試,在ubuntu以及winxp、centos上都要報(bào)異常,我想可能跟pil的版本有關(guān),或許以前的低版本 pil的確可以處理。



    posted on 2008-09-24 23:11 seal 閱讀(8273) 評(píng)論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 中文字幕精品无码亚洲字| 日韩精品一区二区亚洲AV观看 | 国产乱子伦片免费观看中字| 精品国产日韩亚洲一区在线| 伊人久久大香线蕉亚洲| 日本免费xxxx| 日本永久免费a∨在线视频| 亚洲AV日韩AV鸥美在线观看| 大陆一级毛片免费视频观看| 中国一级全黄的免费观看| 亚洲欧洲综合在线| 亚洲日韩在线中文字幕第一页| 99在线观看免费视频| 国产亚洲综合久久| 99ri精品国产亚洲| 亚洲国产午夜中文字幕精品黄网站| 8090在线观看免费观看| 免费观看四虎精品成人| 亚洲人成日本在线观看| 亚洲黄片手机免费观看| 特级做A爰片毛片免费69 | 日韩大片在线永久免费观看网站| 亚洲国产精品久久久久网站| 成人免费视频国产| 久久精品一本到99热免费| 特级aa**毛片免费观看| 亚洲精品二三区伊人久久| 亚洲韩国精品无码一区二区三区| 操美女视频免费网站| 午夜免费福利小电影| 色www永久免费视频| 亚洲13又紧又嫩又水多| 亚洲日韩小电影在线观看| 午夜私人影院免费体验区| 美丽姑娘免费观看在线观看中文版 | 好爽又高潮了毛片免费下载| 国产成人一区二区三区视频免费| 日本特黄特色AAA大片免费| 亚洲午夜无码久久| 亚洲国产亚洲片在线观看播放| 国产亚洲成AV人片在线观黄桃|