最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年02月11日 08:27:53   作者:mindg.cn  
這篇文章主要介紹了django在保存圖像的同時壓縮圖像,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

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

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

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

使用Pillow壓縮圖像

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

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

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

利用Django signals

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

Django帶有許多內置信號,目前,我們對django.db.models.signals.pre_save信號感興趣,該信號將在調用模型的save()方法之前發(fā)送。 要將處理程序連接到信號,有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信號還將實例參數發(fā)送到處理程序函數,該函數對應于要保存的實際實例。 當我們要檢查字段是否已更新時,這特別有用,因為我們不想重復壓縮圖像。 因此我們可以將處理程序功能設為

from django.db.models.signals import pre_save
from 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)

現在,我們的最后一項任務是編寫compress_image函數,該函數將使用一個ImageField并返回一個ImageField。 PIL的Image.open()方法只能用于文件路徑或文件對象。 這是一個有趣的事實,它是ImageField的超類,它鏡像了python的File API,因此,我們可以像使用實際文件一樣使用它。 使用Image.open的問題已解決,但是Image.save呢? 事實證明Image.save可以將圖像寫入BytesIO對象。 因此,我們壓縮圖像的功能將變?yōu)?/p>

from PIL import Image
from io import BytesIO
from django.core.files import File
def compress_image(image):
 im = Image.open(image)
 out = BytesIO()
 im.save(out, 'JPEG', quality=70)
 compressed = File(out, name=image.name)
 im.close()
 return compressed

總結

以上所述是小編給大家介紹的django在保存圖像的同時壓縮圖像示例代碼詳解,希望對大家有所幫助!

相關文章

  • Python 生成器,迭代,yield關鍵字,send()傳參給yield語句操作示例

    Python 生成器,迭代,yield關鍵字,send()傳參給yield語句操作示例

    這篇文章主要介紹了Python 生成器,迭代,yield關鍵字,send()傳參給yield語句操作,結合實例形式分析了Python生成器、迭代、yield關鍵字及異常處理相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • python 實現分組求和與分組累加求和代碼

    python 實現分組求和與分組累加求和代碼

    這篇文章主要介紹了python 實現分組求和與分組累加求和代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python dotenv管理多環(huán)境配置的方法

    python dotenv管理多環(huán)境配置的方法

    python-dotenv 是一個很好的工具,能幫助你管理項目中的配置和環(huán)境變量,特別是在涉及敏感數據時,這篇文章主要介紹了python dotenv管理多環(huán)境配置,需要的朋友可以參考下
    2024-12-12
  • Python環(huán)境使用OpenCV檢測人臉實現教程

    Python環(huán)境使用OpenCV檢測人臉實現教程

    這篇文章主要介紹了Python環(huán)境使用OpenCV檢測人臉實現教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Python Scrapy?框架簡單介紹

    Python Scrapy?框架簡單介紹

    Scrapy是適用于Python的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結構化的數據,這篇文章主要介紹了Scrapy框架優(yōu)點及簡單介紹,需要的朋友可以參考下
    2023-05-05
  • 使用python-pptx操作PPT的示例詳解

    使用python-pptx操作PPT的示例詳解

    python對PPT演示文檔讀寫,是通過第三方庫python-pptx實現的,python-pptx是用于創(chuàng)建和更新?PowerPoint文件的?Python?庫。本文主要介紹了python-pptx操作PPT的相關示例,希望對大家有所幫助
    2023-01-01
  • Python繪制簡單散點圖的方法

    Python繪制簡單散點圖的方法

    這篇文章主要為大家詳細介紹了Python繪制簡單散點圖的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python處理時間日期坐標軸過程詳解

    Python處理時間日期坐標軸過程詳解

    這篇文章主要介紹了Python處理時間日期坐標軸過程詳解,當日期數據作為圖表的坐標軸時通常需要特殊處理,應為日期字符串比較長,容易產生重疊現象,需要的朋友可以參考下
    2019-06-06
  • pandas重復行刪除操作df.drop_duplicates和df.duplicated的區(qū)別

    pandas重復行刪除操作df.drop_duplicates和df.duplicated的區(qū)別

    本文主要介紹了pandas重復行刪除操作df.drop_duplicates和df.duplicated的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • python中os包的用法

    python中os包的用法

    這篇文章主要介紹了python中os包的用法,文中給大家提到了python中os的常用方法,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論

凌云县| 宁阳县| 休宁县| 比如县| 石狮市| 儋州市| 资兴市| 津市市| 广饶县| 岐山县| 读书| 福州市| 和平县| 莒南县| 项城市| 永州市| 龙南县| 济阳县| 东乡县| 广灵县| 靖边县| 扶风县| 武城县| 高淳县| 探索| 武威市| 理塘县| 宜章县| 高碑店市| 衡水市| 岚皋县| 定陶县| 吉林市| 托里县| 德阳市| 开鲁县| 绥宁县| 苏尼特左旗| 定陶县| 于田县| 泗水县|