PyQt5缩放图片_Nude

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

from  PyQt5.QtGui  import *
from  PyQt5.QtCore  import *
from  PyQt5.QtWidgets  import *
import sys
import cv2
from run import process
import argparse
import os
import random

#reload(sys)
#sys.setdefaultencoding("utf-8")


global image_name
image_name=""



#*******************************************************************
#*******************************************************************
#***************************布局类**********************************
#*******************************************************************
#*******************************************************************
class graphicsView(QGraphicsView):
    def __init__(self,parent=None):
        super(graphicsView,self).__init__(parent)

        self.image=""
        #QObject.connect(self, SIGNAL('wheelEvent()'),self.wheelEvent)

        

    def wheelEvent(self, event):
        
        global image_name   
        if image_name!="":
            self=image_name
            angle=event.angleDelta() / 8                                         
            angleX=angle.x()  
            angleY=angle.y()  
            #print(angleX,angleY)
            if angleY >= 0:
                self.width =float(self.image.width())
                self.height=float(self.image.height())
                #print(self.width,self.height)
                if self.width:
                    self.width=self.width*1.1
                    self.height=self.height*1.1
                    self.image=self.image.scaled(self.width,self.height,Qt.KeepAspectRatio)

                    #print(dir(self.image))
                    self.graphicsView.removeItem(self.item)
                    self.item1= QGraphicsPixmapItem(self.image)

                    self.graphicsView= QGraphicsScene()
                    self.graphicsView.addItem(self.item1)                
                    self.setScene(self.graphicsView)
                    #self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                    #self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
                    #self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
                    #self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
                    #self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
                    #self.setFrameShape(QFrame.NoFrame)
                    #self.setBackgroundBrush(QBrush(QColor(70, 170, 80)))
                            
                    self.item=self.item1
                    image_name=self
                    
           
            elif angleY <=  0:
                
        
                self.width =float(self.image.width())
                self.height=float(self.image.height())
                if self.width:
                    self.width=self.width*0.9
                    self.height=self.height*0.9
                    #self.width =float(self.width)*float(0.9)
                    #self.height=float(self.height)*float(0.9)
                    self.image=self.image.scaled(self.width,self.height,Qt.KeepAspectRatio)
                    
                    self.graphicsView.removeItem(self.item)
            
             
                    self.graphicsView= QGraphicsScene()
                    
                    self.item1 = QGraphicsPixmapItem(self.image)               
                    self.graphicsView.addItem(self.item1)
                    
                    self.setScene(self.graphicsView)
                    #self.setAlignment(Qt.AlignCenter or Qt.AlignTop)
                    #self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
                    #self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
                    #self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
                    #self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
                    #self.setFrameShape(QFrame.NoFrame)
                    #self.setBackgroundBrush(QBrush(QColor(50, 200, 100)))
                    self.item=self.item1
                    image_name=self
                    
                
           


        
  
                
           
                
#*******************************************************************
#*******************************************************************
#***************************拖拽类**********************************
#*******************************************************************
#*******************************************************************

class MyLineEdit(QLineEdit):
        def __init__( self, parent=None ):
            super(MyLineEdit, self).__init__(parent)
            self.setDragEnabled(True)

        def dragEnterEvent( self, event ):
            
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                event.acceptProposedAction()
        def dragMoveEvent( self, event ):
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                event.acceptProposedAction()

        def dropEvent( self, event ):
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                filepath = str(urls[0].path())[1:]
                self.setText(filepath)

#*******************************************************************
#*******************************************************************
#***************************功能类**********************************
#*******************************************************************
#*******************************************************************
class Nude_transform_gui(QWidget):
    
    def __init__(self):
        super(Nude_transform_gui,self).__init__()
        #self.setWindowFlags(Qt.Window)
        self.setWindowTitle("Ai_Nude_Tool_a")
        
        self.initUI()
    def initUI(self):


        pic_address=QLabel(u'图片地址:')
        self.pic_address=MyLineEdit()
        pic_button=QPushButton(u"加载")

        save_address=QLabel(u'图片地址:')
        self.save_address=MyLineEdit()
        save_button=QPushButton(u"浏览")

        
        self._tree=graphicsView(self)
 
        
        start_work=QPushButton(u"转换图片")
 


        pbar=QLabel(u"进度")
        self.time_pos=QLineEdit()
        self.pbar = QProgressBar()

        #print dir(self.pbar)

        
        #groupNameData.setFrameStyle(QFrame.Panel|QFrame.Sunken)
        

        
        laty_1=QHBoxLayout()
        laty_1.addWidget(pic_address)
        laty_1.addWidget(self.pic_address)
        laty_1.addWidget(pic_button)
     

        laty_2=QHBoxLayout()
        laty_2.addWidget(self._tree)
        
        
      

        laty_3=QHBoxLayout()
        laty_3.addWidget(save_address)
        laty_3.addWidget(self.save_address)
        laty_3.addWidget(save_button)


        laty_4=QHBoxLayout()
        #print(dir(laty_4))
        laty_4.addStretch(10)
        laty_4.addSpacing(10)
        laty_4.addWidget(self.time_pos,1)
        laty_4.addWidget(pbar,1)
        laty_4.addWidget(self.pbar ,3)
        laty_4.addWidget(start_work,2)




        all_lay=QVBoxLayout()
        all_lay.addLayout(laty_1)
        all_lay.addLayout(laty_2)
        all_lay.addLayout(laty_3)
        all_lay.addLayout(laty_4)


      
        self.setLayout(all_lay)
        
        self.resize(700,700)


        pic_button.clicked.connect(self.get_pic_address)
        save_button.clicked.connect(self.get_save_address)
        start_work.clicked.connect(self.transform_nude)


        self.show()



    def get_pic_address(self):
            pic_address=self.pic_address.text()
            if(pic_address==""):
                QMessageBox.information(self,u"提示", u"请输入图片地址")
                return
            name=pic_address
            if os.path.exists(name):
                self._tree.image=QPixmap(name)
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)               
                self._tree.graphicsView.addItem(self._tree.item)                
                self._tree.setScene(self._tree.graphicsView)
                global image_name
                image_name=self._tree
                #print(image_name)
                
    def get_save_address(self):
        filename = QFileDialog.getExistingDirectory()
        if filename:
            filename=filename.replace("\\",'/')

    def createRandomString(self,len):
        print ('wet'.center(10,'*'))
        raw = ""
        range1 = range(58, 65) # between 0~9 and A~Z
        range2 = range(91, 97) # between A~Z and a~z

        i = 0
        while i < len:
            seed = random.randint(48, 122)
            if ((seed in range1) or (seed in range2)):
                continue;
            raw += chr(seed);
            i += 1
        return raw
    
    def _process(self,i_image, o_image, use_gpu):
        try:
            dress = cv2.imread(i_image)
            h = dress.shape[0]
            w = dress.shape[1]
            dress = cv2.resize(dress, (512,512), interpolation=cv2.INTER_CUBIC)
            watermark = process(dress, use_gpu)
            watermark =  cv2.resize(watermark, (w,h), interpolation=cv2.INTER_CUBIC)
            cv2.imwrite(o_image, watermark)
            print("[*] Image saved as: %s" % o_image)
            self.pbar.setValue(100)
            name=o_image
            if os.path.exists(name):
                self._tree.image=QPixmap(name)
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)               
                self._tree.graphicsView.addItem(self._tree.item)                
                self._tree.setScene(self._tree.graphicsView)
                global image_name
                image_name=self._tree
        except Exception as e:
            print(e)
	
            

    def transform_nude(self):
        self.pbar.setValue(5)
        if str(self.pic_address.text())=="" or str(self.save_address.text())=="":
            QMessageBox.information(self,u"提示", u"请输入图片储存地址,视频名称可不写")
            return
        current_dir = os.path.abspath(os.path.dirname(__file__))
        os.chdir(current_dir)
        if(str(self.time_pos.text())==""):
            use_gpu=False
        else:
            use_gpu=True
        input_address=str(self.pic_address.text())
        if "." in str(self.save_address.text()):
            output_address=str(self.save_address.text())
        else:
            output_address=str(self.save_address.text())+"/"+os.path.splitext(os.path.basename(input_address))[0]+"_"+self.createRandomString(5)+".png"

 
        #print( output_address)
        
        self._process(input_address, output_address, use_gpu)
        #self.pbar.setValue(100)


#*******************************************************************
#*******************************************************************
#***************************主函数***********************************
#*******************************************************************
#******************************************************************* 

if __name__ == '__main__': 
    app = QApplication(sys.argv)
    bili = Nude_transform_gui()
    bili.show()
    sys.exit(app.exec_())

#优点永远居中,缺点图片逐渐模糊。

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

from  PyQt5.QtGui  import *
from  PyQt5.QtCore  import *
from  PyQt5.QtWidgets  import *
import sys
import cv2
from run import process
import argparse
import os
import random

#reload(sys)
#sys.setdefaultencoding("utf-8")


global image_name
image_name=""



#*******************************************************************
#*******************************************************************
#***************************布局类**********************************
#*******************************************************************
#*******************************************************************
class graphicsView(QGraphicsView):
    def __init__(self,parent=None):
        super(graphicsView,self).__init__(parent)

        self.image=""
        self.zoomscale=1
        

    def wheelEvent(self, event):
        
        global image_name   
        if image_name!="":
            self=image_name
            angle=event.angleDelta() / 8                                         
            angleX=angle.x()  
            angleY=angle.y()  
            #print(angleX,angleY)
            if angleY >= 0:
                self.zoomscale=self.zoomscale+0.1
                self.item.setScale(self.zoomscale)
                self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                    
           
            elif angleY <=  0:
                self.zoomscale=self.zoomscale-0.1
                self.item.setScale(self.zoomscale)
                self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
        
                
                    
                
           


        
  
                
           
                
#*******************************************************************
#*******************************************************************
#***************************拖拽类**********************************
#*******************************************************************
#*******************************************************************

class MyLineEdit(QLineEdit):
        def __init__( self, parent=None ):
            super(MyLineEdit, self).__init__(parent)
            self.setDragEnabled(True)

        def dragEnterEvent( self, event ):
            
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                event.acceptProposedAction()
        def dragMoveEvent( self, event ):
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                event.acceptProposedAction()

        def dropEvent( self, event ):
            data = event.mimeData()
            urls = data.urls()
            if ( urls and urls[0].scheme() == 'file' ):
                filepath = str(urls[0].path())[1:]
                self.setText(filepath)

#*******************************************************************
#*******************************************************************
#***************************功能类**********************************
#*******************************************************************
#*******************************************************************
class Nude_transform_gui(QWidget):
    
    def __init__(self):
        super(Nude_transform_gui,self).__init__()
        #self.setWindowFlags(Qt.Window)
        self.setWindowTitle("Ai_Nude_Tool_a")
        
        self.initUI()
    def initUI(self):


        pic_address=QLabel(u'图片地址:')
        self.pic_address=MyLineEdit()
        pic_button=QPushButton(u"加载")

        save_address=QLabel(u'图片地址:')
        self.save_address=MyLineEdit()
        save_button=QPushButton(u"浏览")

        
        self._tree=graphicsView(self)
 
        
        start_work=QPushButton(u"转换图片")
 


        pbar=QLabel(u"进度")
        self.time_pos=QLineEdit()
        self.pbar = QProgressBar()

        #print dir(self.pbar)

        
        #groupNameData.setFrameStyle(QFrame.Panel|QFrame.Sunken)
        

        
        laty_1=QHBoxLayout()
        laty_1.addWidget(pic_address)
        laty_1.addWidget(self.pic_address)
        laty_1.addWidget(pic_button)
     

        laty_2=QHBoxLayout()
        laty_2.addWidget(self._tree)
        
        
      

        laty_3=QHBoxLayout()
        laty_3.addWidget(save_address)
        laty_3.addWidget(self.save_address)
        laty_3.addWidget(save_button)


        laty_4=QHBoxLayout()
        #print(dir(laty_4))
        laty_4.addStretch(10)
        laty_4.addSpacing(10)
        laty_4.addWidget(self.time_pos,1)
        laty_4.addWidget(pbar,1)
        laty_4.addWidget(self.pbar ,3)
        laty_4.addWidget(start_work,2)




        all_lay=QVBoxLayout()
        all_lay.addLayout(laty_1)
        all_lay.addLayout(laty_2)
        all_lay.addLayout(laty_3)
        all_lay.addLayout(laty_4)


      
        self.setLayout(all_lay)
        
        self.resize(600,700)


        pic_button.clicked.connect(self.get_pic_address)
        save_button.clicked.connect(self.get_save_address)
        start_work.clicked.connect(self.transform_nude)


        self.show()



    def get_pic_address(self):
            pic_address=self.pic_address.text()
            if(pic_address==""):
                QMessageBox.information(self,u"提示", u"请输入图片地址")
                return
            name=pic_address
            if os.path.exists(name):
                self._tree.image=QPixmap(name)
                
                    
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)               
                self._tree.graphicsView.addItem(self._tree.item)
                self._tree.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                if self._tree.image.width()!=500:
                    self._tree.item.setScale(500/self._tree.image.width()) 
                self._tree.setScene(self._tree.graphicsView)
                global image_name
                image_name=self._tree
                #print(image_name)
                
    def get_save_address(self):
        filename = QFileDialog.getExistingDirectory()
        if filename:
            filename=filename.replace("\\",'/')

    def createRandomString(self,len):
        print ('wet'.center(10,'*'))
        raw = ""
        range1 = range(58, 65) # between 0~9 and A~Z
        range2 = range(91, 97) # between A~Z and a~z

        i = 0
        while i < len:
            seed = random.randint(48, 122)
            if ((seed in range1) or (seed in range2)):
                continue;
            raw += chr(seed);
            i += 1
        return raw
    
    def _process(self,i_image, o_image, use_gpu):
        try:
            dress = cv2.imread(i_image)
            h = dress.shape[0]
            w = dress.shape[1]
            dress = cv2.resize(dress, (512,512), interpolation=cv2.INTER_CUBIC)
            watermark = process(dress, use_gpu)
            watermark =  cv2.resize(watermark, (w,h), interpolation=cv2.INTER_CUBIC)
            cv2.imwrite(o_image, watermark)
            print("[*] Image saved as: %s" % o_image)
            self.pbar.setValue(100)
            name=o_image
            if os.path.exists(name):
                self._tree.image=QPixmap(name)
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)               
                self._tree.graphicsView.addItem(self._tree.item)
                self._tree.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                if self._tree.image.width()!=500:
                    self._tree.item.setScale(500/self._tree.image.width()) 
                self._tree.setScene(self._tree.graphicsView)
                global image_name
                image_name=self._tree
        except Exception as e:
            print(e)
	
            

    def transform_nude(self):
        self.pbar.setValue(5)
        if str(self.pic_address.text())=="" or str(self.save_address.text())=="":
            QMessageBox.information(self,u"提示", u"请输入图片储存地址,视频名称可不写")
            return
        current_dir = os.path.abspath(os.path.dirname(__file__))
        os.chdir(current_dir)
        if(str(self.time_pos.text())==""):
            use_gpu=False
        else:
            use_gpu=True
        input_address=str(self.pic_address.text())
        if "." in str(self.save_address.text()):
            output_address=str(self.save_address.text())
        else:
            output_address=str(self.save_address.text())+"/"+os.path.splitext(os.path.basename(input_address))[0]+"_"+self.createRandomString(5)+".png"

 
        #print( output_address)
        
        self._process(input_address, output_address, use_gpu)
        #self.pbar.setValue(100)


#*******************************************************************
#*******************************************************************
#***************************主函数***********************************
#*******************************************************************
#******************************************************************* 

if __name__ == '__main__': 
    app = QApplication(sys.argv)
    bili = Nude_transform_gui()
    bili.show()
    sys.exit(app.exec_())

在这里插入图片描述
优点,不会变模糊,缺点未找到居中方法,估计要自己写。

这里只是功能界面,不包含操作函数,运行功能按钮会报错。

deep_nude_ai----> githup

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值