返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python轻松生成艺术签名
  • 373
分享到

利用Python轻松生成艺术签名

2024-04-02 19:04:59 373人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一、写在前面二、先看看效果三、代码展示1.需要用到的模块2.窗口名字/图标/大小/布局3.必要组件的定义4.输入框5.保存/生成按钮6.下拉框7.组件布局8.事件绑定9.生成签名

一、写在前面

很多兄弟觉得自己字写的不好什么的,没事,咱们直接用python来生成,对着多练练就能写出一手好看的艺术签名了,小姐姐看了直呼好看~

二、先看看效果

可以选择字体、颜色,这里我们用默认的看看的效果。

啊这,一笔学不来,算了,咱们敲代码吧…

三、代码展示

1.需要用到的模块

import requests
from PIL import Image
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtGui

2.窗口名字/图标/大小/布局

self.setFixedSize(600, 500)
self.setWindowTitle('嗨学编程—艺术签名生成器')
self.setWindowIcon(QIcon('resource/icon/icon.jpg'))
self.grid = QGridLayout()

3.必要组件的定义

self.show_label = QLabel()
self.show_label.setScaledContents(True)
self.show_label.setMaximumSize(600, 400)
self.show_image = Image.open('resource/image/ori.jpg').convert('RGB')
self.updateimage()
self.show_image_ext = 'jpg'
self.name_label = QLabel('输入您的姓名:')
self.font_label = QLabel('艺术签名字体:')
self.color_label = QLabel('艺术签名颜色:')

4.输入框

self.name_edit = QLineEdit()
self.name_edit.setText('签名生成器')

5.保存/生成按钮

self.generate_button = QPushButton('生成艺术签名')
self.save_button = QPushButton('保存艺术签名')

6.下拉框

self.font_combobox = QComboBox()
for item in ['一笔艺术签', '连笔商务签', '一笔商务签', '真人手写', '暴躁字']:
    self.font_combobox.addItem(item)
self.color_combobox = QComboBox()
for item in ['Black', 'Blue', 'Red', 'Green', 'Yellow', 
             'Pink', 'DeepSkyBlue', 'Cyan', 'Orange', 'Seashell']:
    self.color_combobox.addItem(item)

7.组件布局

self.grid.addWidget(self.show_label, 0, 0, 5, 5)
self.grid.addWidget(self.name_label, 5, 0, 1, 1)
self.grid.addWidget(self.name_edit, 5, 1, 1, 4)
self.grid.addWidget(self.font_label, 6, 0, 1, 1)
self.grid.addWidget(self.font_combobox, 6, 1, 1, 4)
self.grid.addWidget(self.color_label, 7, 0, 1, 1)
self.grid.addWidget(self.color_combobox, 7, 1, 1, 4)
self.grid.addWidget(self.generate_button, 8, 3, 1, 1)
self.grid.addWidget(self.save_button, 8, 4, 1, 1)
self.setLayout(self.grid)

8.事件绑定

self.generate_button.clicked.connect(self.generate)
self.save_button.clicked.connect(self.save)

9.生成签名

def generate(self):
    font2ids_dict = {
                        '一笔艺术签': ['901', '15'],
                        '连笔商务签': ['904', '15'],
                        '一笔商务签': ['905', '14'],
                        '真人手写': ['343', '14'],
                        '卡通趣圆字': ['397', '14'],
                        '暴躁字': ['380', '14']
                }
    color2ids_dict = {
                        'Black': ['#000000', '#FFFFFF'],
                        'Blue': ['#0000FF', '#FFFFFF'],
                        'Red': ['#FF0000', '#FFFFFF'],
                        'Green': ['#00FF00', '#FFFFFF'],
                        'Yellow': ['#FFFF00', '#FFFFFF'],
                        'Pink': ['#FFC0CB', '#FFFFFF'],
                        'DeepSkyBlue': ['#00BFFF', '#FFFFFF'],
                        'Cyan': ['#00FFFF', '#FFFFFF'],
                        'Orange': ['#FFA500', '#FFFFFF'],
                        'Seashell': ['#FFF5EE', '#FFFFFF']
                    }
    url = 'Http://www.jiqie.com/a/re14.PHP'
    headers = {
                'Referer': 'http://www.jiqie.com/a/14.htm',
                'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
                'Host': 'www.jiqie.com',
                'Origin': 'http://www.jiqie.com'
            }
    ids_0 = font2ids_dict[self.font_combobox.currentText()]
    ids_1 = color2ids_dict[self.color_combobox.currentText()]
    data = {
                'id': self.name_edit.text(),
                'zhenbi': '20191123',
                'id1': ids_0[0],
                'id2': ids_0[1],
                'id3': ids_1[0],
                'id5': ids_1[1]
            }
    res = requests.post(url, headers=headers, data=data)
    image_url = re.findall(r'src="(.*?)"', res.text)[0]
    self.show_image_ext = image_url.split('.')[-1].split('?')[0]
    res = requests.get(image_url)
    fp = open('tmp.%s' % self.show_image_ext, 'wb')
    fp.write(res.content)
    fp.close()
    self.show_image = Image.open('tmp.%s' % self.show_image_ext).convert('RGB')
    self.updateimage()
    os.remove('tmp.%s' % self.show_image_ext)

10.更新界面上的图片

def updateimage(self):
    if self.show_image is None:
        return
    fp = io.BytesIO()
    self.show_image.save(fp, 'JPEG')
    qtimage = QtGui.QImage()
    qtimage.loadFromData(fp.getvalue(), 'JPEG')
    qtimage_pixmap = QtGui.QPixmap.fromImage(qtimage)
    self.show_label.setPixmap(qtimage_pixmap)

11.签名保存

def save(self):
    if self.show_image is None:
        return
    filename = QFileDialog.getSaveFileName(self, '保存', './sign.%s' % self.show_image_ext, '所有文件(*)')
    if filename[0]:
        self.show_image.save(filename[0])
        QDialog().show()

12.run

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

四、全部代码

我从来不吝啬源码,都直接放出来,不像那些,哈哈哈,懂的都懂。

import os
import re
import io
import sys
import requests
from PIL import Image
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtGui

class ArtSignGenerator(QWidget):
    def __init__(self, parent=None):
        super(ArtSignGenerator, self).__init__(parent)
        self.setFixedSize(600, 500)
        self.setWindowTitle('嗨学编程—艺术签名生成器')
        self.setWindowIcon(QIcon('resource/icon/icon.jpg'))
        self.grid = QGridLayout()

        self.show_label = QLabel()
        self.show_label.setScaledContents(True)
        self.show_label.setMaximumSize(600, 400)
        self.show_image = Image.open('resource/image/ori.jpg').convert('RGB')
        self.updateimage()
        self.show_image_ext = 'jpg'
        self.name_label = QLabel('输入您的姓名:')
        self.font_label = QLabel('艺术签名字体:')
        self.color_label = QLabel('艺术签名颜色:')

        self.name_edit = QLineEdit()
        self.name_edit.setText('签名生成器')

        self.generate_button = QPushButton('生成艺术签名')
        self.save_button = QPushButton('保存艺术签名')

        self.font_combobox = QComboBox()
        for item in ['一笔艺术签', '连笔商务签', '一笔商务签', '真人手写', '暴躁字']:
            self.font_combobox.addItem(item)
        self.color_combobox = QComboBox()
        for item in ['Black', 'Blue', 'Red', 'Green', 'Yellow', 
                     'Pink', 'DeepSkyBlue', 'Cyan', 'Orange', 'Seashell']:
            self.color_combobox.addItem(item)

        self.grid.addWidget(self.show_label, 0, 0, 5, 5)
        self.grid.addWidget(self.name_label, 5, 0, 1, 1)
        self.grid.addWidget(self.name_edit, 5, 1, 1, 4)
        self.grid.addWidget(self.font_label, 6, 0, 1, 1)
        self.grid.addWidget(self.font_combobox, 6, 1, 1, 4)
        self.grid.addWidget(self.color_label, 7, 0, 1, 1)
        self.grid.addWidget(self.color_combobox, 7, 1, 1, 4)
        self.grid.addWidget(self.generate_button, 8, 3, 1, 1)
        self.grid.addWidget(self.save_button, 8, 4, 1, 1)
        self.setLayout(self.grid)

        self.generate_button.clicked.connect(self.generate)
        self.save_button.clicked.connect(self.save)

    def generate(self):
        font2ids_dict = {
                            '一笔艺术签': ['901', '15'],
                            '连笔商务签': ['904', '15'],
                            '一笔商务签': ['905', '14'],
                            '真人手写': ['343', '14'],
                            '卡通趣圆字': ['397', '14'],
                            '暴躁字': ['380', '14']
                    }
        color2ids_dict = {
                            'Black': ['#000000', '#FFFFFF'],
                            'Blue': ['#0000FF', '#FFFFFF'],
                            'Red': ['#FF0000', '#FFFFFF'],
                            'Green': ['#00FF00', '#FFFFFF'],
                            'Yellow': ['#FFFF00', '#FFFFFF'],
                            'Pink': ['#FFC0CB', '#FFFFFF'],
                            'DeepSkyBlue': ['#00BFFF', '#FFFFFF'],
                            'Cyan': ['#00FFFF', '#FFFFFF'],
                            'Orange': ['#FFA500', '#FFFFFF'],
                            'Seashell': ['#FFF5EE', '#FFFFFF']
                        }
        url = 'http://www.jiqie.com/a/re14.php'
        headers = {
                    'Referer': 'http://www.jiqie.com/a/14.htm',
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
                    'Host': 'www.jiqie.com',
                    'Origin': 'http://www.jiqie.com'
                }
        ids_0 = font2ids_dict[self.font_combobox.currentText()]
        ids_1 = color2ids_dict[self.color_combobox.currentText()]
        data = {
                    'id': self.name_edit.text(),
                    'zhenbi': '20191123',
                    'id1': ids_0[0],
                    'id2': ids_0[1],
                    'id3': ids_1[0],
                    'id5': ids_1[1]
                }
        res = requests.post(url, headers=headers, data=data)
        image_url = re.findall(r'src="(.*?)"', res.text)[0]
        self.show_image_ext = image_url.split('.')[-1].split('?')[0]
        res = requests.get(image_url)
        fp = open('tmp.%s' % self.show_image_ext, 'wb')
        fp.write(res.content)
        fp.close()
        self.show_image = Image.open('tmp.%s' % self.show_image_ext).convert('RGB')
        self.updateimage()
        os.remove('tmp.%s' % self.show_image_ext)

    def updateimage(self):
        if self.show_image is None:
            return
        fp = io.BytesIO()
        self.show_image.save(fp, 'JPEG')
        qtimage = QtGui.QImage()
        qtimage.loadFromData(fp.getvalue(), 'JPEG')
        qtimage_pixmap = QtGui.QPixmap.fromImage(qtimage)
        self.show_label.setPixmap(qtimage_pixmap)

    def save(self):
        if self.show_image is None:
            return
        filename = QFileDialog.getSaveFileName(self, '保存', './sign.%s' % self.show_image_ext, '所有文件(*)')
        if filename[0]:
            self.show_image.save(filename[0])
            QDialog().show()

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

以上就是利用Python轻松生成艺术签名的详细内容,更多关于Python艺术签名的资料请关注编程网其它相关文章!

--结束END--

本文标题: 利用Python轻松生成艺术签名

本文链接: https://lsjlt.com/news/162360.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python轻松生成艺术签名
    目录一、写在前面二、先看看效果三、代码展示1.需要用到的模块2.窗口名字/图标/大小/布局3.必要组件的定义4.输入框5.保存/生成按钮6.下拉框7.组件布局8.事件绑定9.生成签名...
    99+
    2024-04-02
  • Python项目实战:在GUI界面中生成艺术签名照
    前言想不想拥有一个自己名字的个性艺术签名照呢,Python爬取签名设计网站信息,在GUI界面上体现出来,帮助你拥有属于自己的风格的个性签名,下面来看看实现的步骤吧导入第三方库...
    99+
    2023-06-02
  • ASP文件神器:利用数组轻松生成二维码!
    二维码已经成为现代生活中不可或缺的一部分。它们可以用于各种场合,例如:支付、广告、活动注册等。在本文中,我们将介绍如何使用ASP文件来轻松生成二维码。 ASP文件是一种动态网页技术,它允许我们在网页上嵌入ASP代码,以便在服务器上执行。我...
    99+
    2023-09-09
    文件 数组 二维码
  • iOS永久签名工具 - 轻松签使用教程
    轻松签是一款IOS端免费的IPA签名和安装工具,最新版可以不用依赖证书对ipa永久签名,虽然现在用上了巨魔(TrollStore)- 是国外iOS开发人员opa334dev发布的一款工具,可以在不越狱的情况下,安装任何一款APP。 但是轻松...
    99+
    2023-09-20
    ios
  • 使用 NPM 包轻松生成二维码
    二维码已经成为了现代生活中不可或缺的一部分。在移动支付、活动票务、商品销售等各种场合中,我们都可以看到二维码的身影。如果你需要在自己的网站或 App 中使用二维码,那么本文将介绍的方法。 NPM(Node Package Manager)...
    99+
    2023-08-27
    二维码 bash npm
  • iOS永久签名不掉签工具,轻松签超详使用教程
    一、前言 几天前写了个「TrollStore」的使用教程,它是一个叫「opa334」的大佬发布在GitHub上的一款永久签名工具。通过它,我们可以不依赖证书就能对IPA进行“永久签名”安装。 而「轻松签」则是一款免费的IPA签名和安装工具,...
    99+
    2023-09-03
    ios safari iphone 经验分享
  • 利用Python 生成hash值
    一、介绍 如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值。 在Python中可以利用二个模块来进行: - crypt - hashlib 二、crypt (一)crypt的主要方法和...
    99+
    2023-01-31
    Python hash
  • 轻松掌控ASP Web.config转换的艺术:实用技巧和步骤
    ASP Web.config文件是ASP.NET应用程序的重要组成部分。它存储了应用程序的配置信息,例如连接字符串、应用程序设置和安全设置。当您将ASP.NET应用程序部署到新环境时,您可能需要转换Web.config文件以使其与新环境兼...
    99+
    2024-02-12
    ASP Web.config 转换 技巧 步骤
  • Python利用yarl实现轻松操作url
    目录1.简介2.在Python中利用yarl高效处理url2.1 利用yarl解析url信息2.2 利用yarl构造url2.3 利用/、%运算符快捷合成url1.简介 大家好我是费...
    99+
    2024-04-02
  • 利用 ASP 框架和 JavaScript 轻松生成二维码,你还不快来试试?
    ASP(Active Server Pages)框架是一种用于创建动态Web应用程序的Microsoft技术。而JavaScript则是一种常用的脚本语言,用于与HTML交互。今天,我们将介绍如何使用ASP框架和JavaScript轻松生成...
    99+
    2023-09-05
    框架 javascript 二维码
  • php利用tcpdf生成签名盖章的pdf文件并支持中文
    下载tcpdf github 代码: ...
    99+
    2023-09-29
    pdf php
  • Android 生成平台应用签名keystore文件
    目录 使用 keytool-importkeypair 工具生成 platform.keystore 配置 build.gradle   使用 keytool-importkeypair 工具生成 platform.keystore ...
    99+
    2023-09-14
    android 签名
  • Python利用PyAutoGUI轻松搞定图片上传
    目录实时获取鼠标的当前坐标开始上传了完整脚本运行过程最近用vuepress建了个博客,音乐的背景图片需要网络地址。 还有博客自动复用的摘要图片也需地址 开始用的阿里云的免费对象存...
    99+
    2024-04-02
  • 为初学者量身定制:用 PHPStorm 来轻松理解 PHP 编程艺术
    PHPStorm 是 JetBrains 公司推出的一款专业 PHP 集成开发环境 (IDE),它拥有丰富的功能和强大的性能,可以帮助初学者轻松掌握 PHP 编程艺术。本文将介绍 PHPStorm 的基本功能,并演示如何使用它来编写 P...
    99+
    2024-02-28
    PHPStorm、PHP、编程、初学者、IDE
  • 利用Python轻松实现视频转GIF动图
    目录前言1. 准备工作2. 初探3. 截取区域转动图4. 固定区域转动图5. 添加自定义文本前言 不知道大家是不是有过类似的经历,在看视频的时候觉得某段非常有意思想弄成动图,但是无从...
    99+
    2024-04-02
  • 怎么使用Python轻松完成垃圾分类
    本篇内容介绍了“怎么使用Python轻松完成垃圾分类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!思路这问题的解决思路或许不止一条。这里只是...
    99+
    2023-06-02
  • 如何利用Python技术生成二维码?快来了解一下!
    在现代社会,二维码已经成为了我们生活中必不可少的一部分。它可以用于各种场合,例如商业广告、支付、活动签到等等。而Python作为一种高效的编程语言,也可以利用其强大的图像处理能力来生成二维码。本文将介绍如何利用Python技术生成二维码。 ...
    99+
    2023-10-13
    日志 开发技术 二维码
  • 轻松掌控 VUE Mixins 精髓:掌握组件复用与代码简洁的艺术
    1. 什么是 Vue Mixins? Vue Mixins 是一个允许在 Vue 组件中重用逻辑和数据的功能。它允许您创建包含可由多个组件使用的功能和数据的对象。这可以帮助您保持代码的整洁和可重用性,并允许您轻松地在组件之间共享功能。 2...
    99+
    2024-02-13
    Vue Mixins 组件复用 代码简洁 代码维护性 代码可重用性
  • 无法使用 JS 验证 Go 生成的 ECDSA 签名
    php小编小新在使用Go语言生成ECDSA签名时遇到了一个问题,即无法使用JS进行验证。这个问题的解决方法是在Go代码中添加一些附加的字段,以确保签名的正确性。通过对Go代码进行一些修...
    99+
    2024-02-10
    go语言 区块链 移动应用程序
  • 利用Python生成Excel炫酷图表
    目录前言1.xlswriter库2.生成折线图3.生成柱状图4.生成饼图5.实战拓展前言 本文对Python 自动化操作Excel并生成图表,做了详细的分析和说明 我们先来看一下py...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作