1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      django在保存圖像的同時壓縮圖像示例代碼怎么寫-創(chuàng)新互聯(lián)

      這篇文章給大家介紹django在保存圖像的同時壓縮圖像示例代碼怎么寫,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

      站在用戶的角度思考問題,與客戶深入溝通,找到桂林網(wǎng)站設(shè)計與桂林網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋桂林地區(qū)。

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

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

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

      使用Pillow壓縮圖像

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

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

      使用quality參數(shù)不是減小大小的方法。 例如,您可以將其與調(diào)整圖像大小相結(jié)合,以獲得更小的圖像尺寸。

      利用Django signals

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

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

      pre_save.connect(our_handler, sender=Post)

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

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

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

      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)

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

      from PIL import Imagefrom io import BytesIOfrom django.core.files import Filedef 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

      關(guān)于django在保存圖像的同時壓縮圖像示例代碼怎么寫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


      網(wǎng)頁名稱:django在保存圖像的同時壓縮圖像示例代碼怎么寫-創(chuàng)新互聯(lián)
      網(wǎng)頁路徑:http://ef60e0e.cn/article/ghepo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        新兴县| 论坛| 常山县| 都昌县| 塘沽区| 含山县| 墨竹工卡县| 元氏县| 济阳县| 忻州市| 南部县| 宜宾市| 宁南县| 马尔康县| 辽阳县| 南华县| 芜湖市| 静安区| 汉沽区| 新源县| 兴国县| 怀远县| 封开县| 金寨县| 屏东县| 商城县| 沧源| 牟定县| 河东区| 精河县| 苗栗市| 阿鲁科尔沁旗| 辽源市| 防城港市| 潍坊市| 闻喜县| 博乐市| 揭阳市| 军事| 新巴尔虎左旗| 贵定县|