(说明: 这是我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的批量图片缩放工具相关推荐

  1. 基于wxpython+MySQL--实现人脸检测识别的宿舍人脸检测系统

    基于wxpython+MySQL--实现人脸检测识别的宿舍人脸检测系统 一.功能需求 二.数据库建立 2.1 初始化数据库 2.2 压缩/解压数据流 2.3 输入数据 三.宿舍管理 3.1 新建录入 ...

  2. python批量图像处理_基于python代码批量处理图片resize

    出差做PPT,要放一些图片上去,原图太大必须resize,十几张图片懒得一一处理了,最近正好在学python,最好的学习方式就是使用,于是写了一个批量处理图片resize的代码,在写的过程中,熟悉了p ...

  3. 基于requests百度图库图片爬取

    这几天尝试图片的爬取,根据一篇博客,有了一些收获,来总结一下,此次爬取的对象是百度图库.百度爬虫分为就3部分: (1)获得批量图片的url: (2)通过每张图片的url获取图像内容: (3)保存图片. ...

  4. 在Ubuntu 14.04 64bit上安装批量图片处理器XnConvert

    XnConvert是一个免费的跨平台的批量图片处理工具,支持Windows,Linux和Mac系统. 官网地址:ttp://www.xnview.com/en/xnconvert/ 我最喜欢的地方是, ...

  5. thinkcmf5调用指定分类的二级_Tengine快速上手系列教程amp;视频:基于Python API的图片分类应用入门丨附彩蛋...

    前言:近期,Tengine团队加班加点,好消息接踵而来,OpenCV 4.3.0发布,OPEN AI LAB AIoT智能开发平台Tengine与OpenCV合作共同加速边缘智能,Tengine再获业 ...

  6. php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...

    纯JS实现的批量图片预览加载功能 1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果 复制代码 代码 ...

  7. wxpython输入框_基于wxPython的GUI实现输入对话框(1)

    基于wxPython的GUI实现输入对话框(1) 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  基于wxPython的GUI实现输入对话框(1).txt ] ( ...

  8. 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015

    基于Mutil-Scale CNN的图片语义分割.法向量估计 原文地址:http://blog.csdn.net/hjimce/article/details/50443995 作者:hjimce 一 ...

  9. 深度学习(十六)基于2-channel network的图片相似度判别-CVPR 2015

    基于2-channel  network的图片相似度判别 原文地址:http://blog.csdn.net/hjimce/article/details/50098483 作者:hjimce 一.相 ...

  10. CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%)

    CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%) 目录 输出结果 设计思路 输出结果 设计思路

最新文章

  1. 按阅读习惯来高效排列字符串的脚本
  2. java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询
  3. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)
  4. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
  5. P4827 [国家集训队] Crash 的文明世界
  6. oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
  7. findbugs 接口文档_Java代码审查工具findbugs的使用总结
  8. python 链表操作 优化_python---单链表的常用操作
  9. 测试管理中的一个问题—功能点覆盖还是功能测试点覆盖
  10. Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
  11. cocos2d-x 播放视频 on Android
  12. 开发者论坛一周精粹(第六十三期) WHM自动脚本修复ssh问题
  13. miui11是android几,miui11是安卓几
  14. 基于AVR-BootLoader,通过霜蝉远程串口可实现单片机的远程升级
  15. 软件质量管理-6-质量管理
  16. HDU6069 Counting Divisors
  17. numpy.arange()参数含义
  18. 炫舞行书教学视频java_王羲之行书基本笔画教程 王羲之行书基本笔画讲解视频...
  19. 【转】SCI论文写法攻略
  20. Linux下python环境搭建

热门文章

  1. Docker容器实现跨主机文件共享(NFS服务器)
  2. ArrayList和Linked的区别
  3. nod-1483-化学变换
  4. matlab绘制椭球ellipsoid函数
  5. 吃妖怪的萝莉和帅气道长大叔,古风治愈漫画温暖来袭!
  6. 显示虚拟按钮Menu键
  7. 迟到的Meltdown/Spectre分析
  8. 造轮子,layuiAdmin——基于layui的后台管理模板
  9. 五款好用的开源CRM系统推荐
  10. 2012年2月有29天