django 使用 PIL 压缩图片的例子

在最近做项目时,发现服务器上的图片比较大,数据传输时会消耗很多流量,体验非常不好。为了缓解这一现象,决定使用gzip压缩数据流,但是发现gzip对于json数据的压缩效果很好,但对于图片的压缩效果很差。无奈,只能写一段代码,将服务器上的图片挨个压缩一下。

我的服务器上的程序,是用django写的,数据库为sqlite,图片文件存储在media目录下。

先看models.py,只有一个ImageField类型的变量picture,也就是一会压缩图片需要用到的变量。

class CrossPicture(models.Model):
  picture = models.ImageField(upload_to='cross_picture', blank=True, null=True)

Python有一个PIL库,可以处理图像,压缩部分的代码就是用PIL写的

def compressImage(request):

  picture_list = models.CrossPicture.objects.all()

  for cp in picture_list:
    image = Image.open(cp.picture) # 通过cp.picture 获得图像
    width = image.width
    height = image.height
    rate = 1.0 # 压缩率

    # 根据图像大小设置压缩率
    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 压缩图片的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PIL对上传到Django的图片进行处理并保存的实例

    1. 介绍 上传的图片文件:如 pic = request.FILES["picture"] # pic是 <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> 类型的数据 # 而pillow的Image.open("./xxx.jpg") 则是: <class 'PIL.JpegImagePlugin.JpegImageFile'> 类型的数据 # 问题是如何把InMem

  • Django 实现前端图片压缩功能的方法

    思路: <img alt="" src="/img/图片真实地址" ></img> 上面是一个典型的HTML中的图片,在django中,src对应的path会经过url进行过滤处理,所以可以通过写view过滤器的方式来实现图片压缩,代码如下 url url(r'^img/(?P<path>(.+))/$',img), view def img(request,path): im=Image.open(settings.STATIC

  • Django 使用easy_thumbnails压缩上传的图片方法

    easy_thumbnails:A powerful, yet easy to implement thumbnailing application for Django 1.4+ 安装 pip install easy_thumbanils 在你的项目中配置 setting.py INSTALLED_APPS中添加 'easy_thumbanils' 如果Django1.7及以上,运行python manage.py migrate easy_thumbnails 否则,运行python ma

  • django 使用 PIL 压缩图片的例子

    在最近做项目时,发现服务器上的图片比较大,数据传输时会消耗很多流量,体验非常不好.为了缓解这一现象,决定使用gzip压缩数据流,但是发现gzip对于json数据的压缩效果很好,但对于图片的压缩效果很差.无奈,只能写一段代码,将服务器上的图片挨个压缩一下. 我的服务器上的程序,是用django写的,数据库为sqlite,图片文件存储在media目录下. 先看models.py,只有一个ImageField类型的变量picture,也就是一会压缩图片需要用到的变量. class CrossPictu

  • django之静态文件 django 2.0 在网页中显示图片的例子

    小白,有错的地方,希望大家指正~ 使用的是django2.0 python3.6 1.首先,要在settings.py中设置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'media/') 2.url.py中,在加入 from django.conf.urls.static import static from . import settings urlpatterns = [ path('admin/', admin.sit

  • JS移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候的想法是如果给file表单加了 multiple 属性就没有办法调用手机的摄像头拍照了,如果不加,就无法同时选择多张图片,于是我就照实跟同事说了这个情况.但回头一想,单张图片可以上传,那多张图片呢?于是就有了本文的内容. HTML5定义了 FileReader 作为文件 API 的重要成员用于读取文

  • 移动端使用localResizeIMG4压缩图片

    移动h5开发避免不了上传图片,一般我们使用html自带的控件input或者使用微信上传API.但微信上传API不是任何地方都可以使用的,使用html自带的控件input上传又免不了图片体积太大,上传不稳定.localResizeIMG4就是为此而生的. 本文演示版本localResizeIMG 4.9.35. 特点 兼容IOS,Android,PC.自动按需加载文件 支持压缩比例 支持原生JS.jQuery/Zepto 支持Promise特性 使用Base64 下载地址 localResizeI

  • Python通过PIL获取图片主要颜色并和颜色库进行对比的方法

    本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照颜色搜索了. 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死,开个玩笑,当然是通

  • python使用PIL给图片添加文字生成海报示例

    前言 曾经,我也算半个所谓的文学青年.大学前两年大部分时间泡在图书馆看各种文学类的书. 那时的我,对于未来有很多遐想:写小说.写时评.写诗歌... 总而言之,就是成为一个文字工作者 现在我确实成为了一个文字工作者,只不过写的是代码... 在某个月黑风高的晚上,看着满屏花花绿绿的代码,揉着酸涩的眼睛,打了一个长长的哈欠.突然进入了禅定时刻: "还记得年少时的梦吗?" 我又开始想写作了,一个写了几年代码的老男人,在被生活粗暴地摁在地上摩擦几回后,突然触发了内心的柔软,想写些东西. 要写些什

  • Python实现批量压缩图片

    本文为大家分享了Python实现批量压缩图片的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ __author__= 'Du' __creation_time__= '2018/1/5 10:06' """ import os from PIL import Image import glob DIR = 'C:/Users/Public/Pictures/Sample Pictures/' class

  • PHP压缩图片功能的介绍

    php程序开发中经常涉及到生成缩略图,利用php生成缩略图这个过程本身没难度,但是你知道php能够优化调节生成的缩略图的质量吗?也就是说php能够控制生成缩略图的清晰度以及生成后的缩略图的体积.下面我们就来看看如何利用php优化我们压缩后的图片. 对于如何使用php生成缩略图这里就不介绍了,大家可以参考本站下面这篇文章:PHP自动生成缩略图函数的源码示例 首先我们来看看用php压缩图片的程序代码: <?php header('Content-type: image/png'); $image=@

  • python 批量压缩图片的脚本

    简介 用Python批量压缩图片,把文件夹或图片直接拖入即可 需要 Needs Python 3 Pillow (用pip install pillow来安装即可) 用法 Usage 把文件夹或图片直接拖入即可.如果拖入的是文件夹,则会遍历子文件夹把所有图片都压缩了. 注意,压缩后的文件会直接替换原来的文件,文件名不变,尺寸不变,只改变压缩质量. 文件的开头有两个变量: SIZE_CUT = 4 表示大于4MB的图片都会进行压缩 QUALITY = 90 表示压缩质量90,这个质量基本人眼是看不

随机推荐