Python Pillow Image.save 保存为jpg图片压缩问题

目录
  • Pillow图片格式转换
    • save()
    • convert()+save()
  • Pillow Image.save 保存为jpg图片压缩

Pillow图片格式转换

Pillow 库支持多种图片格式,您可以直接使用 open() 方法来读取图片,并且无须考虑图片是何种类型。Pillow 能够很轻松地实现图片格式之间的转换。

图片格式之间的转换主要有以下两种方法,下面分别对它们进行了介绍:

save()

顾名思义,save() 方法用于保存图像,当不指定文件格式时,它会以默认的图片格式来存储;如果指定图片格式,则会以指定的格式存储图片。save() 的语法格式如下:

Image.save(fp, format=None)

参数说明如下:

  • fp:图片的存储路径,包含图片的名称,字符串格式;
  • format:可选参数,可以指定图片的格式。

示例如下:

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
im.save('C:/Users/Administrator/Desktop/c.biancheng.net.bmp')

此时您的计算机桌面上会存在一个 c.bianchneg.net.BMP格式的图片。

convert()+save()

注意,并非所有的图片格式都可以用 save() 方法转换完成,比如将 PNG 格式的图片保存为 JPG 格式,如果直接使用 save() 方法就会出现以下错误:

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
im.save('C:/Users/Administrator/Desktop/c.biancheng.net.jpg')

错误信息如下所示:

#系统错误,RGBA不能作为JPEG图片的模式

OSError: cannot write mode RGBA as JPEG

引发错误的原因是由于 PNG 和 JPG 图像模式不一致导致的。其中 PNG 是四通道 RGBA 模式,即红色、绿色、蓝色、Alpha 透明色;JPG 是三通道 RGB 模式。因此要想实现图片格式的转换,就要将 PNG 转变为三通道 RGB 模式。

Image 类提供的 convert() 方法可以实现图像模式的转换。该函数提供了多个参数,比如 mode、matrix、dither 等,其中最关键的参数是 mode,其余参数无须关心。语法格式如下:

convert(mode,parms**)
  • mode:指的是要转换成的图像模式;
  • params:其他可选参数。

修改后的代码如下所示:

from PIL import Image
im = Image.open("C:/Users/Administrator/Desktop/c-net.png")
#此时返回一个新的image对象,转换图片模式
image=im.convert('RGB')
#调用save()保存
image.save('C:/Users/Administrator/Desktop/c.biancheng.net.jpg')

通过以上代码,成功将 PNG 格式的图片转换为了 JPG 格式。 

Pillow Image.save 保存为jpg图片压缩

在使用Pillow中的Image.save()方法,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的大小变成几十K。这是因为在保存为jpg的过程中,内部使用压缩算法对图片进行的压缩处理。

但是有些时候往往需要图片的大小不能变化太大或不能太小。所以在使用此方式时可以加入参数:

imObj.save(img_name, quality=95)

quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。

使用此参数后,图片大小会增加。如果图片的大小还不能满足你的需求,是否还有其他方式去增加图片大小呢?

通过查阅资料并尝试,发现save方法还有一个可以配合quality使用的参数,能够大大增加图片大小:

imObj.save(new_name, quality=95, subsampling=0)

subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。 (参考:https://en.wikipedia.org/wiki/Chroma_subsampling

可能的子采样值是0,1和2,对应于4:4:4,4:2:2和4:1:1(或4:2:0?)。

经过实践将值设为0便可以满足图片大小增大的需求。

注意: 以上方法的参数只针对于保存为JPG/JPEG格式的图片的情况。

参考文档:https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#jpeg

参考文档:https://pillow.readthedocs.io/en/4.0.x/PIL.html

到此这篇关于 Python Pillow Image.save 保存为jpg图片压缩问题的文章就介绍到这了,更多相关Pillow Image.save 保存为jpg内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们! 

(0)

相关推荐

  • Pillow使用Image篇的使用

    目录 安装Pillow 构建图像 图像对象 图像对象属性 安装Pillow pip install pillow 构建图像 Image.open(fp, mode ='r' ):打开图片文件,返回一个Image对象 fp:图片路径 mode:模式.如果给出,必须是r from PIL import Image im = Image.open(path) Image.alpha_composite(im1, im2):在im1对象上的透明层复合im2,返回一个Image对象 im1:Image对象

  • Python Pillow Image Invert

    本文主要是利用Python的第三方库Pillow,实现单通道灰度图像的颜色翻转功能. # -*- encoding:utf-8 -*- import os import sys from PIL import Image from PIL import ImageOps def img_gray_invert(img_path): """ invert input image. """ if not os.path.isfile(img_path

  • Python Pillow.Image 图像保存和参数选择方式

    保存时代码如下: figure_corp = figure.crop( (32*rate/2, 32*rate/2, 32-32*rate/2, 32-32*rate/2)) figure.save('save_picture/picture.jpg',quality=95,subsampling=0) figure_corp.save('save_picture/picture_crop.jpg',quality=95,subsampling=0) 其中quality数值会影响图片的质量(1最

  • Python Pillow Image.save 保存为jpg图片压缩问题

    目录 Pillow图片格式转换 save() convert()+save() Pillow Image.save 保存为jpg图片压缩 Pillow图片格式转换 Pillow 库支持多种图片格式,您可以直接使用 open() 方法来读取图片,并且无须考虑图片是何种类型.Pillow 能够很轻松地实现图片格式之间的转换. 图片格式之间的转换主要有以下两种方法,下面分别对它们进行了介绍: save() 顾名思义,save() 方法用于保存图像,当不指定文件格式时,它会以默认的图片格式来存储:如果指

  • python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例

    我就废话不多说了,直接上代码吧! from PIL import Image # 通道转换 def change_image_channels(image, image_path):     # 4通道转3通道 if image.mode == 'RGBA':         r, g, b, a = image.split()         image = Image.merge("RGB", (r, g, b))         image.save(image_path)  

  • Python 3 使用Pillow生成漂亮的分形树图片

    该程序通过绘制树干(最初是树:后来是树枝)并递归地添加树来绘制"树". 使用Pillow. 利用递归函数绘制分形树(fractal tree),分形几何学的基本思想:客观事物具有自相似的层次结构,局部与整体在形态.功能.信息.时间.空间等方面具有统计意义上的相似性,成为自相似性.自相似性是指局部是整体成比例缩小的性质. 版本:Python 3 # Adapted from http://rosettacode.org/wiki/Fractal_tree#Python # to para

  • Python+selenium实现截图图片并保存截取的图片

    这篇文章介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图.在selenium for Python中主要有三个截图方法,我们挑选其中最常用的一种. 截图技能对于测试人员来说应该是较为重要的一个技能. 在自动化测试中,截图可以帮助我们直观的定位错误.记录测试步骤. 记得以前在给某跨国银行做自动化项目的时候,某银的PM要求我们自动化测试的每一步至少需要1个截图,以证明每个功能都被自动化测试给覆盖过,在这种情况下截图就成了证明自动化测试有效性的重要手

  • Python 读取图片文件为矩阵和保存矩阵为图片的方法

    读取图片为矩阵 import matplotlib im = matplotlib.image.imread('0_0.jpg') 保存矩阵为图片 import numpy as np import scipy x = np.random.random((600,800,3)) scipy.misc.imsave('meelo.jpg', x) 以上这篇Python 读取图片文件为矩阵和保存矩阵为图片的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴

  • python 视频逐帧保存为图片的完整实例

    我就废话不多说了,直接上代码吧! import cv2 import os def save_img(): video_path = r'F:\test\video1/' videos = os.listdir(video_path) for video_name in videos: file_name = video_name.split('.')[0] folder_name = video_path + file_name os.makedirs(folder_name,exist_ok

  • python Pillow图像处理方法汇总

    这篇文章主要介绍了python Pillow图像处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html 安装:pip install pillow 操作图像: #!/usr/bin/env python3 # _*_ coding utf-8 _*_ __author__ = 'nx

  • 利用Python实现朋友圈中的九宫格图片效果

    前言 大家应该经常在朋友圈看到有人发九宫格图片,其实质就是将一张图片切成九份,然后在微信中一起发这九张图即可. 说到切图,Python 就可以实现,主要用到的 Python 库为 Pillow,安装使用 pip install pillow 即可,切图的主要步骤如下: 打开要处理的图片 判断打开的图片是否为正方形 如果是正方形,就进行九等分,如果不是正方形,先用白色填充为正方形,再进行九等分 保存处理完的图片 主要实现代码如下: # 填充新的 image def fill_image(image

  • Python Pillow(PIL)库的用法详解

    Pillow库是一个Python的第三方库. 在Python2中,PIL(Python Imaging Library)是一个非常好用的图像处理库,但PIL不支持Python3,所以有人(Alex Clark和Contributors)提供了Pillow,可以在Python3中使用. 官方文档路径:https://pillow.readthedocs.io/en/latest/ 一.安装Pillow pip install pillow Pillow库安装成功后,导包时要用PIL来导入,而不能用

随机推荐