在这里插入图片描述
1,第一个文本框可以直接复制网络图片地址,点击加载可以预览;点击转换图片可以下载,第二个文本框若为目录,图片会自动名称,为具体图片名称,以图片名称为准。

2,双击鼠标可以切换图片,不过必须有data.txt,里面必须有图片的地址,这些图片并没有下载,必须点击转换图片才会下载。

3,左键可以拖动图片到任意位置。

4,滑轮可以缩放图片。

5,文本框皆支持拖入路径的操作。

6,也可以直接拖入本地图片预览,本地图片不支持下载。

7,本地图片可以直接拖入中间区域,也可以拖入文本框后,点击加载,效果一致。

8,data.txt网络图片地址可以支持自己添加,将网络图片地址复制进去复制进去,不过每个图片地址必须单独为一行。如果不喜欢这些图片,可以将数据删除,重新手动添加。
9,点击switch开关时,会默认按照每六秒切换一张图片。
10,修改间隔时间后,必须为整数,会按照修改时间的间隔切换图片。
11,添加特定情况下滚轮刷新图片。
详情请查看github

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

from  PyQt4.QtGui  import *
from  PyQt4.QtCore  import *
import sys,re
import urllib2
import argparse
import os
import random
import requests

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

headers = {
    "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36",
   'Referer':'http://m.mzitu.com/15309'}

PIC=[".jpg",".JPG",".PNG",".png",".JPEG",".jpeg",".bmp",".BMP",".gif",".GIF"]




import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class SwitchBtn(QWidget):
    #信号
    checkedChanged = pyqtSignal(bool)
    def __init__(self,parent=None):
        super(QWidget, self).__init__(parent)

        self.checked = False
        self.bgColorOff = QColor(30, 30, 30)
        self.bgColorOn = QColor(0, 200, 0)

        self.sliderColorOff = QColor(100, 100, 100)
        self.sliderColorOn = QColor(100, 184, 255)

        self.textColorOff = QColor(143, 143, 143)
        self.textColorOn = QColor(255, 255, 255)

        self.textOff = "off"
        self.textOn = "on"

        self.space = 2
        self.rectRadius = 5

        self.step = self.width() / 50
        self.startX = 0
        self.endX = 0

        self.timer = QTimer(self)  # 初始化一个定时器
        self.timer.timeout.connect(self.updateValue)  # 计时结束调用operate()方法

        #self.timer.start(5)  # 设置计时间隔并启动

        self.setFont(QFont("Microsoft Yahei", 10))

        #self.resize(55,22)

    def updateValue(self):
        if self.checked:
            if self.startX < self.endX:
                self.startX = self.startX + self.step
            else:
                self.startX = self.endX
                self.timer.stop()
        else:
            if self.startX  > self.endX:
                self.startX = self.startX - self.step
            else:
                self.startX = self.endX
                self.timer.stop()

        self.update()


    def mousePressEvent(self,event):
        self.checked = not self.checked
        #发射信号
        self.checkedChanged.emit(self.checked)

        # 每次移动的步长为宽度的50分之一
        self.step = self.width() / 50
        #状态切换改变后自动计算终点坐标
        if self.checked:
            self.endX = self.width() - self.height()
        else:
            self.endX = 0
        self.timer.start(5)

    def paintEvent(self, evt):
        #绘制准备工作, 启用反锯齿
            painter = QPainter()



            painter.begin(self)

            painter.setRenderHint(QPainter.Antialiasing)


            #绘制背景
            self.drawBg(evt, painter)
            #绘制滑块
            self.drawSlider(evt, painter)
            #绘制文字
            self.drawText(evt, painter)

            painter.end()


    def drawText(self, event, painter):
        painter.save()

        if self.checked:
            painter.setPen(self.textColorOn)
            painter.drawText(0, 0, self.width() / 2 + self.space * 2, self.height(), Qt.AlignCenter, self.textOn)
        else:
            painter.setPen(self.textColorOff)
            painter.drawText(self.width() / 2, 0,self.width() / 2 - self.space, self.height(), Qt.AlignCenter, self.textOff)

        painter.restore()


    def drawBg(self, event, painter):
        painter.save()
        painter.setPen(Qt.NoPen)

        if self.checked:
            painter.setBrush(self.bgColorOn)
        else:
            painter.setBrush(self.bgColorOff)

        rect = QRect(0, 0, self.width(), self.height())
        #半径为高度的一半
        radius = rect.height() / 2
        #圆的宽度为高度
        circleWidth = rect.height()

        path = QPainterPath()
        path.moveTo(radius, rect.left())
        path.arcTo(QRectF(rect.left(), rect.top(), circleWidth, circleWidth), 90, 180)
        path.lineTo(rect.width() - radius, rect.height())
        path.arcTo(QRectF(rect.width() - rect.height(), rect.top(), circleWidth, circleWidth), 270, 180)
        path.lineTo(radius, rect.top())

        painter.drawPath(path)
        painter.restore()

    def drawSlider(self, event, painter):
        painter.save()

        if self.checked:
            painter.setBrush(self.sliderColorOn)
        else:
            painter.setBrush(self.sliderColorOff)

        rect = QRect(0, 0, self.width(), self.height())
        sliderWidth = rect.height() - self.space * 2
        sliderRect = QRect(self.startX + self.space, self.space, sliderWidth, sliderWidth)
        painter.drawEllipse(sliderRect)

        painter.restore()







#*******************************************************************
#*******************************************************************
#***************************布局类**********************************
#*******************************************************************
#*******************************************************************
class graphicsView(QGraphicsView):
    def __init__(self,parent=None):
        super(graphicsView,self).__init__(parent)
        self._parent=parent
        self.zoomscale=1
        self.pos=0
        
    
    def read_txt(self,path):
        mt=[]
        f=open(path,'r')
        for t in f.readlines():
            mt.append(t)
        f.close()
        return mt
    def mouseDoubleClickEvent(self,event):
        try:
                self._parent.pbar.setValue(0)
                path="data.txt"
                #if event.button()==Qt.RightButton:
                #drag = QDrag()
                mt=self.read_txt(path)
                self._parent._tree.zoomscale=1
                url=mt[random.randrange(0,len(mt))]
                url=url.replace("\n","")
                self.pos+=1
                self._parent.pic_address.setText(url)
                
   
                request =  urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                                       
                self.image=QPixmap()
                
                self.image.loadFromData(response.read())

                
                self.graphicsView= QGraphicsScene()            
                self._parent._tree.item = QGraphicsPixmapItem(self.image)
                self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  
                self._parent._tree.graphicsView.addItem(self._parent._tree.item)

                self._parent._tree.setAlignment(Qt.AlignCenter)
                if self.image.width()!=500:
                    try:
                        self._parent._tree.item.setScale(400.0/self.image.width())
                    except:
                        self._parent._tree.item.setScale(0.7)
                self._parent._tree.setScene(self.graphicsView)
                #drag.exec_() #exec()函数并不会阻塞主函数
        except Exception as e:
            print e
    def refresh_pic(self):
        try:
            if self._parent.switchBtn.checked ==True:
                self._parent.pbar.setValue(0)
                path="data.txt"
                #if event.button()==Qt.RightButton:
                #drag = QDrag()
                mt=self.read_txt(path)
                self._parent._tree.zoomscale=1
                url=mt[random.randrange(0,len(mt))]
                url=url.replace("\n","")
                self.pos+=1
                self._parent.pic_address.setText(url)
                
   
                request =  urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                                       
                self.image=QPixmap()
                
                self.image.loadFromData(response.read())

                
                self.graphicsView= QGraphicsScene()            
                self._parent._tree.item = QGraphicsPixmapItem(self.image)
                self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  
                self._parent._tree.graphicsView.addItem(self._parent._tree.item)

                self._parent._tree.setAlignment(Qt.AlignCenter)
                if self.image.width()!=500:
                    try:
                        self._parent._tree.item.setScale(400.0/self.image.width())
                    except:
                        self._parent._tree.item.setScale(0.7)
                self._parent._tree.setScene(self.graphicsView)
                #drag.exec_() #exec()函数并不会阻塞主函数
        except Exception as e:
            print e
     
            
            
 


    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:]
                temp=0
                for pic in PIC:
                    if pic == os.path.splitext(filepath)[1]:
                        temp=1
                if temp==1 :
                    filepath=filepath.decode("utf-8")
                    self._parent.pic_address.setText(filepath)
                    print(filepath)
                    self.image=QPixmap(filepath)
                    self.graphicsView= QGraphicsScene()            
                    self._parent._tree.item = QGraphicsPixmapItem(self.image)
                    
                    self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                    #self.item.setScale(self.zoomscale)
                    self._parent._tree.graphicsView.addItem(self.item)
                    #self.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                    self._parent._tree.setAlignment(Qt.AlignLeft)
                    if self.image.width()!=500:
                        self._parent._tree.item.setScale(500.0/self.image.width()) 
                    self._parent._tree.setScene(self.graphicsView)
                else:
                    QMessageBox.information(self,u"提示", u"不是图片")


    def wheelEvent(self, event):
        try:
            if self._parent.switchBtn.checked ==True:
                path="data.txt"
                #if event.button()==Qt.RightButton:
                #drag = QDrag()
                mt=self.read_txt(path)
                self._parent._tree.zoomscale=1
                url=mt[random.randrange(0,len(mt))]
                url=url.replace("\n","")
                self.pos+=1
                self._parent.pic_address.setText(url)
                
   
                request =  urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                                       
                self.image=QPixmap()
                
                self.image.loadFromData(response.read())

                
                self.graphicsView= QGraphicsScene()            
                self._parent._tree.item = QGraphicsPixmapItem(self.image)
                self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  
                self._parent._tree.graphicsView.addItem(self._parent._tree.item)

                self._parent._tree.setAlignment(Qt.AlignCenter)
                if self.image.width()!=500:
                    try:
                        self._parent._tree.item.setScale(400.0/self.image.width())
                    except:
                        self._parent._tree.item.setScale(0.7)
                self._parent._tree.setScene(self.graphicsView)
            else:
                angle=event.delta()                        
                #print(angleX,angleY)
                if angle >= 0:
                    if self.zoomscale<1.5:
                        try:
                            self.zoomscale=self.zoomscale+0.1
                            self._parent._tree.item.setScale(self.zoomscale)
                            #self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                        except:
                            pass
               
               
                elif angle <=  0:
                    if self.zoomscale>0.2:
                        try:
                            self.zoomscale=self.zoomscale-0.1
                            self._parent._tree.item.setScale(self.zoomscale)
                            #self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                        except:
                            pass

               
        except Exception as e:
            print e

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

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:]
                filepath=filepath.decode("utf-8")
                self.setText(filepath)

#*******************************************************************
#*******************************************************************
#***************************功能类**********************************
#*******************************************************************
#*******************************************************************
class Nude_transform_gui(QWidget):
    
    def __init__(self):
        super(Nude_transform_gui,self).__init__()
        #self.setWindowFlags(Qt.Window)
        self.setWindowTitle(u"ネットご覧程式")
        
        self.initUI()
    def initUI(self):
        file = QFile('white.qss')
        file.open(QFile.ReadOnly)
        styleSheet = file.readAll()
        styleSheet = unicode(styleSheet, encoding='utf8')
        qApp.setStyleSheet(styleSheet)

        self.setWindowIcon(QIcon("tu.ico"))


        pic_address=QLabel(u'图片地址:')
        self.pic_address=MyLineEdit(r'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1566046461&di=eb7e24fbbd31054e8b19de7f3b7ac117&imgtype=jpg&er=1&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201509%2F08%2F20150908181705_QGcWt.jpeg')
        pic_button=QPushButton(u"加载")

        save_address=QLabel(u'图片地址:')
        address=str(os.path.abspath(os.path.dirname(__file__)))
        address=address.decode("GBK")
        self.save_address=MyLineEdit(address)
        save_button=QPushButton(u"浏览")

        
        self._tree=graphicsView(self)
 
        
        start_work=QPushButton(u"下载图片")
 

        switchBtn_name=QLabel(u"自动切换")
        self.switchBtn = SwitchBtn(self)

        time_v=QLabel(u"时间间隔")
        self.time_v=QLineEdit(u"6")

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

        self.timer = QTimer(self)

        #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()
        laty_4.addWidget(switchBtn_name,1)
        laty_4.addWidget(self.switchBtn,3)
        laty_4.addWidget(time_v,1)
        laty_4.addWidget(self.time_v,1)
        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(550,650)


        pic_button.clicked.connect(self.get_pic_address)
        save_button.clicked.connect(self.get_save_address)
        start_work.clicked.connect(self.transform_nude)
        self._tree.connect(self.timer,SIGNAL("timeout()"),self._tree.refresh_pic)
        self.time_v.textChanged.connect(self.changetime)
        self.timer.start(6000) #设置计时
        #self.timer.start(5000) #设置计时
   
   

    def changetime(self):
        try:
            time=int(str(self.time_v.text()))
            self.timer.start(1000*time) #设置计时
        except:
            pass
        
    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.zoomscale=1
                self._tree.image=QPixmap(name)
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)
                self._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                self._tree.graphicsView.addItem(self._tree.item)
                #self._tree.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                self._tree.setAlignment(Qt.AlignLeft)
                if self._tree.image.width()!=500:
                    self._tree.item.setScale(500.0/self._tree.image.width()) 
                self._tree.setScene(self._tree.graphicsView)
            else:
                self._tree.zoomscale=1
                req = requests.get(name,headers=headers)
                self._tree.image=QPixmap()
                self._tree.image.loadFromData(req.content)

                
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)
                self._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                self._tree.graphicsView.addItem(self._tree.item)
                #self._tree.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                self._tree.setAlignment(Qt.AlignLeft)
                if self._tree.image.width()!=500:
                    try:
                        self._tree.item.setScale(500.0/self._tree.image.width())
                    except:
                        self._tree.item.setScale(0.7)
                self._tree.setScene(self._tree.graphicsView)

                
                
    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 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
        pic_address=str(self.pic_address.text())
        output_address=str(self.save_address.text())
        if "." in str(self.save_address.text()):
            output_address=str(self.save_address.text())
        else:
            
            output_address=str(self.save_address.text())+"/" +"_"+self.createRandomString(5)+"."+pic_address.split(".")[-1]
        if os.path.exists(pic_address):
            QMessageBox.information(self,u"提示", u"本地图片不可下载!")
            return
        else:
            request =  urllib2.Request(url=pic_address, headers=headers)
            response = urllib2.urlopen(request)
            output_address=output_address.decode("utf-8")
            with open(output_address, "wb") as f:
                f.write(response.read())
            self.pbar.setValue(100)
            self.box = QMessageBox(QMessageBox.Information, u"提示", u"下载成功!")
            self.box.addButton(u"确定", QMessageBox.YesRole).animateClick(1*1000)
            self.box.exec_()


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

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

更新修复jpg不显示问题。
#-- coding:utf-8 --

from  PyQt4.QtGui  import *
from  PyQt4.QtCore  import *
import sys,re
import urllib2
import argparse
import os
import random
import requests
import cv2
from io import BytesIO
from PIL import Image
import io

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

headers = {
    "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36",
    'Referer':'http://pic.netbian.com/'}

PIC=[".jpg",".JPG",".PNG",".png",".JPEG",".jpeg",".bmp",".BMP",".gif",".GIF"]




import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class SwitchBtn(QWidget):
    #信号
    checkedChanged = pyqtSignal(bool)
    def __init__(self,parent=None):
        super(QWidget, self).__init__(parent)

        self.checked = False
        self.bgColorOff = QColor(30, 30, 30)
        self.bgColorOn = QColor(0, 200, 0)

        self.sliderColorOff = QColor(100, 100, 100)
        self.sliderColorOn = QColor(100, 184, 255)

        self.textColorOff = QColor(143, 143, 143)
        self.textColorOn = QColor(255, 255, 255)

        self.textOff = "off"
        self.textOn = "on"

        self.space = 2
        self.rectRadius = 5

        self.step = self.width() / 50
        self.startX = 0
        self.endX = 0

        self.timer = QTimer(self)  # 初始化一个定时器
        self.timer.timeout.connect(self.updateValue)  # 计时结束调用operate()方法

        #self.timer.start(5)  # 设置计时间隔并启动

        self.setFont(QFont("Microsoft Yahei", 10))

        #self.resize(55,22)

    def updateValue(self):
        if self.checked:
            if self.startX < self.endX:
                self.startX = self.startX + self.step
            else:
                self.startX = self.endX
                self.timer.stop()
        else:
            if self.startX  > self.endX:
                self.startX = self.startX - self.step
            else:
                self.startX = self.endX
                self.timer.stop()

        self.update()


    def mousePressEvent(self,event):
        self.checked = not self.checked
        #发射信号
        self.checkedChanged.emit(self.checked)

        # 每次移动的步长为宽度的50分之一
        self.step = self.width() / 50
        #状态切换改变后自动计算终点坐标
        if self.checked:
            self.endX = self.width() - self.height()
        else:
            self.endX = 0
        self.timer.start(5)

    def paintEvent(self, evt):
        #绘制准备工作, 启用反锯齿
            painter = QPainter()



            painter.begin(self)

            painter.setRenderHint(QPainter.Antialiasing)


            #绘制背景
            self.drawBg(evt, painter)
            #绘制滑块
            self.drawSlider(evt, painter)
            #绘制文字
            self.drawText(evt, painter)

            painter.end()


    def drawText(self, event, painter):
        painter.save()

        if self.checked:
            painter.setPen(self.textColorOn)
            painter.drawText(0, 0, self.width() / 2 + self.space * 2, self.height(), Qt.AlignCenter, self.textOn)
        else:
            painter.setPen(self.textColorOff)
            painter.drawText(self.width() / 2, 0,self.width() / 2 - self.space, self.height(), Qt.AlignCenter, self.textOff)

        painter.restore()


    def drawBg(self, event, painter):
        painter.save()
        painter.setPen(Qt.NoPen)

        if self.checked:
            painter.setBrush(self.bgColorOn)
        else:
            painter.setBrush(self.bgColorOff)

        rect = QRect(0, 0, self.width(), self.height())
        #半径为高度的一半
        radius = rect.height() / 2
        #圆的宽度为高度
        circleWidth = rect.height()

        path = QPainterPath()
        path.moveTo(radius, rect.left())
        path.arcTo(QRectF(rect.left(), rect.top(), circleWidth, circleWidth), 90, 180)
        path.lineTo(rect.width() - radius, rect.height())
        path.arcTo(QRectF(rect.width() - rect.height(), rect.top(), circleWidth, circleWidth), 270, 180)
        path.lineTo(radius, rect.top())

        painter.drawPath(path)
        painter.restore()

    def drawSlider(self, event, painter):
        painter.save()

        if self.checked:
            painter.setBrush(self.sliderColorOn)
        else:
            painter.setBrush(self.sliderColorOff)

        rect = QRect(0, 0, self.width(), self.height())
        sliderWidth = rect.height() - self.space * 2
        sliderRect = QRect(self.startX + self.space, self.space, sliderWidth, sliderWidth)
        painter.drawEllipse(sliderRect)

        painter.restore()







#*******************************************************************
#*******************************************************************
#***************************布局类**********************************
#*******************************************************************
#*******************************************************************
class graphicsView(QGraphicsView):
    def __init__(self,parent=None):
        super(graphicsView,self).__init__(parent)
        self._parent=parent
        self.zoomscale=1
        self.pos=0
        
    
    def read_txt(self,path):
        mt=[]
        f=open(path,'r')
        for t in f.readlines():
            mt.append(t)
        f.close()
        return mt
    def mouseDoubleClickEvent(self,event):
        try:
                path="data.txt"
                #if event.button()==Qt.RightButton:
                #drag = QDrag()
                mt=self.read_txt(path)
                self._parent._tree.zoomscale=1
                url=mt[random.randrange(0,len(mt))]
                url=url.replace("\n","")
                self.pos+=1
                self._parent.pic_address.setText(url)
                
   
                request =  urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                data= self.image_to_byte_array(response.read())
                                       
                self.image=QPixmap()
                
                self.image.loadFromData(data)

                
                self.graphicsView= QGraphicsScene()            
                self._parent._tree.item = QGraphicsPixmapItem(self.image)
                self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  
                self._parent._tree.graphicsView.addItem(self._parent._tree.item)

                self._parent._tree.setAlignment(Qt.AlignCenter)
                if self.image.width()!=500:
                    try:
                        self._parent._tree.item.setScale(400.0/self.image.width())
                    except:
                        self._parent._tree.item.setScale(0.7)
                self._parent._tree.setScene(self.graphicsView)
                #drag.exec_() #exec()函数并不会阻塞主函数
        except Exception as e:
            print e
    def image_to_byte_array(self,html):#将jpg字节转换为png字节
        byte_stream = BytesIO(html)  # 把请求到的数据转换为Bytes字节流
        roiImg = Image.open(byte_stream)   # Image打开Byte字节流数据
        #roiImg.show()   #  弹出 显示图片
        imgByteArr = io.BytesIO()     # 创建一个空的Bytes对象
        roiImg.save(imgByteArr, format='PNG') # PNG就是图片格式,我试过换成JPG/jpg都不行
        imgByteArr = imgByteArr.getvalue()
        return imgByteArr
    def refresh_pic(self):
        try:
            if self._parent.switchBtn.checked ==True:
                path="data.txt"
                #if event.button()==Qt.RightButton:
                #drag = QDrag()
                mt=self.read_txt(path)
                self._parent._tree.zoomscale=1
                url=mt[random.randrange(0,len(mt))]
                url=url.replace("\n","")
                self.pos+=1
                self._parent.pic_address.setText(url)
                
   
                request =  urllib2.Request(url, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                data= self.image_to_byte_array(response.read())
                                       
                self.image=QPixmap()
                
                self.image.loadFromData(data)

                
                self.graphicsView= QGraphicsScene()            
                self._parent._tree.item = QGraphicsPixmapItem(self.image)
                self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  
                self._parent._tree.graphicsView.addItem(self._parent._tree.item)

                self._parent._tree.setAlignment(Qt.AlignCenter)
                if self.image.width()!=500:
                    try:
                        self._parent._tree.item.setScale(400.0/self.image.width())
                    except:
                        self._parent._tree.item.setScale(0.7)
                self._parent._tree.setScene(self.graphicsView)
                #drag.exec_() #exec()函数并不会阻塞主函数
        except Exception as e:
            print e
     
            
            
 


    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:]
                temp=0
                for pic in PIC:
                    if pic == os.path.splitext(filepath)[1]:
                        temp=1
                if temp==1 :
                    self._parent.pic_address.setText(filepath)
                    print(filepath)
                    img = cv2.imread(filepath)  # 读取图像
                    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换图像通道
                    x = img.shape[1]  # 获取图像大小
                    y = img.shape[0]
      
                    frame = QImage(img, x, y, QImage.Format_RGB888)

                    self.image=QPixmap(frame)
                    self.graphicsView= QGraphicsScene()            
                    self._parent._tree.item = QGraphicsPixmapItem(self.image)
                    
                    self._parent._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                    #self.item.setScale(self.zoomscale)
                    self._parent._tree.graphicsView.addItem(self.item)
                    #self.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                    self._parent._tree.setAlignment(Qt.AlignLeft)
                    if self.image.width()!=500:
                        self._parent._tree.item.setScale(500.0/self.image.width()) 
                    self._parent._tree.setScene(self.graphicsView)
                else:
                    QMessageBox.information(self,u"提示", u"不是图片")


    def wheelEvent(self, event):
            angle=event.delta()                        
  
            #print(angleX,angleY)
            if angle >= 0:
                if self.zoomscale<1.5:
                    try:
                        self.zoomscale=self.zoomscale+0.1
                        self._parent._tree.item.setScale(self.zoomscale)
                        #self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                    except:
                        pass
           
           
            elif angle <=  0:
                if self.zoomscale>0.2:
                    try:
                        self.zoomscale=self.zoomscale-0.1
                        self._parent._tree.item.setScale(self.zoomscale)
                        #self.setAlignment(Qt.AlignCenter and Qt.AlignTop)
                    except:
                        pass
           
                
#*******************************************************************
#*******************************************************************
#***************************拖拽类**********************************
#*******************************************************************
#*******************************************************************

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:]
                filepath=filepath.decode("utf-8")
                self.setText(filepath)

#*******************************************************************
#*******************************************************************
#***************************功能类**********************************
#*******************************************************************
#*******************************************************************
class Nude_transform_gui(QWidget):
    
    def __init__(self):
        super(Nude_transform_gui,self).__init__()
        #self.setWindowFlags(Qt.Window)
        self.setWindowTitle(u"ネットご覧程式")
        
        self.initUI()
    def initUI(self):


        pic_address=QLabel(u'图片地址:')
        self.pic_address=MyLineEdit(r'http://pic.netbian.com//uploads/allimg/200609/222844-1591712924f805.jpg')
        pic_button=QPushButton(u"加载")

        save_address=QLabel(u'图片地址:')
        address=str(os.path.abspath(os.path.dirname(__file__)))
        address=address.decode("GBK")
        self.save_address=MyLineEdit(address)
        save_button=QPushButton(u"浏览")

        
        self._tree=graphicsView(self)
 
        
        start_work=QPushButton(u"下载图片")
 

        switchBtn_name=QLabel(u"自动切换")
        self.switchBtn = SwitchBtn(self)

        time_v=QLabel(u"时间间隔")
        self.time_v=QLineEdit(u"6")

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

        self.timer = QTimer(self)

        #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()
        laty_4.addWidget(switchBtn_name,1)
        laty_4.addWidget(self.switchBtn,3)
        laty_4.addWidget(time_v,1)
        laty_4.addWidget(self.time_v,1)
        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(550,650)


        pic_button.clicked.connect(self.get_pic_address)
        save_button.clicked.connect(self.get_save_address)
        start_work.clicked.connect(self.transform_nude)
        self._tree.connect(self.timer,SIGNAL("timeout()"),self._tree.refresh_pic)
        self.time_v.textChanged.connect(self.changetime)
        self.timer.start(6000) #设置计时
        #self.timer.start(5000) #设置计时
   
   

    def changetime(self):
        try:
            time=int(str(self.time_v.text()))
            self.timer.start(1000*time) #设置计时
        except:
            pass

    def image_to_byte_array(self,html):#将jpg字节转换为png字节
        byte_stream = BytesIO(html)  # 把请求到的数据转换为Bytes字节流
        roiImg = Image.open(byte_stream)   # Image打开Byte字节流数据
        #roiImg.show()   #  弹出 显示图片
        imgByteArr = io.BytesIO()     # 创建一个空的Bytes对象
        roiImg.save(imgByteArr, format='PNG') # PNG就是图片格式,我试过换成JPG/jpg都不行
        imgByteArr = imgByteArr.getvalue()
        return imgByteArr
        
    def get_pic_address(self):
        
            pic_address=self.pic_address.text()
            if(pic_address==""):
                QMessageBox.information(self,u"提示", u"请输入图片地址")
                return
    
            name=str(pic_address)
            if os.path.exists(name):
                self._tree.zoomscale=1
                self._tree.image=QPixmap(name)
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)
                self._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                self._tree.graphicsView.addItem(self._tree.item)
                #self._tree.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                self._tree.setAlignment(Qt.AlignLeft)
                if self._tree.image.width()!=500:
                    self._tree.item.setScale(500.0/self._tree.image.width()) 
                self._tree.setScene(self._tree.graphicsView)
            else:
                self._tree.zoomscale=1
                request =  urllib2.Request(name, headers=headers)
                response = urllib2.urlopen(request,timeout=2)
                data= self.image_to_byte_array(response.read())
                
                self._tree.image=QPixmap()
                self._tree.image.loadFromData(data)

                    
                self._tree.graphicsView= QGraphicsScene()            
                self._tree.item = QGraphicsPixmapItem(self._tree.image)
                self._tree.item.setFlag(QGraphicsItem.ItemIsMovable)  # 使图元可以拖动,非常关键!!!!!
                self._tree.graphicsView.addItem(self._tree.item)
                #self._tree.setAlignment(Qt.AlignLeft and Qt.AlignTop)
                self._tree.setAlignment(Qt.AlignLeft)
                if self._tree.image.width()!=500:
                    try:
                        self._tree.item.setScale(500.0/self._tree.image.width())
                    except:
                        self._tree.item.setScale(0.7)
                self._tree.setScene(self._tree.graphicsView)
         
                
    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 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
        pic_address=str(self.pic_address.text())
        output_address=str(self.save_address.text())
        if "." in str(self.save_address.text()):
            output_address=str(self.save_address.text())
        else:
            
            output_address=str(self.save_address.text())+"/" +"_"+self.createRandomString(5)+"."+pic_address.split(".")[-1]
        if os.path.exists(pic_address):
            QMessageBox.information(self,u"提示", u"本地图片不可下载!")
            return
        else:
            request =  urllib2.Request(url=pic_address, headers=headers)
            response = urllib2.urlopen(request)
            output_address=output_address.decode("utf-8")
            with open(output_address, "wb") as f:
                f.write(response.read())

            self.box = QMessageBox(QMessageBox.Information, u"提示", u"下载成功!")
            self.box.addButton(u"确定", QMessageBox.YesRole).animateClick(1*1000)
            self.box.exec_()


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

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

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐