国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django在保存圖像的同時壓縮圖像示例代碼詳解

2020-02-15 21:17:09
字體:
來源:轉載
供稿:網友

假設我們有一個非常簡單的Post模型,它將是一個圖像及其描述,

from django.db import models class Post(models.Model): text = models.TextField() image = models.ImageField(upload_to='images/')

但是我們要優化圖像大小,這將由我們Post的image字段指出。 這樣做有充分的理由-它有助于更快地加載網站/應用程序并減少我們的服務器存儲。 在使用Django之前,首先讓我們簡單介紹一下使用Pillow進行圖像壓縮的概述。

使用Pillow壓縮圖像

Pillow是用于圖像相關操作的出色Python軟件包。 Image類帶有用于圖像io和操作的方法。 Image.open從文件路徑或文件對象讀取圖像。 Image類的save方法將質量作為以jpg格式保存圖像的可選參數,范圍為1到95,此參數的默認值為75,并且設置質量大于95會導致圖像尺寸大于 原本的。

from PIL import Imageim = Image.open('/some/path/to/image')im.save('/desired/path/new_image_name.jpg', quality=70)im.close()

使用quality參數不是減小大小的唯一方法。 例如,您可以將其與調整圖像大小相結合,以獲得更小的圖像尺寸。

利用Django signals

信號允許某些發送者通知一組接收者已經采取了某些措施。

Django帶有許多內置信號,目前,我們對django.db.models.signals.pre_save信號感興趣,該信號將在調用模型的save()方法之前發送。 要將處理程序連接到信號,有Signal.connect方法。 要將信號附加到特定的sender(在我們的例子中是模型),我們必須給Signal.connect方法提供sender參數,例如,將pre_save信號附加到我們的Post模型(上面定義),如下所示:

pre_save.connect(our_handler, sender=Post)

Django還提供了用于連接信號的接收器裝飾器,這使代碼更加慣用。 因此,除了定義our_handler并進行連接之外,我們還可以將our_handler的定義修飾為

from django.dispatch import receiver... @receiver(pre_save, sender=Post)def my_handler(sender, **kwargs): ...

現在,讓我們完成處理程序以壓縮圖像。 pre_save信號還將實例參數發送到處理程序函數,該函數對應于要保存的實際實例。 當我們要檢查字段是否已更新時,這特別有用,因為我們不想重復壓縮圖像。 因此我們可以將處理程序功能設為

from django.db.models.signals import pre_savefrom django.dispatch import receiver @receiver(pre_save, sender=Post)def handle_image_compression(sender, instance, **kwargs): try:  post_obj = Post.objects.get(pk=instance.pk) except Post.DoesNotExist:  # the object does not exists, so compress the image  instance.image = compress_image(instance.image) else:  # the object exists, so check if the image field is updated  if post_obj.image != instance.image:   instance.image = compress_image(instance.image)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沽源县| 二连浩特市| 莫力| 柞水县| 涟源市| 怀化市| 宁陵县| 南京市| 大姚县| 监利县| 武川县| 广安市| 阿勒泰市| 定陶县| 屏东市| 昆山市| 富民县| 耿马| 金堂县| 蒙山县| 石台县| 瓮安县| 枣庄市| 凤阳县| 乌兰浩特市| 睢宁县| 花莲县| 鄄城县| 乐至县| 庆元县| 靖西县| 泾源县| 黄浦区| 丰都县| 措勤县| 汾阳市| 介休市| 建阳市| 共和县| 思茅市| 灵璧县|