PyQt+PIL处理转换图片格式 | 寒山烟雨
现在的位置: 首页 > 滴水穿石 > 正文

PyQt+PIL处理转换图片格式

2014年12月25日 滴水穿石 ⁄ 共 2252字 ⁄ 字号 评论 3 条 ⁄ 阅读 4,604 views 次

Python的PIL模块处理图像虽然比PS差了不少,不过作为编程处理,后期可以添加更多的批处理功能。(貌似PS也自带批处理功能。)

最简单的方式不过三、五行就可以了,不过为了美观和方便,还是添加了一个Qt的GUI。可以自定义保存路径,保存格式为:图片格式.png。

 Python | 
 
 copy code |
?

01
from PIL import Image
02
from PyQt4 import QtGui,QtCore
03
import os
04
import sys
05
 
06
class Window(QtGui.QWidget):
07
    def __init__(self):
08
        super(Window, self).__init__()
09
        self.setWindowTitle("Change")
10
        self.resize=(300,900)
11
 
12
        gridlayout=QtGui.QGridLayout()
13
        QOpen=QtGui.QLabel("Open")
14
        self.QAddress=QtGui.QComboBox()
15
        QOpenButton=QtGui.QPushButton("Browse")
16
 
17
        gridlayout.addWidget(QOpen,1,0)
18
        gridlayout.addWidget(self.QAddress,1,1)
19
        gridlayout.addWidget(QOpenButton,1,2)
20
 
21
        QKind=QtGui.QLabel("Transport to:")
22
        self.QKinds=QtGui.QComboBox()
23
        self.QKinds.addItem("1")
24
        self.QKinds.addItem("L")
25
        self.QKinds.addItem("RGB")
26
        self.QKinds.addItem("RGBA")
27
        QRunButton=QtGui.QPushButton("Run")    
28
        QSave=QtGui.QLabel("Save")
29
        self.QSaveAdd=QtGui.QComboBox()
30
        self.QSaveAdd.addItem(QtCore.QDir.currentPath())
31
        QSaveButton=QtGui.QPushButton("Browse")
32
        gridlayout.addWidget(QOpen,1,0)
33
        gridlayout.addWidget(self.QAddress,1,1)
34
        gridlayout.addWidget(QOpenButton,1,2)
35
        gridlayout.addWidget(QKind,2,0)
36
        gridlayout.addWidget(self.QKinds,2,1)
37
        gridlayout.addWidget(QRunButton,2,2)
38
 
39
        gridlayout.addWidget(QSave,3,0)
40
        gridlayout.addWidget(self.QSaveAdd,3,1)
41
        gridlayout.addWidget(QSaveButton,3,2)
42
 
43
        self.setLayout(gridlayout)
44
 
45
        self.connect( QOpenButton, QtCore.SIGNAL( 'clicked()' ), self.Open )
46
        self.connect( QRunButton, QtCore.SIGNAL( 'clicked()' ), self.Run )
47
        self.connect( QSaveButton, QtCore.SIGNAL( 'clicked()' ), self.Save ) 
48
 
49
    def Open(self):
50
        fileName=QtGui.QFileDialog.getOpenFileName(self,"Image","","Image (*.png *.xpm *.jpg)")
51
        if fileName:
52
            if self.QAddress.findText(fileName) ==1:
53
                self.QAddress.addItem(fileName)
54
            self.QAddress.setCurrentIndex(self.QAddress.findText(fileName))
55
 
56
    def Run(self):
57
        im=Image.open(self.QAddress.currentText())
58
        mode=self.QKinds.currentText()
59
        im=im.convert(mode)
60
        im.save(self.QSaveAdd.currentText()+"/{0}.png".format(mode))
61
        im.show()
62
 
63
 
64
    def Save(self):
65
        directory = QtGui.QFileDialog.getExistingDirectory(self, "Find Files",
66
                QtCore.QDir.currentPath())
67
 
68
        if directory:
69
            if self.QSaveAdd.findText(directory) ==1:
70
                self.QSaveAdd.addItem(directory)
71
 
72
            self.QSaveAdd.setCurrentIndex(self.QSaveAdd.findText(directory))
73
 
74
app = QtGui.QApplication( sys.argv )
75
demo = Window()
76
demo.show()
77
app.exec_()

加了Qt之后,果断数码量级翻了好多倍。
可以利用cxfree_ze打包成exe,在程序的根目录下添加msvcr100.dll就可以在任何电脑上使用了。

打包代码见《为热电计算程序加了个gui》

 

0

目前有 3 条留言    访客:1 条, 博主:2 条


  1. 管理员
    hsyyf 2015年10月30日 下午7:00  @回复  Δ-49楼 回复

    测试


    • 管理员
      hsyyf 2015年10月30日 下午7:00  @回复  ∇地下1层 回复

      重新测试

  2. 玻璃钢电缆支架 2015年04月28日 下午2:35  @回复  Δ-48楼 回复

    写的很详细

给我留言

留言无头像?


×