用户:
ZHS萌新查看:0 回复:0 评论:0 创建时间:2021-05-02T17:41:54
【作品展示】

【作品介绍】
图片处理器
【作品源代码】
import sys
from PySide2.QtWidgets import *
from ui_process_img import Ui_process_img
from PySide2.QtGui import *
from PIL import Image, ImageFilter, ImageQt
from sketch import to_sketch
from char import to_char
class ProcessImg(QMainWindow, Ui_process_img):
def __init__(self):
super().__init__()
self.setupUi(self)
#初始化滤镜
self.filters = {
'模糊滤镜': ImageFilter.BLUR,
'轮廓滤镜': ImageFilter.CONTOUR,
'边缘增强滤镜': ImageFilter.EDGE_ENHANCE,
'浮雕滤镜': ImageFilter.EMBOSS,
'锐化滤镜': ImageFilter.SHARPEN,
'平滑滤镜': ImageFilter.SMOOTH,
}
self.img_temp = None
self.file = None
#绑定信号点击按钮获取文件路径
self.pbtn_file.clicked.connect(self.select_file)
self.pbtn_process.clicked.connect(self.process_img)
self.pbtn_save_img.clicked.connect(self.save_img)
#设置图像自适应大小显示
self.lb_input_img.setScaledContents(True)
self.lb_output_img.setScaledContents(True)
self.show()
#获取文件路径
def select_file(self):
file_path = QFileDialog.getOpenFileName(
caption='选择文件', filter=('*.jpg *.png'))
if file_path[0]:
self.file = file_path[0]
#将图片转成pyside库自己可以识别的图像类型
img_pix = QPixmap(self.file)
#setPixmap展示图片
self.lb_input_img.setPixmap(img_pix)
self.img_temp = None
else:
QMessageBox.warning(self, '注意', '请先选择图片文件')
def process_img(self):
if self.img_temp:
img = self.img_temp
else:
if self.file:
img = Image.open(self.file)
else:
QMessageBox.warning(self, '注意', '请先选择图片文件')
return
#获取当前标签中的文件路径
text = self.cb_filter_list.currentText()
if '滤镜' in text:
# 得到PIL库的图片类型
self.img_temp = img.filter(self.filters[text]).convert('RGBA')
elif text == '素描风格转化':
self.img_temp = to_sketch(img)
elif text == '字符风格转化':
self.img_temp = to_char(img)
#ImageQt将PIL图片类型转成Pyside2可识别的类型
img_qt = ImageQt.ImageQt(self.img_temp)
#将图像转成pixmap类型,因为标签控件只能展示这种类型
img_pix = QPixmap.fromImage(img_qt)
#展示
self.lb_output_img.setPixmap(img_pix)
def save_img(self):
#如果图像处理过
if self.img_temp:
file_path = QFileDialog.getSaveFileName(
caption='保存文件', filter='(*.png)')
if file_path[0]:
save_path = file_path[0]
self.img_temp.save(save_path)
else:
QMessageBox.warning(self, '注意', '请重新选择保存的位置')
#图像未被处理过,提示先处理
else:
QMessageBox.warning(self, '注意', '请先处理图片')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = ProcessImg()
sys.exit(app.exec_())
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn