欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用django怎么實現(xiàn)在保存圖像的同時壓縮圖像-創(chuàng)新互聯(lián)

使用django怎么實現(xiàn)在保存圖像的同時壓縮圖像?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,柯橋企業(yè)網(wǎng)站建設,柯橋品牌網(wǎng)站建設,網(wǎng)站定制,柯橋網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,柯橋網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

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

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

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

使用Pillow壓縮圖像

Pillow是用于圖像相關操作的出色Python軟件包。 Image類帶有用于圖像io和操作的方法。 Image.open從文件路徑或文件對象讀取圖像。 Image類的save方法將質(zhì)量作為以jpg格式保存圖像的可選參數(shù),范圍為1到95,此參數(shù)的默認值為75,并且設置質(zhì)量大于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參數(shù)不是減小大小的唯一方法。 例如,您可以將其與調(diào)整圖像大小相結合,以獲得更小的圖像尺寸。

利用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并進行連接之外,我們還可以將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ù)對應于要保存的實際實例。 當我們要檢查字段是否已更新時,這特別有用,因為我們不想重復壓縮圖像。 因此我們可以將處理程序功能設為

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)

現(xiàn)在,我們的最后一項任務是編寫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 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怎么實現(xiàn)在保存圖像的同時壓縮圖像問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。

分享名稱:使用django怎么實現(xiàn)在保存圖像的同時壓縮圖像-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://chinadenli.net/article24/cejjje.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、做網(wǎng)站營銷型網(wǎng)站建設、App開發(fā)、云服務器網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
99久久免费看国产精品| 久热99中文字幕视频在线 | 正在播放国产又粗又长| 情一色一区二区三区四| 亚洲免费黄色高清在线观看| 女厕偷窥一区二区三区在线| 日韩精品毛片视频免费看| 亚洲欧美黑人一区二区| 日本加勒比中文在线观看| 欧美日韩一区二区三区色拉拉| 老司机精品视频在线免费看| 黄色美女日本的美女日人| 色偷偷偷拍视频在线观看| 日本不卡在线视频你懂的 | 不卡一区二区在线视频| 91插插插外国一区二区婷婷| 亚洲黄香蕉视频免费看| 国产在线一区二区免费| 中文字幕乱码亚洲三区| 日本加勒比中文在线观看| 青青操视频在线播放免费| 老司机精品福利视频在线播放 | 欧美国产在线观看精品| 欧美成人免费一级特黄| 女厕偷窥一区二区三区在线| 国产精品一区二区香蕉视频| 日本免费一本一二区三区| 国产性情片一区二区三区| 视频一区二区 国产精品| 亚洲av在线视频一区| 国产亚洲精品香蕉视频播放| 国产精品欧美一级免费| 日韩亚洲精品国产第二页| 一区二区三区精品人妻| 五月天综合网五月天综合网| 欧美一区二区三区性视频| 老司机精品视频在线免费| 欧美丰满人妻少妇精品| 亚洲精品成人福利在线| 国产精品久久女同磨豆腐| 在线亚洲成人中文字幕高清 |