Python在七牛云平台的应用(二)图片瘦身
(一)七牛云平台的图片瘦身功能简介:(引用自官网)
针对jpeg、png格式图片
- 瘦身后分辨率不变,格式不变。
- 肉眼画质不变。
- 图片体积大幅减少,节省 CDN 流量
官网给的图片压缩率很高,官网给的「葡萄」图片瘦身在不改变分辨率和格式的情况下压缩率为65.49%,我自己测试了一张小图在后文中会有,原来的大小在「22kb」压缩后为「18kb」,据一般情况来看,压缩率虽然没有官网给的那么夸张,但是也能基本达到80%左右,所以这个压缩率还是很不错的.
(二)需求分析
我们可以设想几个场景
『1:当你在网站上图片加载都需要流量,而压缩率80%几乎就是直接把花的钱*0.8,如果图片很多,那这将能够节约一大笔钱』
『2:有时候会让向网站上传自己的证件照/免冠照,往往还会限定照片的大小,而这个时候如果大小超出了,一般情况下只能通过转格式,裁剪等方式.而七牛的图片瘦身在这种情况下就能产生了作用了』
『3:由于七牛的介绍-肉眼画质不变(上面高亮处已经标出),那么当今很多图片的大小相当恐怖,如果存储在硬盘上也是一个很大的开支,如果经过了图片瘦身,这就能省下很大的硬盘开销,压缩体积.』
总结:以上列举的场景不难看出图片瘦身对我们还是有很多应用的,下面就对于怎么在python中使用七牛的图片瘦身功能进行介绍.
(三)使用这个接口的准备
这里需要上一篇博文中的操作七牛云空间的方法->Python在七牛云平台的应用(一) (传送门)
我们需要用到的有qiniu库的上传/鉴权命令.以及requests库得到处理后的图像
七牛的这个接口是要付钱的,不过很便宜,可先向自己的账户充入¥1避免无法使用的情况,具体的收费为¥0.1/1000次
(四)解决问题的步骤
首先,我们先分析七牛云的这个API的接口:
http://xxx.xxx.glb.clouddn.com/xxx.jpg?imageslim
<!--这里的实际接口就是在最后面的 ?imageslim 前面的是空间的外链地址和文件名-->
可以得知它的处理方式为在我们自己的bucket中的文件的外链地址后面加上?imageslim即可获得压缩后的图像
所以我们要进行的步骤如下:
1)上传指定类型的图像到我们的bucket中(判定是否为jpeg和png格式)-用split对文件后缀进行分析并用上一篇中的上传到七牛云的方法对文件上传.
2)得到上传的图片的外链地址
3)准备requests库的params属性将imageslim加到链接后面并请求.
4)将图片以二进制的形式写入图片中
(五)程序的实现,请见下方代码:操作的图片还是uptest.jpg
#七牛云"图片瘦身"功能的python实现方法:
#请得到自己的secret和access key用于上传图片到空间中进行处理
#图片瘦身是七牛云的一项收费项目,价格为 ¥0.1/1000次 测试时请先存1元进入 #import SDK
from qiniu import Auth,put_file,etag
import qiniu.config
import requests #指定图片处理后缀的格式
picu=['jpg','jpeg','png','PNG','JPEG','JPG'] #上传
def upload(bucket,path,filename,key,url):
token = key.upload_token(bucket, filename, 3600)
print('正在上传..')
reform,inform = put_file(token, filename, path)
if reform != None:
print('已经成功地将{}->>{}'.format(filename,bucket))
print("正在处理您的图片...")
url=url + '/' + filename
path=path.split('/')[-1]
download(url,path)
else:
print('这里出现了一个小错误.无法上传..') #下载
def download(url,path): if url.split('.')[-1] in picu:
r = requests.get(url,params='imageslim')
r.raise_for_status()
contenter=r.content
with open(path,'wb') as filer:
filer.write(contenter)
filer.close()
print("已经将转换后的文件{}保存到了本地".format(path))
else:
print('抱歉,您的图片的格式不支持瘦身操作.') #主体
def main():
#填写你的 AK 和 SK
accesskey = input('请输入您在七牛云的AccessKey:')
secretkey = input('请输入您在七牛云的SecretKey:') #鉴定身份
keyq=Auth(accesskey,secretkey) #所要操作的空间
bucketname =input("请输入要操作的空间(公开)名字:") #所要操作空间的外链地址
urlbucket = input("请输入空间所绑定的域名或者默认外链地址:") #判定操作类型
while 1:
order=input('请输入你需要进行的操作:')
mode=order.split(' ')[0]
if mode == '转换':
path=order.split(' ')[1]
fname=path.split('/')[-1:][0]
print('正在尝试生成Token.请稍后..')
upload(bucketname,path,fname,keyq,urlbucket)
if mode == '退出':
print("欢迎您的使用..")
break print("+----------------------------------------+")
print("| 欢迎使用七牛的图片瘦身功能 |")
print("+----------------------------------------+")
print("|本程序须知: |")
print("|1.七牛只能对jpg和png格式的图片进行瘦身 |")
print("|2.您需要提供服务的Accesskey,Secretkey |")
print("|3.您需要提供 bucket名字和bucket外链地址. |")
print("+----------------------------------------+")
print("|使用方法: |")
print("|1.瘦身输入格式: 转换 图片位置(包括后缀). |")
print("|2.退出输入格式: 退出 |")
print("+----------------------------------------+")
main()
程序运行的截图:
被程序压缩的图片:(压缩前约22kb)
压缩后的图片:(压缩后约18kb)
(六)错误分析
根据官网的说明,当发生错误时会返回原图.
(七)总结和拓展
总结:这一次探究的就是七牛云的第一个API-图片瘦身(imageslim),这个在我们的生活中还是应用中都能获得受益,再之后的几篇博文中我也会继续分享好的七牛云的API和怎么使用.
拓展:1.在一个文件夹下有很多图片得情况下可以通过遍历文件夹批量进行“瘦身”
2.上传后如果空间足够也可以作为图片备份当图片误删时候可以及时恢复
Python在七牛云平台的应用(二)图片瘦身的更多相关文章
- Python在七牛云平台的应用(三)简单的人脸识别
前言 这是最后一篇介绍python在七牛云平台的应用了,因为-前两篇文章第一篇分享了怎么安装七牛的官方库以及怎么对自己的空间进行下载上传,删除等行动.而第二篇则分享了怎么利用七牛的API接口,由于七牛 ...
- Python在七牛云平台的应用(一)
七牛云:(引用百度的介绍)七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务.围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直 ...
- Python实现七牛云视频播放
这篇文章是使用Python的Web框架Django Rest Framework来提供视频相关的api接口,主要功能包括视频上传.视频转码.视频访问授权.删除视频文件.视频截图功能. 七牛云上的基本概 ...
- python+ueditor+七牛云存储整合
开发环境:python pyramid. 參考网址:http://developer.qiniu.com/docs/v6/sdk/python-sdk.html,http://my.oschina.n ...
- php利用七牛云的对象存储完成图片上传-高效管理图片
在搭建个人博客时,大家都会买一台云服务器.可是图片的存放一直是一个问题,冷月帮大家找到一个免费的第三方平台对象存储-七牛云.大家可以把图片上传到七牛云的对象存储,大大节约服务器的压力. 首先,大家在使 ...
- iOS 七牛云上传并获取图片----【客户端】
最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的token,无奈,后台自命清高,不与理会,没办法呀,于是自己搞呗.首先呢在在七牛上注册一个账号,然后呢添加一个存储空间这时候空间名 ...
- laravel7文件上传至七牛云并保存在本地图片
HTML代码: <form class="layui-form" action="{{route('doctor.store')}}" method=&q ...
- selenium python (七)层级定位(二次定位)
#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其 ...
- TOP100summit 2017 七牛云许式伟:不用JAVA和C语言,我为什么坚持Go语言
本文编辑:Cynthia 2009年,谷歌发布第二款开源编程语言,Go语言.8年过去了,很多初创公司早期使用Go进行开发,包括云计算巨头Docker.而Go语言在中国的普及程度还比不上JAVA和C语言 ...
随机推荐
- 解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接。
解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接.的方法 中文版的CRT由于汉化的问题(把null翻译成无了),导致每次打开都会有个防火墙的错误提示:数据库里没 ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- C/C++---printf/cout 从右至左压栈顺序实例详解
__cdecl压栈顺序实例 明白计算:计算是从右到左计算的 栈和寄存器变量:x++,是将计算结果存放到栈空间,最后是要出栈的:而++x和x是将计算结果直接存放到某个寄存器变量中(是同一个),所以计算完 ...
- SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...
- 根据wsdl,基于wsimport生成代码的客户端
根据wsdl,基于wsimport生成代码的客户端 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦. 局限性:wsimport ...
- 如何用tomcat发布自己的Java项目
如何用tomcat发布自己的Java项目 tomcat是什么?它是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器.我们用Java开发出来的web项目,通过tomcat发布出来,别人就可 ...
- sql注入学习心得与sqlmap使用心得
做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...
- Eclipse给方法或者类添加自动注释
自动生成注释: 在团队开发中,注释是必不可少的,为了是自己的注释看起来更加优雅,注释的格式应该统一,我们可以使用Eclipse注释模板自动生成注释. 具体操作如下: 打开注释模板编辑窗口:Window ...
- shell下如何删除文件的某一列
答:cat file | awk '{$1=null;print $0}' (删除第一列)
- 加强树状数组luogu3368
暴力树状数组30分,这该怎么办: 知识点回顾 差分数组中 开头结尾改变了值之后 求他的前缀,发现区间内所有数都改变 然后我们做差分树状数组 #include<cstdio> using n ...