猫史档案馆


屑雷神索尔

屑雷神索尔

Lv.1

以前那言论奇葩、无时不在创造黑历史的我,真的是我吗?或者…现在的我,只是过去的一片残影?

获赞:365收藏:161浏览:14786作品收藏:238

签名:摆烂(x) 努力更新小说(x) 做一只厚颜无 耻的肥鸽子,为人类解决粮食问题(✓(大雾))

回复帖子评论
上一页4 页 / 共 7下一页

《我的世界:模组风云》书评区 中回复

ooooooohhhhhhhhhhhhhh

center_image

2020-09-17T19:51:17 点赞:0

《我的世界:模组风云》书评区 中回复

跳舞的浮雕~~~

(……太大了????)

(好吧,发不了,那发代码……)

(代码太长,不同文件分开发)

图片滤镜.py

#导入模组
from ui_process import Ui_MainWindow
from PySide2.QtWidgets import *
import sys
from PySide2.QtGui import *
from PIL import Image,ImageQt,ImageSequence,ImageFilter
from char import to_char
from sketch import to_sketch
import os
from PySide2.QtCore import *
from PySide2.QtMultimedia import *
#窗口类


class MyCharts(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.show()
        self.input_l.setScaledContents(True)
        #文件路径
        self.file=None
        #图片
        self.img_temp=None
        #各种滤镜!pillow库!
        self.filters={
            '模糊滤镜':ImageFilter.BLUR,
            '轮廓滤镜': ImageFilter.CONTOUR,
            '边缘增强滤镜': ImageFilter.EDGE_ENHANCE,
            '浮雕滤镜':ImageFilter.EMBOSS,
            '锐化滤镜':ImageFilter.SHARPEN,
            '平滑滤镜':ImageFilter.SMOOTH,
            '细节增强滤镜':ImageFilter.DETAIL
        }
        #链接
        self.input_b.clicked.connect(self.select_file)

    #选择文件
    def select_file(self):
        file_path=QFileDialog.getOpenFileName(caption='选择文件',filter='(*.jpg *.png *.bmp *.httf *.gif)')
        print(file_path)
        if file_path[0]:
            #图片处理
            if os.path.splitext(file_path[0])[1]!='.gif':
                self.file=file_path[0]
                img_pix=QPixmap(self.file)
                self.input_l.setPixmap(img_pix)
                self.img_temp=None
                self.pushButton_2.clicked.connect(self.process)
                self.save_b.clicked.connect(self.save)
            else:
                #gif动图处理
                self.file_path=file_path
                #显示动图
                self.gif=QMovie()
                self.gif.setFileName(self.file_path[0])
                self.input_l.setMovie(self.gif)
                self.gif.start()
                self.pushButton_2.clicked.connect(self.gif_process)
                self.save_b.clicked.connect(self.save_gif)
        else:

            QMessageBox.warning(self,'警告','请再次选择')
    #滤镜
    def process(self):
        if self.img_temp:
            img=self.img_temp
        else:
            if self.file:
                #打开图片和获取选择滤镜
                img=Image.open(self.file).convert('RGB')
            else:
                QMessageBox.warning(self,'注意','请选择图片文件')
                return
        text=self.input_c.currentText()
        #判断类型            
        #对图像进行处理及转换
        if '滤镜' in text:
            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)
        img_qt=ImageQt.ImageQt(self.img_temp)
        #再次转换和显示
        self.output_l.setScaledContents(True)
        img_pix=QPixmap.fromImage(img_qt)
        self.output_l.setPixmap(img_pix)

    #保存图片
    def save(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, '注意', '请先进行图片处理')
    #gif动图处理
    def gif_process(self):
        from PIL import ImageSequence
        #打开动图
        self.img_temp=Image.open(self.file_path[0])
        #分解动图
        self.frames=ImageSequence.Iterator(self.img_temp)
        self.duration=self.img_temp.info['extension'][1]
        #处理每帧并保存
        num=0
        for f in self.frames:
            self._gif_process_(f).save(str(num)+'.png')
            print('save')
            num+=1
        #重新打开
        self.new_frames=[]
        for a in range(num):
            self.new_frames.append(Image.open(str(a)+'.png'))
        #保存暂时gif
        self.new_frames[0].save('temp.gif', append_images=self.new_frames[1:],
                                save_all=True, loop=0)
        #保存用的动图
        self.img_temp=Image.open('temp.gif')
        #显示动图
        self.output_l.setScaledContents(True)
        self.gif=QMovie('temp.gif')
        self.output_l.setMovie(self.gif)
        self.gif.start()
        #打开动图
        self.img_temp=Image.open('temp.gif')

    #处理帧的方法
    def _gif_process_(self,img):
        img=img.convert('RGB')
        text = self.input_c.currentText()
        #判断类型
        #对图像进行处理及转换
        if '滤镜' in text:
            img=img.filter(self.filters[text]).convert('RGBA')
        elif text=='素描风格转换':

            img=to_sketch(img)


        elif text=='字符画风格转换':
            img=to_char(img)
        return img

    def save_gif(self):
        if self.img_temp:
            file_path = QFileDialog.getSaveFileName(
                caption='保存图片', filter='(*.gif)')
            if file_path[0]:
                #保存
                save_path = file_path[0]
                self.new_frames[0].save(save_path,append_images=self.new_frames[1:],save_all=True,loop=0)
            else:
                QMessageBox.warning(self, '注意', '请重新选择保存图片的地方')
        else:
            QMessageBox.warning(self, '注意', '请先进行图片处理')


#主程序
if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = MyCharts()
    sys.exit(app.exec_())

 

2020-09-17T19:58:51 点赞:0

《我的世界:模组风云》书评区 中回复

继续~~~~

ui_process.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'E:/45-图像处理软件/process.ui',
# licensing of 'E:/45-图像处理软件/process.ui' applies.
#
# Created: Fri May 29 18:38:25 2020
#      by: pyside2-uic  running on PySide2 5.11.2
#
# WARNING! All changes made in this file will be lost!

from PySide2 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(788, 567)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(30, 140, 701, 381))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.input_l = QtWidgets.QLabel(self.layoutWidget)
        self.input_l.setObjectName("input_l")
        self.horizontalLayout.addWidget(self.input_l)
        self.output_l = QtWidgets.QLabel(self.layoutWidget)
        self.output_l.setObjectName("output_l")
        self.horizontalLayout.addWidget(self.output_l)
        self.splitter = QtWidgets.QSplitter(self.centralwidget)
        self.splitter.setGeometry(QtCore.QRect(30, 50, 701, 61))
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.input_b = QtWidgets.QPushButton(self.splitter)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.input_b.setFont(font)
        self.input_b.setObjectName("input_b")
        self.input_c = QtWidgets.QComboBox(self.splitter)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.input_c.setFont(font)
        self.input_c.setObjectName("input_c")
        self.input_c.addItem("")
        self.input_c.addItem("")
        self.input_c.addItem("")
        self.input_c.addItem("")
        self.input_c.addItem("")
        self.input_c.addItem("")
        self.input_c.addItem('')
        self.input_c.addItem('')
        self.input_c.addItem('')
        self.pushButton_2 = QtWidgets.QPushButton(self.splitter)
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.save_b=QtWidgets.QPushButton(self)
        self.save_b.setGeometry(QtCore.QRect(0,500,800,501))
        self.save_b.show()
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtWidgets.QApplication.translate(
            "MainWindow", "MainWindow", None, -1))
        self.input_l.setText(
            QtWidgets.QApplication.translate("MainWindow", "处理前", None, -1))
        self.output_l.setText(
            QtWidgets.QApplication.translate("MainWindow", "处理后", None, -1))
        self.input_b.setText(QtWidgets.QApplication.translate(
            "MainWindow", "选择图片文件", None, -1))
        self.input_c.setItemText(
            0, QtWidgets.QApplication.translate("MainWindow", "模糊滤镜", None, -1))
        self.input_c.setItemText(
            1, QtWidgets.QApplication.translate("MainWindow", "轮廓滤镜", None, -1))
        self.input_c.setItemText(
            2, QtWidgets.QApplication.translate("MainWindow", "边缘增强滤镜", None, -1))
        self.input_c.setItemText(
            3, QtWidgets.QApplication.translate("MainWindow", "浮雕滤镜", None, -1))
        self.input_c.setItemText(
            4, QtWidgets.QApplication.translate("MainWindow", "锐化滤镜", None, -1))
        self.input_c.setItemText(
            5, QtWidgets.QApplication.translate("MainWindow", "平滑滤镜", None, -1))
        self.input_c.setItemText(
            6, QtWidgets.QApplication.translate("MainWindow", "细节增强滤镜", None, -1))
        self.input_c.setItemText(
            7, QtWidgets.QApplication.translate("MainWindow", "素描风格转换", None, -1))
        self.input_c.setItemText(
            8, QtWidgets.QApplication.translate("MainWindow", "字符画风格转换", None, -1))
        self.pushButton_2.setText(
            QtWidgets.QApplication.translate("MainWindow", "开始处理", None, -1))
        self.save_b.setText(
            QtWidgets.QApplication.translate("MainWindow", '保存结果', None, -1))

2020-09-17T19:59:35 点赞:0

《我的世界:模组风云》书评区 中回复

接着上面~~~

char.py

from PIL import Image, ImageDraw


def to_char(img):
    #图片宽高
    width, height = (60, 60)
    #灰度图
    img = img.convert("L").resize((width, height))
    ASCII_HIGH = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
    txt = ''
    for y in range(height):
        for x in range(width):
            pos = (x, y)
            gray = img.getpixel(pos)
            index = int(gray/256*70)
            txt += ASCII_HIGH[index]+' '
        txt += '\n'
    #字符串转图片
    img_new = Image.new("RGB", (width*12, height*15), "white")  # 生成空白图片
    draw = ImageDraw.Draw(img_new)  # 图片转画布
    draw.text((0, 0), txt, fill="black")  # 文字写入

    return img_new.resize((width*12, height*12)).convert("RGBA")



2020-09-17T20:00:14 点赞:0

《我的世界:模组风云》书评区 中回复

终于要发完了……

sketch.py

from PIL import Image, ImageOps, ImageFilter


def to_sketch(img):
    width, height = img.size
    #转灰度图
    img_gray = img.convert("L")
    #反色
    img_invert = ImageOps.invert(img_gray)
    #高斯模糊
    img_gaussian = img_invert.filter(ImageFilter.GaussianBlur(5))
    #颜色减淡
    for x in range(width):
        for y in range(height):
            pos = (x, y)
            A = img_gray.getpixel(pos)
            B = img_gaussian.getpixel(pos)
            img_gray.putpixel(pos, min(int(A+A*B/(255-B)), 255))
    return img_gray




2020-09-17T20:02:21 点赞:0

《我的世界:模组风云》书评区 中回复

天啊,今天尽然要画一幅“模仿梵高风格”的画????

今天肯定又是不能写小说的一天…(不过我还是会尝试写200字)

2020-09-18T19:53:23 点赞:0

《我的世界:模组风云》书评区 中回复

天啊…我也太能扯了…S喵-HJ-004档案本来就200字…

在喜马拉雅上被我强行说了3分30秒 …

(欢迎大家去喜马拉雅搜索“S喵-HJ”)(广告来的措不及防啊~

2020-09-19T14:11:30 点赞:0

《我的世界:模组风云》书评区 中回复

实验:Pillow各滤镜&编程猫教的效果的运行时间

(此实验数据来自一很小de gif动图,利用下方我的图片+gif动图处理软件进行实验,时间来自time.perf_counter())

模糊滤镜:0.10801659999999999
轮廓滤镜:0.10338539999999963
边缘增强滤镜:0.08784930000000202
浮雕滤镜:0.08441189999999921
锐化滤镜:0.08677499999999938
平滑滤镜:0.08271700000000237
细节增强滤镜:0.0832782000000023
素描效果:2.7496745000000047
字符画效果:0.6062291000000002

……做个大约的排行榜吧……

1.素描效果

2.字符画效果

3.模糊滤镜+轮廓滤镜

4.其他滤镜

(图片会更快)

(其他一般的动图素描效果和字符画效果超级慢!!!!!!素描效果甚至要等1分钟………………………………………………)

 

2020-09-19T16:51:16 点赞:0

《我的世界:模组风云》书评区 中回复

在????的边缘不断彳亍…𓁩𓅦𓁠𓃲𓃰𓆗𓃹…

2020-09-19T20:27:45 点赞:0

【我的世界之江湖传说】评论区 中回复

无聊啊…刷指令者吧…

2020-09-19T20:38:51 点赞:0

【编程猫少编院】新人训练师招募啦! 中回复

前排

2020-09-20T12:10:29 点赞:0

张浩请戳这边 中回复

继续挖

2020-09-20T12:24:40 点赞:0

《我的世界:模组风云》书评区 中回复

每日科普:所谓的“喵座”其实在天文学里叫做“室女座”…………而且在神话上看,室女座还有女儿…… …

2020-09-20T15:33:44 点赞:0

【找朋友】 中回复

哈哈

2020-09-21T21:04:16 点赞:0

【找朋友】 中回复

2020-09-21T21:22:11 点赞:0

找伙伴,师傅 中回复

wo

shi

kua

ke

ni

zen

yang

kan???

2020-09-22T19:51:55 点赞:2

【我的世界之江湖传说】评论区 中回复

d d

2020-09-23T18:20:18 点赞:0

【我的世界之江湖传说】评论区 中回复

江湖时喵算写多少章啊?是不是完结写《王者归来》然后再写《武艺喵》?

2020-09-23T18:21:32 点赞:0

找个师傅(纯属无奈) 中回复

11分~~~~~(真开森)

2020-09-24T21:05:33 点赞:0

《我的世界:模组风云》书评区 中回复

。。。。。好早啊

2020-09-25T05:24:43 点赞:0

《我的世界:模组风云》书评区 中回复

貌似 我的世界:漫漫纪元 已经上线了……

2020-09-25T19:55:51 点赞:0

《探索MC》评论区 中回复

我来也!

2020-09-26T19:19:56 点赞:0

【源码保卫战】小说开启! 中回复

雷电猴~

2020-09-27T13:48:48 点赞:0

《我的世界:模组风云》书评区 中回复

祝大家中秋国庆快乐~~~

🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮

🥮🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🥮

🥮🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🥮

🥮🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🇨🇳🥮

🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮🥮

2020-10-01T06:22:53 点赞:0

《我的世界:模组风云》书评区 中回复

 🇨🇳

|                     😶

                         👕

2020-10-01T06:25:16 点赞:0

我来找师傅了 中回复

?哪方面的知识啊?小说?kitten?Python?

2020-10-01T20:43:01 点赞:0

我来找师傅了 中回复

23333333

2020-10-01T20:48:24 点赞:0

【我的世界之江湖传说】评论区 中回复

撒花~🎉🌷🌹💐🌺🌸🌼🌻🎍🍀☘️🌿🌱🌵🎄🌲🌳🌴~

2020-10-02T14:43:40 点赞:0

【我的世界之江湖传说】评论区 中回复

唐浩文,如何合写小说?

2020-10-05T20:33:02 点赞:0

《我的世界:模组风云》书评区 中回复

…是现在发后记2还是周末发?

2020-10-07T14:59:56 点赞:0