python接收图片变成缩略图
python图像处理库:Pillow初级教程
Image类
Image.resize()和Image.thumbnail()的区别
根据代码和代码注释, 这两个函数都是对图片进行缩放, 两者的主要区别如下:
- resize()函数会返回一个Image对象, thumbnail()函数返回None
- resize()修改后的图片在返回的Image中, 而原图片没有被修改;
- thumbnail()直接对内存中的原图进行了修改, 但是修改需要保存
- resize()中的size参数直接设定了resize之后图片的规格,而thumbnail()中的size参数则是设定了x/y上的最大值. 也就是说, 经过resize()处理的图片可能会被拉伸,而经过thumbnail()处理的图片不会被拉伸
thumbnail()函数内部调用了resize(), 可以认为thumbnail()是对resize()的一种封装
Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
使用Image模块中的open函数打开一张图片:
>>> from PIL import Image
>>> im = Image.open("lena.ppm")
如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容
>>> from __future__ import print_function
>>> print(im.format, im.size, im.mode)
PPM (, ) RGB
format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。
如果文件不能打开,则抛出IOError异常。
当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:
>>> im.show()
创建缩略图 --> 常用方式, 但有限制, 看源码解释
如果有宽或长大于了, 测试出来的结果感觉有点像成比例似的
x, y = self.size
if x > size[0]:
y = int(max(y * size[0] / x, 1))
x = int(size[0])
if y > size[1]:
x = int(max(x * size[1] / y, 1))
y = int(size[1])
size = x, y
#!/usr/bin/env python
# -*- coding:utf-8 -*- # -----<缩略图>----- # import os, datetime
from PIL import Image def ThumbNailImg(infile):
# 略缩图路径
outfile = os.path.splitext(infile)[0] + "_ThumbNail" + ".jpeg"
im = Image.open(infile)
size = (206, 206)
im.thumbnail(size, Image.ANTIALIAS)
im.save(outfile)
return outfile
精确指定图片宽、高
def make_thumb(path, size):
"""生成缩略图"""
img = Image.open(path)
width, height = img.size
# 裁剪图片成正方形
if width > height:
delta = (width - height) / 2
box = (delta, 0, width - delta, height)
region = img.crop(box)
elif height > width:
delta = (height - width) / 2
box = (0, delta, width, height - delta)
region = img.crop(box)
else:
region = img # 缩放
thumb = region.resize((900, 500), Image.ANTIALIAS) filename = os.path.splitext(path)[0] + "_ThumbNail" + ".gif"
print(filename)
# 保存
thumb.save(filename, quality=70)
上下拼接图片
参考链接: https://blog.csdn.net/jiaju_cao/article/details/16958185
def merge_thumb(files, output_file):
"""上下合并图片"""
imgs = []
width = 0
height = 0 # 计算总宽度和长度
print(files)
for file in files:
img = Image.open(file)
if img.mode != 'RGB':
img = img.convert('RGB')
imgs.append(img)
if img.size[0] > width:
width = img.size[0]
height += img.size[1] # 新建一个白色底的图片
merge_img = Image.new('RGB', (width, height), 0xffffff)
cur_height = 0
for img in imgs:
# 把图片粘贴上去
merge_img.paste(img, (0, cur_height))
cur_height += img.size[1]
print(output_file) merge_img.save(output_file, quality=70) if __name__ == '__main__': # 上下合并图片
THUMB_PATH = "/opt/code/my_code/tornado_uedit"
# ['/opt/code/my_code/tornado_uedit/143351404554_ThumbNail.gif', '/opt/code/my_code/tornado_uedit/171047953516_ThumbNail.gif']
files = glob.glob(os.path.join(THUMB_PATH, '*_ThumbNail.gif'))
merge_output = os.path.join(THUMB_PATH, 'thumbs.gif')
merge_thumb(files, merge_output)
glob模块,glob.glob(pathname),返回所有匹配的文件路径列表
python接收图片变成缩略图的更多相关文章
- python下载图片超时的调查
在使用python3下载图片时, 常用的方法有urlretrieve和requests两种, 不管哪种方法在网速极慢的情况下, 会出现图片下载卡住现象.那如何解决呢? 小编根据网上提供的资料测试了几种 ...
- python智能图片识别系统(图片切割、图片识别、区别标识)
@ 目录 技术介绍 运行效果 关键代码 写在最后 技术介绍 你好! python flask图片识别系统使用到的技术有:图片背景切割.图片格式转换(pdf转png).图片模板匹配.图片区别标识. 运行 ...
- phpcms v9图片生成缩略图变成黑色解决方法
今天客户反映,上传的图片生成缩略图有的图片变成黑色,出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码.打 ...
- nginx实现本地图片生成缩略图
nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...
- android实现视频图片取缩略图
取缩略图不等同于缩放图片. 缩放图片是保持不失真的情况下缩放处理,并进行平滑处理. 缩略图则不然,允许失真,目的只是取出图片的轮廓. 保存Bitmap图片 private void saveBitma ...
- Python提取图片的ROI
图像处理经常需要提取图片的ROI,本文使用Python提取图片的ROI. 使用的Module是PIL (Pillow),一个图像处理库,用到的函数为类 Image 中的 crop 方法. 函数原型为: ...
- python 读取图片的尺寸、分辨率
#需要安装PIL模块 #encoding=gbk#--------------------------------------------------------------------------- ...
- Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug
由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...
- python 对比图片相似度
最近appium的使用越来越广泛了,对于测试本身而言,断言同样是很重要的,没有准确的断言那么就根本就不能称之为完整的测试了.那么目前先从最简单的截图对比来看.我这里分享下python的图片相似度的代码 ...
随机推荐
- 查找数据库中重复的值的数据,having的使用,count(1),sum等聚会函数
通过having代替where来使用count(1),sum()等函数.譬如如下数据id value1 21 32 33 53 6 可以写个语句统计value的分组 在这里,可以省略前面的sum(va ...
- Centos6 服务器病毒查杀命令历史
top whereis vhowazeclu ll /usr/bin/v* more /usr/bin/vhowazeclu ps aux|grep vhowa ps aux|grep vhowaze ...
- 快速掌握iOS API的一个小技巧
快速掌握iOS API的一个小技巧 周银辉 iOS SDK和Developer Library中提供了各个类以及函数的帮助文档,这很棒,但要想了解整个库的大体结构(比如UIKit下有哪些类,他们的继承 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
- Windows操作系统组策略应用全攻略
作者:佚名出处:IT专家网论坛2007-07-23 13:31 一.什么是组策略 (一)组策略有什么用? 说到组策略,就不得不提注册表.注册表是Windows系统中保存系统.应用软件配置的数据库,随着 ...
- awk中gsub的应用
(1)文件filename的内容 cat awk_file 1 2 3 $1,200.00 1 2 3 $2,300.00 1 2 3 $4,000.00 (2)去掉第四列的$和,并汇总第四列的和. ...
- miRNA特点
### miRNA特点 (1)广泛存在于真核生物中, 是一组不编码蛋白质的短序列RNA,它本身不具有开放阅读框架(ORF),并且由不同于mRNA的独立转录单位表达. (2)通常的长度为20-24 nt ...
- hihoCoder 后缀自动机三·重复旋律6
后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi ...
- java连接mysql
Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件 ...
- 10月27日PHP加载类、设计模式(单例模式和工厂模式)、面向对象的六大原则
加载类可以使用include.require.require_once三种中的任意一种,每个关键字都有两种方法,但是这种方法的缺点是需要加载多少个php文件,就要写多少个加载类的方法.一般也就需要加载 ...