基于WxPython的批量图片缩放工具
来源:互联网 发布:js替换p标签里的值 编辑:程序博客网 时间:2024/06/02 00:44
(说明: 这是我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.size im = 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.imagesize self.SetSaveSizeText() del im event.Skip() def OnButton2LeftUp(self, event): #浏览上一幅图片 if self.index < self.count - 1: self.index += 1 #图像次序加一 im = Image.open(self.images[self.index]) self.imagesize = im.size im = 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.imagesize self.SetSaveSizeText() del im event.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.size im = im.resize((320, 240)) #图片缩放,以适合staticBitmap 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.staticTextSrc.SetLabel("From:" + dlg.GetDirectory()) self.staticTextCnt.SetLabel('\xca\xfd\xc1\xbf: '+ str(self.count)) self.saveSize = self.imagesize self.SetSaveSizeText() dlg.Destroy() del im event.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的批量图片缩放工具
- 图片批量缩放工具
- 图片批量缩放工具
- 图片批量缩放工具v1.2
- 图片批量缩放工具V1.2
- Python + pyqt5 图片批量缩放工具
- 批量缩放图片的脚本
- opencv批量缩放图片
- python3 批量缩放图片
- wxpython 加载网络图片并缩放
- VBS批量缩放Word图片
- python批量按比例缩放图片
- python图片批量处理缩放
- 图片缩放工具
- 基于C#的百度图片批量下载工具
- 基于libyuv库的NV12格式图片的缩放
- 批量图片增强工具
- 基于MIDP2.0实现图片的缩放功能
- 读书笔记_栈
- adb devices no permission
- Windows phone 7 高级编程——使用visual stdio 、silverlight与XNA进行应用和游戏开发
- sql 2005删除重复记录 保留其中一条
- 第5章---多态性
- 基于WxPython的批量图片缩放工具
- 第6章---模板
- unix下后台运行程序的方法
- symbian 里的NewL和NewLC
- 第7章---C++的I/O流类库
- SFTP限制用户的行为-代替ftp
- 由JSESSIONID谈cookie与SESSION的区别和联系
- Silverlight开发历程—(绘制几合图形,GeometryGroup,PathGeometry)
- 使用Python和pyGame进行虚拟仪器开发