基于WxPython的批量图片缩放工具
(说明: 这是我2007年写在cublog(China Unix)上的博客,现在把它转到这里来.)
经常有人抱怨,在QQ上互传照片的时候因为照片太大而速度极慢[普通500万数码相机拍下来的最大分辨率照片通常为3M]。其实过多的分辨率对图像质量并没有对视觉上产生很大影响,比如1024x768的图片用来传给远方的朋友已经足够了,而大小仅有几百k。所以只要把图片缩小为原来的n倍、占用的空间将是原图的n*n分之一(原理上是这样的,但是对于jpeg压缩,压缩将比取决于图像细节等因素,但肯定是会有减无增的,呵呵)。
而使用windows的绘图程序或photoshop又太慢[只能一张一张地转换],需要一个能批量缩放图片的工具,于是我使用wxpython写了一个批量图片缩放工具(同时也是一个图片浏览工具哦)。
关键函数:
1,图像打开和浏览
def OnButton1LeftUp(self, event):#浏览下一幅图片if self.index > 0:self.index -= 1 #图像次序减一im = Image.open(self.images[self.index])self.imagesize = im.sizeim = im.resize((320, 240))im.save(self.tempimage,'JPEG')self.bitmapPic.SetBitmap(bitmap=wx.Bitmap(self.tempimage,wx.BITMAP_TYPE_JPEG)) self.staticTextWidth.SetLabel('\xb3\xa4\xa3\xba ' +str(self.imagesize[0]))self.staticTextHeight.SetLabel('\xbf\xed\xa3\xba ' +str(self.imagesize[1]))self.saveSize = self.imagesizeself.SetSaveSizeText()del imevent.Skip() def OnButton2LeftUp(self, event): #浏览上一幅图片if self.index < self.count - 1: self.index += 1 #图像次序加一im = Image.open(self.images[self.index])self.imagesize = im.sizeim = im.resize((320, 240))im.save(self.tempimage,'JPEG')self.bitmapPic.SetBitmap(bitmap=wx.Bitmap(self.tempimage,wx.BITMAP_TYPE_JPEG)) self.staticTextWidth.SetLabel('\xb3\xa4\xa3\xba ' +str(self.imagesize[0]))self.staticTextHeight.SetLabel('\xbf\xed\xa3\xba ' +str(self.imagesize[1]))self.saveSize = self.imagesizeself.SetSaveSizeText()del imevent.Skip()def OnBtnOpenLeftUp(self, event): #打开图片[多个]dlg = wx.FileDialog( #打开文件对话框self, message="Please choose images",defaultDir=os.getcwd(), defaultFile="*.jpg",wildcard=wildcard,style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR)if dlg.ShowModal() == wx.ID_OK:self.images = dlg.GetPaths()self.count = len(self.images)if self.count == 0:dlg.Destroy()event.skip()im = Image.open(self.images[0])self.imagesize = im.sizeim = im.resize((320, 240)) #图片缩放,以适合staticBitmapim.save(self.tempimage,'JPEG')self.bitmapPic.SetBitmap(bitmap=wx.Bitmap(self.tempimage,wx.BITMAP_TYPE_JPEG)) self.staticTextWidth.SetLabel('\xb3\xa4\xa3\xba ' +str(self.imagesize[0]))self.staticTextHeight.SetLabel('\xbf\xed\xa3\xba ' +str(self.imagesize[1]))self.staticTextSrc.SetLabel("From:" + dlg.GetDirectory())self.staticTextCnt.SetLabel('\xca\xfd\xc1\xbf: '+str(self.count))self.saveSize = self.imagesizeself.SetSaveSizeText()dlg.Destroy()del imevent.Skip()def SetSaveSizeText(self): self.textCtrlWidth.SetValue(str(self.saveSize[0]))self.textCtrlHeight.SetValue(str(self.saveSize[1]))
2,图像的批量缩放和格式变换,目前支持jpg图片和bmp图片
def OnBtnSaveLeftUp(self, event): #保存按钮dlg = wx.FileDialog(self, message="Save image file as ...", defaultDir=os.getcwd(), defaultFile="All.jpg",wildcard="" , style=wx.SAVE)if dlg.ShowModal() == wx.ID_OK:self.savedir = dlg.GetDirectory()self.staticTextDest.SetLabel("To:" + self.savedir)self.convert() #调用convert函数dlg.Destroy()event.Skip()def convert(self):for file in self.images: #对当前打开的所有图片进行转换im = Image.open(file)im = im.resize((self.saveSize[0],self.saveSize[1]))#大小if self.imagetype.GetSelection() == 0: #储存格式判断im.save(self.savedir + '\\' + os.path.basename(file),'JPEG')else:s = str(os.path.basename(file)[:-3]) #对于bmp文件,改变后缀s += 'bmp'im.save(self.savedir + '\\' + s,'BMP')
3,相应改变分辨率的文本框:
def OnTextCtrlWidthText(self, event): #Text change 事件try:pos = self.textCtrlWidth.GetInsertionPoint() #保存当前光标位置width = int(self.textCtrlWidth.GetValue()) #根据输入宽度计算高度height = int(float(width) * float(self.imagesize[1]) /#以保持横纵比 float(self.imagesize[0]))self.saveSize = [width,height]self.SetSaveSizeText() #更新显示self.textCtrlWidth.SetInsertionPoint(pos) #还原光标位置except:event.Skip()
最后,程序的运行结果如下,可以看到,wxwidgets的界面还是相当漂亮的(我忍不住又这样说了,呵呵):
使用方法:
1,点击打开文件,使用shift或直接框住需要转换的多个文件,打开.
2,左边显示的是当前图像大小以及有多少个图片将要被转换.右边的时可以调整的长度,宽度不能调整,因为需要保持横纵比.
3,选择最终的文件格式jpg或者bmp
4,点击保存文件,选择一个文件夹用于保存所有转换后的图片文件.
5,当然,也可以通过选择上一张,下一张来浏览选中的图片.
基于WxPython的批量图片缩放工具相关推荐
- 基于wxpython+MySQL--实现人脸检测识别的宿舍人脸检测系统
基于wxpython+MySQL--实现人脸检测识别的宿舍人脸检测系统 一.功能需求 二.数据库建立 2.1 初始化数据库 2.2 压缩/解压数据流 2.3 输入数据 三.宿舍管理 3.1 新建录入 ...
- python批量图像处理_基于python代码批量处理图片resize
出差做PPT,要放一些图片上去,原图太大必须resize,十几张图片懒得一一处理了,最近正好在学python,最好的学习方式就是使用,于是写了一个批量处理图片resize的代码,在写的过程中,熟悉了p ...
- 基于requests百度图库图片爬取
这几天尝试图片的爬取,根据一篇博客,有了一些收获,来总结一下,此次爬取的对象是百度图库.百度爬虫分为就3部分: (1)获得批量图片的url: (2)通过每张图片的url获取图像内容: (3)保存图片. ...
- 在Ubuntu 14.04 64bit上安装批量图片处理器XnConvert
XnConvert是一个免费的跨平台的批量图片处理工具,支持Windows,Linux和Mac系统. 官网地址:ttp://www.xnview.com/en/xnconvert/ 我最喜欢的地方是, ...
- thinkcmf5调用指定分类的二级_Tengine快速上手系列教程amp;视频:基于Python API的图片分类应用入门丨附彩蛋...
前言:近期,Tengine团队加班加点,好消息接踵而来,OpenCV 4.3.0发布,OPEN AI LAB AIoT智能开发平台Tengine与OpenCV合作共同加速边缘智能,Tengine再获业 ...
- php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...
纯JS实现的批量图片预览加载功能 1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果 复制代码 代码 ...
- wxpython输入框_基于wxPython的GUI实现输入对话框(1)
基于wxPython的GUI实现输入对话框(1) 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 基于wxPython的GUI实现输入对话框(1).txt ] ( ...
- 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015
基于Mutil-Scale CNN的图片语义分割.法向量估计 原文地址:http://blog.csdn.net/hjimce/article/details/50443995 作者:hjimce 一 ...
- 深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015
基于2-channel network的图片相似度判别 原文地址:http://blog.csdn.net/hjimce/article/details/50098483 作者:hjimce 一.相 ...
- CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%)
CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%) 目录 输出结果 设计思路 输出结果 设计思路
最新文章
- 按阅读习惯来高效排列字符串的脚本
- java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询
- python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
- P4827 [国家集训队] Crash 的文明世界
- oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
- findbugs 接口文档_Java代码审查工具findbugs的使用总结
- python 链表操作 优化_python---单链表的常用操作
- 测试管理中的一个问题—功能点覆盖还是功能测试点覆盖
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
- cocos2d-x 播放视频 on Android
- 开发者论坛一周精粹(第六十三期) WHM自动脚本修复ssh问题
- miui11是android几,miui11是安卓几
- 基于AVR-BootLoader,通过霜蝉远程串口可实现单片机的远程升级
- 软件质量管理-6-质量管理
- HDU6069	Counting Divisors
- numpy.arange()参数含义
- 炫舞行书教学视频java_王羲之行书基本笔画教程 王羲之行书基本笔画讲解视频...
- 【转】SCI论文写法攻略
- Linux下python环境搭建