Python在七牛云平台的应用(二)图片瘦身

(一)七牛云平台的图片瘦身功能简介:(引用自官网)

针对jpeg、png格式图片

  1. 瘦身后分辨率不变,格式不变。
  2. 肉眼画质不变。
  3. 图片体积大幅减少,节省 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.上传后如果空间足够也可以作为图片备份当图片误删时候可以及时恢复

时间: 2024-10-25 17:08:02

Python在七牛云平台的应用(二)图片瘦身的相关文章

python+ueditor+七牛云存储整合

开发环境:python pyramid. 参考网址:http://developer.qiniu.com/docs/v6/sdk/python-sdk.html,http://my.oschina.net/duoduo3369/blog/174655 项目中要将ueditor集成到网站,但是图片上传有问题.于是采取客户端(终端用户) => 七牛 => 业务服务器的方式来处理图片.详细的流程这篇文章写的很清楚:http://my.oschina.net/duoduo3369/blog/17465

iOS 七牛云上传并获取图片----【客户端】

       最近做了七牛云存储的有关内容,涉及到与后台交互获取验证的token,无奈,后台自命清高,不与理会,没办法呀,于是自己搞呗.首先呢在在七牛上注册一个账号,然后呢添加一个存储空间这时候空间名是用来识别存储空间的位置,而地区的选择则是设置存储七牛服务器的位置,那么选择一个公开空间免费试用就可以了~~        创建好账号就是查看官方文档编写demo的流程了,顺便附带一个下载地址:http://developer.qiniu.com/code/v7/sdk/objc.html    下

selenium python (七)层级定位(二次定位)

#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其中的一个,这时候需要用到层级定位.先定位到父元素,然后再通过父元素定位子孙元素 #导入包from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.commo

python刷新七牛云CDN缓存

# -*- coding: utf-8 -*- # flake8: noqa import qiniu from qiniu import CdnManager # 账户ak,sk access_key = '...' secret_key = '...' auth = qiniu.Auth(access_key=access_key, secret_key=secret_key) cdn_manager = CdnManager(auth) # 需要刷新的文件链接 urls = [ 'http

企业数据云备份——七牛云(linux、windows)

                                                 企业数据云备份--七牛云(linux.windows) 一.七牛云介绍 七牛云,在国内是一个比较出名云平台,很多人.公司,或多或少也使用过七牛云来备份文件.对七牛云来说,它主要给用户提供了无限制的空间,稳定性,且最主要的,它提供了用户的备份的工具--qshell,可在多系统中应用的它,不失为一种很好的数据备份方法. 七牛云的使用也是比较简单,只有你创个账号就可以了,然后获取到AK.SK的密钥就可以了

八年深耕,七牛云为企业提供一站式专业视频云服务

近日,国务院发展研究中心国际技术经济研究所在<中国智能化转型与技术创新高层研讨会>中预测,2023 年中国云计算产业规模将超过 3000 亿人民币.其中,中国政府和企业上云率将超过 60%,全站自主可控计算平台将成为政府和大型企业的主流 IT 基础设施. 而在众多企业上云的需求中,视频云服务正酝酿着一个不可估量的市场.比如短视频.在线教育.在线办公等应用的爆发,就在短时间内创造了海量对视频云服务的需求,并逐步常态化.同时,随着 5G 时代的到来,视频的流量占比还将进一步提升,未来在整个互联网产

JavaWeb结合七牛云存储搭建个人相册

JavaWeb结合七牛云存储搭建个人相册 一.引言 1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应地对带宽要求也会提高,这就造成了成本的增加.其实现在已经流行云存储,我们可以把图片.大文件等放到第三方提供的云存储服务上,这会减少一部分成本.这门课程就介绍了JavaWeb结合七牛云存储来搭建个人相册服务. 2. 预备知识 掌握Servlet+JSP,能了解Bootstrap更好. 二.Just Do

JavaWeb结合七牛云存储搭建个人相册服务

JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应地对带宽要求也会提高,这就造成了成本的增加.其实现在已经流行云存储,我们可以把图片.大文件等放到第三方提供的云存储服务上,这会减少一部分成本.这门课程就介绍了JavaWeb结合七牛云存储来搭建个人相册服务. 2. 预备知识 掌握Servlet+JSP,能了解Bootstrap更好. 二.Just D

Electron+React+七牛云 实战跨平台桌面应用

第1章 进入 Electron 的世界介绍了整个课程的背景知识,项目简介,学习流程,可以掌握的知识点,以及学习方法和前置知识. 第2章 我们的第一个应用本章讲述了 Electron 的基础用法,包括搭建 Electron 开发环境.进程和线程的知识.BrowserWindow 模块.跨进程访问等内容. 第3章 神奇的 React本章回顾了 React 的基础知识,从而引出了全新的 React Hooks,详细讲解了 useState.useEffect.自定义Hook 等内容. 第4章 双剑合璧