质量、速度、廉价,选择其中两个

如果需要做图片识别那么必定需要大量的训练素材,我们通常使用爬虫来获取,python爬取bing图片,python爬取百度图片,但是怕取下来的图片大小不一,再进行训练之前必须进行裁剪和压缩,今天就来讲一讲图片压缩,下面这个例子是我做一个项目时用到的

import PIL.Image as Image
import os#图片压缩批处理
def compressImage(srcPath,dstPath):for filename in os.listdir(srcPath):#如果不存在目的目录则创建一个,保持层级结构if not os.path.exists(dstPath):os.makedirs(dstPath)#拼接完整的文件或文件夹路径srcFile=os.path.join(srcPath,filename)dstFile=os.path.join(dstPath,filename)# 如果是文件就处理if os.path.isfile(srcFile):try:#打开原图片缩小后保存,可以用if srcFile.endswith(".jpg")或者split,splitext等函数等针对特定文件压缩sImg=Image.open(srcFile)w,h=sImg.sizedImg=sImg.resize((int(w/2),int(h/2)),Image.ANTIALIAS)  #设置压缩尺寸和选项,注意尺寸要用括号dImg.save(dstFile) #也可以用srcFile原路径保存,或者更改后缀保存,save这个函数后面可以加压缩编码选项JPEG之类的print (dstFile+" 成功!")except Exception:print(dstFile+"失败!!!!!!!!!!!!!!!!!!!!!!!!!!!!")# 如果是文件夹就递归if os.path.isdir(srcFile):compressImage(srcFile, dstFile)if __name__=='__main__':compressImage("G:/兔屎图片_未处理","G:/兔屎图片_已处理")

可能这个方法不是很通用,因为我当时处理的图片都是很大的,一个图片大概在3M-5M这样,而我并不需要这么高分辨率,因为太高分辨率会影响我机器学习的效率,我就采用最粗暴的方法,使用PIL库中的Image类,调用resize方法把图片的宽高直接砍一半,但是这里我还是采用了Image.ANTIALIAS滤镜虽然这样会使我图片压缩的效率降低一大截,但也尽最大可能的保留了图片的信息。

但我后来又遇到一种更好的压缩图片的方法,使用tinify API进行压缩,通过它压缩的图片信息基本上没有损失,是个压缩图片利它的官方网站:https://tinypng.com/

在它官网上也可以直接进行压缩,不过只能小批量的操作,一次最多20张,下面是使用它进行图片压缩的脚本,你需要自己申请Key填写到程序中

import os
import os.path
import click
import tinifytinify.key = "你申请的Key,放在这里."
targetFileDirName = "/compress" #输出目录
targetIsDir = False
totalPicCount = 1 #压缩图片总数
compressSuccessPicCount = 0 #图片压缩成功的数量#这里就是通过tingPng压缩图片的核心代码
def compress_core(file, outputFile):source = tinify.from_file(file)  #压缩指定文件source.to_file(outputFile)       #将压缩后的文件输出当指定位置def compress_file(file):if not os.path.isfile(file):print("你指定的不是文件,不给你压缩这个文件!")returnsrcFiledirName = os.path.dirname(file)basename = os.path.basename(file)  #获得文件全称 例如  migo.pngfilename, fileSuffix = os.path.splitext(basename)  #获得文件名称和后缀名  例如 migo 和 pngif picIsCorrect(fileSuffix):targetFileDir = srcFiledirName + targetFileDirNameif not os.path.isdir(targetFileDir):os.mkdir(targetFileDir)print("正在压缩的图片:  %s"%(srcFiledirName + "/" +basename))compress_core(file, targetFileDir + "/" + basename)global compressSuccessPicCountcompressSuccessPicCount += 1global targetIsDirif targetIsDir is not True:print("------------压缩的图片在:  %s  目录下"%(targetFileDir))else:print("暂不支持压缩 {} 格式的文件, 文件名: {}".format(fileSuffix, basename))def picIsCorrect(fileSuffix):if fileSuffix == ".png" or fileSuffix == ".jpg" or fileSuffix == ".jpeg":return Trueelse:return Falsedef compress_dir(dir):if not os.path.isdir(dir):print("你输入的不是一个目录")returnelse:global targetIsDirtargetIsDir = TruesrcFilePath = dir #源路径for root, dirs, files in os.walk(srcFilePath):global totalPicCounttotalPicCount = len(files)for name in files:compress_file(srcFilePath + "/" + name)break #仅遍历当前目录print("------------所有压缩的图片都在: %s  目录下" %(srcFilePath + targetFileDirName))@click.command()
@click.option('-f', "--file",  type=str,  default=None,  help="单个文件压缩")
@click.option('-d', "--dir",   type=str,  default=None,  help="被压缩的文件夹")
def run(file, dir):if not file is None:compress_file(file)         #压缩指定的文件passelif not dir is None:compress_dir(dir)           #压缩指定的目录passelse:compress_dir(os.getcwd())   #压缩当前文件夹print("当前目录: %s"%(os.getcwd()))print("------压缩结束!------图片总数 ({}),  压缩的图片数量 ({})".format(totalPicCount, compressSuccessPicCount))if __name__ == "__main__":run()

教你用Python压缩图片相关推荐

  1. python压缩图片--指定压缩大小且保真压缩

    代码核心思路 循环降低图片质量quality 直至图片质量大小符合目标质量后退出循环 pillow压缩失真严重 ''' pip install pillow ''' from io import By ...

  2. python朋友圈图片_教你用python将图片变成九宫格,打造高逼格朋友圈九宫格图片...

    python的出现,使很多困难的东西都简单化了,有时你在朋友圈看到朋友发的九宫格朋友圈,你会觉得很厉害,下面小编教你用python将一张图片变成九宫格,帮你打造高逼格朋友圈发文. 这个项目主要分为三个 ...

  3. 【pngquant】使用Python压缩图片,降低网页加载时间

    更多内容请点击 我的博客 查看,欢迎来访. 用来做什么? 个人在写博客时,发现上传的图片如果很大,web访问第一次加载该图片就特别的慢. 可以考虑使用缩略图,浏览时显示缩略图,如果要看高清图,需点击图 ...

  4. 图片太多怎么办?教你怎么批量压缩图片大小

    小编在写推文的时候,为了实现图文并茂的效果,需要在文档中插入一些图片,但是,图片体积过大势必会影响文件传输的时间.如果是多张图片一起上传,进度就更慢了,那怎么办呢?其实,我们可以进行图片批量压缩(ht ...

  5. python 压缩图片为指定大小

    转自:scipy笔记-scipy.misc.imresize用法(方便训练图像数据) from skimage.transform import resize # 压缩图片 def predict_m ...

  6. 多张图片怎么压缩?教你一键批量压缩图片

    想必大家看了许多压缩图片的教程,对于单张图片的压缩已经不陌生了.那么大家一定会问了:"我手里有很多图片要是一张一张的压缩岂不是很费事,有没有什么软件可以多张图片同时进行压缩呢?"别 ...

  7. python --压缩图片不改变图片尺寸

    方法1 from PIL import Image import osdef compress_image(infile, outfile, quality=50):""" ...

  8. python压缩图片像素_python使用pil进行图像处理(等比例压缩、裁剪)实例代码

    PIL中设计的几个基本概念 1.通道(bands):即使图像的波段数,RGB图像,灰度图像 以RGB图像为例: 2.模式(mode):定义了图像的类型和像素的位宽.共计9种模式: 3.尺寸(size) ...

  9. 教你用Python将图片转化为字符画!附源代码

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 Whatever you are facing today, remem ...

最新文章

  1. 如何在阅读参考文献时,有效率的做笔记?
  2. LG P4074 [WC2013] 糖果公园(带修莫队,树上莫队)
  3. (45)css面试题集锦二
  4. 为支持nginx高并发而修改的一些Linux内核参数
  5. POJ NOI MATH-7654 等差数列末项计算
  6. 七点建议帮助您部署云存储
  7. RS485远程无线模块
  8. 【金融123】ISDA协议
  9. 为一个理想而奋斗一生
  10. 企查查app sign算法破解初步探索
  11. 如何搭建一个自己的网站-服务器篇
  12. 新瓶装旧酒,Ares 银行木马新增 Qakbot DGA 算法
  13. 推荐一款工作学习中十分好用的插件--uTools
  14. 百旺智能编码_开票选码有神器,“智能赋码”教您一键匹配!
  15. 如何使用 Lightly 邀请朋友在线协作?
  16. k8s集群外go客户端示例
  17. 到场率高达96% 这才是高水准技术大会应该有的样子
  18. Objective-C语言_数组练习题
  19. 将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean
  20. 物体碰撞和检测——Hit UFO改进版射箭游戏

热门文章

  1. 近期面试感悟——大学教育与职业教育
  2. 1.如何让另一台电脑访问本机发布的web项目
  3. 使用客户管理系统分析企业数据
  4. 【财富空间】北京航空航天大学王田苗教授:人工智能与机器人前沿科技发展与投资布局
  5. 手写链表底层实现(java实现)
  6. Android6.0通过WiFi名称密码连接WiFi的方案
  7. iOS应用处于前台、后台、应用被杀掉场景-收到远程推送内容进行收款语音播报;
  8. 编程大神都读过的10本经典神书,找到了
  9. 利用SpaceVim打造完美Go IDE
  10. 10个简洁的Python编码技巧