首页 » PHP教程 » 冰墩墩的php法式源码技巧_用Python做个冰墩墩雪容融桌面部件好玩又有趣

冰墩墩的php法式源码技巧_用Python做个冰墩墩雪容融桌面部件好玩又有趣

访客 2024-11-16 0

扫一扫用手机浏览

文章目录 [+]

下面,我们开始先容这个自定义桌面动画挂件的制作过程。

一、核心功能设计

实现将动态图gif或视频转成一个桌面动画挂件,知识点紧张涉及了对GIF图/视频解析,人像提取分割,PyQt5窗体设置,自定义挂件动画实现,ico图标天生,程序打包等。

冰墩墩的php法式源码技巧_用Python做个冰墩墩雪容融桌面部件好玩又有趣

拆解需求,大致可以整理出我们须要分为以下几步完成:

冰墩墩的php法式源码技巧_用Python做个冰墩墩雪容融桌面部件好玩又有趣
(图片来自网络侵删)

1.对gif或者视频进行逐帧解析,获取转换的图片,提取图像中人体区域,并对图片进行批量尺寸大小修正更换2.初始化设置动画挂件窗体显示效果,窗体位置、大小等3.桌面动画挂件功能实现,动画轮播、鼠标掌握挂件位置拖动4.挂件打包图标设置、打包配置

二、实现步骤解析提取,修正图片GIF图解析:

首先我们须要将Gif逐帧进行解析 ,转换成图片格式。
代码如下:

from PIL import Image # 导入PIL的Image包import osgifFileName = "./demo.gif" # 把gif图赋值给gifFileNameim = Image.open(gifFileName) # 利用Image的open函数打开test.gif图像pngDir = gifFileName[:-4] # 倒着从gifFileName中的倒数第四个开始取字符(跳过.gif),赋值给pngDir,作为文件夹的名字if not os.path.exists(pngDir): os.makedirs('./img') # 用图片名创建一个文件夹,用来存放每帧图片,名字为pngDir的值try: while True: # 去世循环 current = im.tell() # 用tell函数保存当前帧图片,赋值给current im.save(pngDir+'/'+str(current+1)+'.png') # 调用save函数保存该帧图片 im.seek(current+1) # 调用seek函数获取下一帧图片,参数变为current帧图片+1 # 这里再次进入循环,当为末了一帧图片时,seek会抛出非常,代码实行exceptexcept EOFError: pass # 末了一帧时,seek抛出非常,进入这里,pass跳过

gif逐帧转为图片,效果如下:

视频解析:

对视频解析,也是逐帧进行解析,转换成多少张图片,代码如下:

# 将视频按照每一帧转成图片pngimport cv2videoFileName = "./demo.mp4" # 把视频路径赋值给videoFileNamepngDir = videoFileName[:-4] # 倒着从gifFileName中的倒数第四个开始取字符(跳过.后缀),赋值给pngDir,作为文件夹的名字if not os.path.exists(pngDir): os.makedirs(pngDir) # 用图片名创建一个文件夹,用来存放每帧图片,名字为pngDir的值# 视频处理 分割成一帧帧图片cap = cv2.VideoCapture(videoFileName)num = 1while True: # 逐帧读取视频 按顺序保存到本地文件夹 ret, frame = cap.read() if ret: cv2.imwrite(f"{pngDir}/{num}.png", frame) # 保存一帧帧的图片 num += 1 else: breakcap.release() # 开释资源桌面小部件功能初始化动画部件

# 窗体初始化def windowinit(self): self.x = 1650 self.y = 860 self.setGeometry(self.x, self.y, 300, 300) self.setWindowTitle('My Gadgets') self.img_num = 1 self.img_path = './image/{file}/{img}.png'.format(file=self.dis_file, img=str(self.img_num)) self.lab = QLabel(self) self.qpixmap = QPixmap(self.img_path) self.lab.setPixmap(self.qpixmap) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow) self.setAutoFillBackground(False) self.setAttribute(Qt.WA_TranslucentBackground, True) self.show()def __init__(self): super(Gadgets, self).__init__() self.dis_file = "img1" self.windowinit() self.icon_quit() self.pos_first = self.pos() self.img_count = len(os.listdir('./image/{}'.format(self.dis_file)))

这样只是完成了图片的静态显示,下面我们来完成图片的动态轮播效果

动画轮播:

self.timer = QTimer()self.timer.timeout.connect(self.img_update)self.timer.start(100)def img_update(self): if self.img_num < self.img_count: self.img_num += 1 else: self.img_num = 1 self.img_path = './image/{file}/{img}.png'.format(file=self.dis_file, img=str(self.img_num)) self.qpixmap = QPixmap(self.img_path) self.lab.setPixmap(self.qpixmap)鼠标掌握挂件位置拖动:

def mousePressEvent(self, QMouseEvent): if QMouseEvent.button() == Qt.LeftButton: self.pos_first = QMouseEvent.globalPos() - self.pos() QMouseEvent.accept() self.setCursor(QCursor(Qt.OpenHandCursor))def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton: self.move(QMouseEvent.globalPos() - self.pos_first) print(self.pos()) self.x, self.y = self.pos().x, self.pos().y QMouseEvent.accept()def quit(self): self.close() sys.exit()

到此为止,桌面小部件已开拓完成,效果如下:

可以利用将程序打包为exe可实行文件直接发给你的朋友,这样就不用安装python环境了。

公众年夜众号:Python编程站

源码及图片素材已经放在公众年夜众号了

回答关键字:“冰墩墩雪容融桌面部件”

即可领取完全源码。

给个赞吧!

标签:

相关文章

二维火,引领新零售浪潮的智慧平台

随着互联网技术的飞速发展,新零售行业应运而生。二维火作为国内领先的新零售解决方案提供商,凭借其强大的技术实力和丰富的行业经验,为众...

PHP教程 2025-01-01 阅读0 评论0

全面介绍中毒检查,守护健康,从预防开始

随着生活节奏的加快,环境污染、食品安全等问题日益突出,中毒事件时有发生。及时发现和处理中毒,对于保障人民群众的生命健康具有重要意义...

PHP教程 2025-01-01 阅读0 评论0

全面介绍,如何根据其他方式有效清理

随着社会的不断发展,人们对生活品质的要求越来越高,对于各种物品的清理和维护也越来越重视。面对琳琅满目的清理方法,许多人陷入了选择的...

PHP教程 2025-01-01 阅读0 评论0

书签的修复与保养,让阅读之旅更加顺畅

书签,作为一种阅读辅助工具,陪伴了无数读者度过漫长的阅读时光。随着岁月的流逝,书签也难免会出现破损、褪色等问题。本文将为您介绍如何...

PHP教程 2025-01-01 阅读0 评论0

书籍复印的艺术,方法与方法的详细介绍

书籍复印,作为一项古老的技艺,在现代社会中依然具有重要的地位。它不仅方便了读者获取知识,而且为文献的传承和保护做出了巨大贡献。书籍...

PHP教程 2025-01-01 阅读0 评论0