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的图片相似度的代码 ...
随机推荐
- iOS重一些常用的代理模式
(一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过和proto ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定.可靠.易用.功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以. 1:往往会有黑客,进行撞库挖掘漏洞,很多系统的账户有可 ...
- 15-前端开发之JavaScript
什么是 JavaScript ? JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出 ...
- 【三石jQuery视频教程】03.创建垂直时间表(Timeline)
视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...
- learn mips
可以使用MARS来编汇编,MARS是一个用java编的IDE,它是一个模拟环境. 样例:重要的句子输出三遍 .data str: .asciiz "weidiao is great\n&qu ...
- [转]MIDI常识20条
原文链接:http://www.midifan.com/modulearticle-detailview-488.htm Keyboard杂志老资格编辑Jim Aikin在纪念MIDI诞生20的时候发 ...
- CREATE TABLE 表名 AS SELECT 语句
1.新表不存在复制表结构即数据到新表 ? 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来, ...
- android开发之背景音乐与音效
android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) MediaPlayer class can be used to control playback of audio/v ...
- Asynchronous fs.stat.isDirectory()
function showFile() { for(var i = 0; i< files.length; i++){ var itemFile = files[i]; fs.stat(__di ...
- spring 事务传播特性 和隔离级别
事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...