Pillow图像缩放操作

在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。

resize() 函数的语法格式如下:
resize(size, resample=image.BICUBIC, box=None, reducing_gap=None)

参数说明:

size:元组参数 (width,height),图片缩放后的尺寸;

resample:可选参数,指图像重采样滤波器,与 thumbnail() 的 resample 参数类似,默认为 Image.BICUBIC;

box:对指定图片区域进行缩放,box 的参数值是长度为 4 的像素坐标元组,即 (左,上,右,下)。注意,被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;

reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有 3.0 和 5.0。

注意,resize() 会返回一个新的 image 对象。下面是一组对图像进行放大操的示例:

from PIL import Image
im = Image.open(“C:/Users/Administrator/Desktop/c-net.png”)
try:
#放大图片
image=im.resize((550,260))
#将新图像保存至桌面
image.save(“C:/Users/Administrator/Desktop/放大图像.png”)
print(“查看新图像的尺寸”,image.size)
except IOError:
print(“放大图像失败”)
输出结果:
查看新图像的尺寸 (550, 260)
放大后的图片效果。如下所示:

pilloe缩放图像
对图片的局部位置进行放大,示例如下:

from PIL import Image
im = Image.open(“C:/Users/Administrator/Desktop/c-net.png”)
try:
#选择放大的局部位置,并选择图片重采样方式
# box四元组指的是像素坐标 (左,上,右,下)
#(0,0,120,180),表示以原图的左上角为原点,选择宽和高分别是(120,180)的图像区域
image=im.resize((550,260),resample=Image.LANCZOS,box=(0,0,120,180))
image.show()
#保存
image.save(“C:/Users/Administrator/Desktop/放大图像.png”)
print(“查看新图像的尺寸”,image.size)
except IOError:
print(“放大失败”)

创建缩略图
缩略图(thumbnail image)指的是将原图缩小至一个指定大小(size)的图像。通过创建缩略图可以使图像更易于展示和浏览。

Image 对象提供了一个 thumbnail() 方法用来生图像的缩略图,该函数的语法格式如下:

thumbnail(size,resample)

size:元组参数,指的是缩小后的图像大小;

resample:可选参数,指图像重采样滤波器,有四种过滤方式,分别是 Image.BICUBIC(双立方插值法)、PIL.Image.NEAREST(最近邻插值法)、PIL.Image.BILINEAR(双线性插值法)、PIL.Image.LANCZOS(下采样过滤插值法),默认为 Image.BICUBIC。

使用示例如下:

from PIL import Image
im = Image.open(“C:/Users/Administrator/Desktop/c-net.png”)
im.thumbnail((150,50))
print(“缩略图尺寸”,im.size)
#将缩略图保存至桌面
im.save(“C:/Users/Administrator/Desktop/th.png”)

输出结果:

缩略图尺寸 (118, 50)
注意,缩略图的尺寸可能与您指定的尺寸不一致,这是因为 Pillow 会对原图像的长、宽进行等比例缩小,当指定的尺寸不符合图像的尺寸规格时,缩略图就会创建失败, 比如指定的尺寸超出了原图像的尺寸规格。

批量修改图片尺寸

在图像处理过程中,对于某些不需要精细处理的环节,我们往往采用批量处理方法,比如批量转换格式,批量修改尺寸,批量添加水印,批量创建缩略图等,这是一种提升工作效率的有效途径,它避免了单一、重复的操作。通过 Pillow 提供的 Image.resize() 方法可以批量地修改图片尺寸,下面看一组简单的示例。

首先找一些类型相同,但尺寸不一的图片,并把它们放入桌面的 image01 文件夹中。如下所示:

批量处理图片

图3:待处理的图片

下面开始编写代码:
批量修改图片尺寸

import os
from PIL import Image
#读取图片目录
fileName = os.listdir(‘C:/Users/Administrator/Desktop/image01/’)
print(fileName)
#设定尺寸
width = 350
height = 350
如果目录不存在,则创建目录
if not os.path.exists(‘C:/Users/Administrator/Desktop/NewImage/’):
os.mkdir(‘C:/Users/Administrator/Desktop/NewImage/’)

循环读取每一张图片

for img in fileName:
old_pic = Image.open(‘C:/Users/Administrator/Desktop/image01/’ + img)
new_image = old_pic.resize((width, height),Image.BILINEAR)
print (new_image)
new_image.save(‘C:/Users/Administrator/Desktop/NewImage/’+img)

输出结果如下所示:

[‘向日葵.jpg’, ‘国宝.jpg’, ‘矩形图.jpg’, ‘蝴蝶.jpg’]
<PIL.Image.Image image mode=RGB size=350x350 at 0x2B9E670>
<PIL.Image.Image image mode=RGB size=350x350 at 0x31D0C90>
<PIL.Image.Image image mode=RGB size=350x350 at 0x2B90DB0>
<PIL.Image.Image image mode=RGB size=350x350 at 0x31D0C90>
NewImage 目录的内容如下:

pillow图像处理

图4:处理完成的图片

Pillow图像缩放操作相关推荐

  1. halcon图像缩放

    用halcon自带的smartcontrol控件进行图像缩放操作 /// <summary>/// 图像缩放/// </summary>/// <param name=& ...

  2. 在simulink中实现图像的读取和缩放操作

    目录 一.理论基础 二.核心程序 三.仿真测试结果 作者ID :fpga和matlab CSDN主页:https://blog.csdn.net/ccsss22?type=blog 擅长技术: 1.无 ...

  3. 【UI 设计 - Adobe Illustrator】基本设置 (图像显示 | 图像缩放 | 置入导出 | 标尺 | 网格 | 参考线 | 画板)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50232767 一. 基础操作 1. 设置图像显示效果 (1) ...

  4. 用线性插值算法实现图像缩放

    用线性插值算法实现图像缩放 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 在Windows中做过图像方面程序的人应该都知道Windows ...

  5. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

    1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...

  6. OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()

    OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize() 一.图像金字塔定义: 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是 ...

  7. windows mobile 上面固定比例图像缩放

    最近一段时间太忙,上篇博客说是把图像缩放的算法放上来,今天放上来.这个算法参考的是线性插值法来实现,也就是最简单的方法,在手机上面受cpu计算能力的限制还有对图片质量要求不高,所以采用这种算法.如果需 ...

  8. 图像缩放、旋转、翻转、平移

    本文介绍几种常见的图像几何变换方法. 1. 图像缩放 图像缩放就是将源图像中的像素点经过算法映射到目标图像的像素点的过程,即找出目标图像中的像素点Pd(Xd,Yd)对应的源图像的像素点Ps(Xs,Ys ...

  9. OpenCV-Python学习(19)—— OpenCV 图像几何变换之图像缩放(cv.warpAffine、cv.resize)

    1. 学习目标 学习图像的缩放矩阵: 学习 OpenCV 图像缩放函数 cv.resize 和 cv.warpAffine. 2. 图像的缩放矩阵 缩放是物体在 x 轴和 y 轴的缩放比例. fx 是 ...

最新文章

  1. go split 正则_WEGO使用—华大基因在线GO功能注释
  2. 在linux下创立bash文件,Linux文件管理及bash特性
  3. 什么是Session共享?请举出使用场景
  4. [Redis6]配置文件详解
  5. python什么是堆什么是栈_顶置篇:CPython的内存概念:栈、堆和引用
  6. 转载自(梦想天空)【必备】史上最全的浏览器 CSS JS Hack 手册
  7. (补)20200911:力扣204周周赛题解下
  8. leetcode_day02
  9. Lambda表达式公共拼接函数(原创)
  10. 铁路售票系统_自助售票机功能升级了!快来掌握新技能!
  11. 漫画小程序源码全开源商业版
  12. python游戏设计毕业论文_游戏设计游戏策划毕业论文
  13. Ubuntu 安装rabbitvcs
  14. 【JavaWEB】Redis基础
  15. 大数据行业调研报告(最新版)
  16. 1. 一文看懂奇异值分解
  17. 中职教计算机专业发展,中等职业教育中计算机专业教育思考
  18. 快解析教你,快速注册个人域名
  19. As I Please--PartⅠ
  20. 安装Adobe After Effects(AE)的时候卡在登陆界面?

热门文章

  1. 安装Vundle和YouCompleteMe
  2. telnet远程管理(思科)
  3. Android获取IP地址的两种方式(准确版)
  4. 免费企业邮箱注册申请,企业邮箱怎么申请免费?
  5. 天机!常人极难知道的生命奥秘
  6. java 骆驼命名_菜鸟笔记:java变量命名及峰驼式命名法
  7. 为什么要有软件生存周期过程
  8. c语言中的inf和nan
  9. 互联网创业真的很难找到“技术合伙人”吗?
  10. Eclipse各种小图标的含义