PIL對上傳到Django的圖片進行處理并保存的實例
1. 介紹
上傳的圖片文件:如
pic = request.FILES["picture"] # pic是 <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> 類型的數(shù)據(jù) # 而pillow的Image.open("./xxx.jpg") 則是: <class 'PIL.JpegImagePlugin.JpegImageFile'> 類型的數(shù)據(jù) # 問題是如何把InMemoryUploadedFile轉(zhuǎn)化為PIL類型,并且處理之后再轉(zhuǎn)回InMemoryUploadedFile,并save
2. 把InMemoryUploadedFile轉(zhuǎn)化為PIL類型
from PIL import Image pic = request.FILES["picture"] im_pic = Image.open(pic) # 這樣就把InMemoryUploadedFile轉(zhuǎn)化為了PIL類型數(shù)據(jù),pic是InMemoryUploadedFile,im_pic是PIL類型
3. 處理PIL類型的圖片數(shù)據(jù)
w, h = im_pic.size if w >= h: w_start = (w-h)*0.618 box = (w_start, 0, w_start+h, h) region = im_pic.crop(box) else: h_start = (h-w)*0.618 box = (0, h_start, w, h_start+w) region = im_pic.crop(box) # region就是PIL處理后的正方形了
4. 將處理后的PIL類型轉(zhuǎn)化為InMemoryUploadedFile類型
from io import BytesIO from django.core.files.uploadedfile import InMemoryUploadedFile // 先保存到磁盤io pic_io = BytesIO() region.save(pic_io, im_pic.format) // 再轉(zhuǎn)化為InMemoryUploadedFile數(shù)據(jù) pic_file = InMemoryUploadedFile( file=pic_io, field_name=None, name=pic.name, content_type=pic.content_type, size=pic.size, charset=None )
pic_file 就是region轉(zhuǎn)化后的InMemoryUploadedFile了
5. 保存InMemoryUploadedFile到數(shù)據(jù)庫
from ./models import Picture p = Picture(picture=pic_file) p.save()
以上這篇PIL對上傳到Django的圖片進行處理并保存的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python使用socket高效傳輸視頻數(shù)據(jù)幀(連續(xù)發(fā)送圖片)
本文主要介紹了python使用socket高效傳輸視頻數(shù)據(jù)幀(連續(xù)發(fā)送圖片),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Python使用Redis實現(xiàn)作業(yè)調(diào)度系統(tǒng)(超簡單)
Redis作為內(nèi)存數(shù)據(jù)庫的一個典型代表,已經(jīng)在很多應用場景中被使用,這里僅就Redis的pub/sub功能來說說怎樣通過此功能來實現(xiàn)一個簡單的作業(yè)調(diào)度系統(tǒng)。這里只是想展現(xiàn)一個簡單的想法,所以還是有很多需要考慮的東西沒有包括在這個例子中,比如錯誤處理,持久化等2016-03-03python獲取外網(wǎng)ip地址的方法總結(jié)
這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下2015-07-07python生成單位陣或?qū)顷嚨娜N方式小結(jié)
這篇文章主要介紹了python生成單位陣或?qū)顷嚨娜N方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05python出現(xiàn)更新庫失敗A?new?release?of?pip?is?available:?23.0.
學習了Python我們知道它自帶了很多的庫,同時我們還需要對某個庫進行升級,這篇文章主要給大家介紹了關(guān)于python出現(xiàn)更新庫失敗A?new?release?of?pip?is?available:?23.0.1?->?23.3的解決辦法,需要的朋友可以參考下2024-03-03