django 使用 PIL 壓縮圖片的例子
在最近做項(xiàng)目時(shí),發(fā)現(xiàn)服務(wù)器上的圖片比較大,數(shù)據(jù)傳輸時(shí)會(huì)消耗很多流量,體驗(yàn)非常不好。為了緩解這一現(xiàn)象,決定使用gzip壓縮數(shù)據(jù)流,但是發(fā)現(xiàn)gzip對(duì)于json數(shù)據(jù)的壓縮效果很好,但對(duì)于圖片的壓縮效果很差。無(wú)奈,只能寫一段代碼,將服務(wù)器上的圖片挨個(gè)壓縮一下。
我的服務(wù)器上的程序,是用django寫的,數(shù)據(jù)庫(kù)為sqlite,圖片文件存儲(chǔ)在media目錄下。
先看models.py,只有一個(gè)ImageField類型的變量picture,也就是一會(huì)壓縮圖片需要用到的變量。
class CrossPicture(models.Model): picture = models.ImageField(upload_to='cross_picture', blank=True, null=True)
Python有一個(gè)PIL庫(kù),可以處理圖像,壓縮部分的代碼就是用PIL寫的
def compressImage(request):
picture_list = models.CrossPicture.objects.all()
for cp in picture_list:
image = Image.open(cp.picture) # 通過(guò)cp.picture 獲得圖像
width = image.width
height = image.height
rate = 1.0 # 壓縮率
# 根據(jù)圖像大小設(shè)置壓縮率
if width >= 2000 or height >= 2000:
rate = 0.3
elif width >= 1000 or height >= 1000:
rate = 0.5
elif width >= 500 or height >= 500:
rate = 0.9
width = int(width * rate) # 新的寬
height = int(height * rate) # 新的高
image.thumbnail((width, height), Image.ANTIALIAS) # 生成縮略圖
image.save('media/' + str(cp.picture), 'JPEG') # 保存到原路徑
cp.save()
return HttpResponse('compress ok')
以上這篇django 使用 PIL 壓縮圖片的例子就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中__str__()方法的實(shí)用技巧分享
在Python編程中,__str__()是一個(gè)特殊方法,它允許自定義對(duì)象的字符串表示形式,本文將深入探討__str__()的相關(guān)實(shí)用技巧,希望對(duì)大家有所幫助2023-11-11
PyQt5實(shí)現(xiàn)界面(頁(yè)面)跳轉(zhuǎn)的示例代碼
這篇文章主要介紹了PyQt5實(shí)現(xiàn)界面跳轉(zhuǎn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
django rest framework serializer返回時(shí)間自動(dòng)格式化方法
這篇文章主要介紹了django rest framework serializer返回時(shí)間自動(dòng)格式化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
利用Python實(shí)現(xiàn)自動(dòng)生成小學(xué)生計(jì)算題
過(guò)年期間發(fā)現(xiàn)小外甥已經(jīng)上小學(xué)了,我姐說(shuō)老師今天給他們布置了寒假作業(yè):每天堅(jiān)持做乘法和加減法混合運(yùn)算。這我必須幫幫忙,用Python寫了一段自動(dòng)生成小學(xué)生計(jì)算題的代碼,希望外甥不要太感謝我2023-02-02
python搭建簡(jiǎn)易服務(wù)器分析與實(shí)現(xiàn)
本文將介紹python搭建簡(jiǎn)易服務(wù)器實(shí)現(xiàn)步驟,需要了解的朋友可以參考下2012-12-12
flask 使用 flask_apscheduler 做定時(shí)循環(huán)任務(wù)的實(shí)現(xiàn)
這篇文章主要介紹了flask 使用 flask_apscheduler 做定時(shí)循環(huán)任務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

