火遍网络的python中秋节贺卡现在学还赶得上

导语

转眼,八月十五中秋节即将到来,中秋节以月之圆兆人之团圆,

为寄托思念故乡,思念亲人之情,也是我国最具团圆意味的一个传统节日。

​佳节来临,我的侄女儿跟我打视频,说起了他们的中秋老师布置的小作业,每个孩子都会制作专属的中秋贺卡送给家人。​​

果不其然,这又成了我的一个灵感,跟小侄女儿打完视频就开始了我的贺卡制作之路。

佳节来临,不如制作一份精美的手工贺卡,在中秋之夜送去真挚的祝福!跟着小编来学学吧~

正文

本文是基于pyqt5做的界面化中秋贺卡生成器。

(1)首先准备好相应的素材、如文字字体、贺卡背景等,大家可以随机制作。

(2)咳咳咳!之前有人说我文章前文太长,让我直接上代码。

class newyearCardGUI(QtWidgets.QWidget):
    def __init__(self):
        super(newyearCardGUI, self).__init__()
        self.setFixedSize(600, 500)
        self.setWindowTitle('中秋贺卡生成器-源码基地:#959755565#')
        self.setWindowIcon(QIcon('icon/icon.png'))
        self.grid = QGridLayout()
        # 一些全局变量
        self.card_image = None
        self.font_size = 35
        # 定义组件
        # --Label
        self.content_label = QLabel('内容路径:')
        self.bg_label = QLabel('背景路径:')
        self.font_label = QLabel('字体路径:')
        self.fontcolor_label = QLabel('字体颜色:')
        self.show_label = QLabel()
        self.show_label.setScaledContents(True)
        self.show_label.setMaximumSize(600, 300)
        # --输入框
        self.content_edit = QLineEdit()
        self.content_edit.setText('contents/1.card')
        self.bg_edit = QLineEdit()
        self.bg_edit.setText('bgimages/1.png')
        self.font_edit = QLineEdit()
        self.font_edit.setText('fonts/font.TTF')
        # --按钮
        self.choose_content_button = QPushButton('选择路径')
        self.choose_bg_button = QPushButton('选择路径')
        self.choose_font_button = QPushButton('选择路径')
        self.generate_button = QPushButton('生成贺卡')
        self.save_button = QPushButton('保存贺卡')
        # --下拉框
        self.font_color_combobox = QComboBox()
        for color in ['red', 'white', 'black', 'blue', 'yellow', 'green']:
            self.font_color_combobox.addItem(color)
        # 布局
        self.grid.addWidget(self.show_label, 0, 0, 5, 5)
        self.grid.addWidget(self.content_label, 5, 0, 1, 1)
        self.grid.addWidget(self.content_edit, 5, 1, 1, 3)
        self.grid.addWidget(self.choose_content_button, 5, 4, 1, 1)
        self.grid.addWidget(self.bg_label, 6, 0, 1, 1)
        self.grid.addWidget(self.bg_edit, 6, 1, 1, 3)
        self.grid.addWidget(self.choose_bg_button, 6, 4, 1, 1)
        self.grid.addWidget(self.font_label, 7, 0, 1, 1)
        self.grid.addWidget(self.font_edit, 7, 1, 1, 3)
        self.grid.addWidget(self.choose_font_button, 7, 4, 1, 1)
        self.grid.addWidget(self.fontcolor_label, 8, 0, 1, 1)
        self.grid.addWidget(self.font_color_combobox, 8, 1, 1, 1)
        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.choose_content_button.clicked.connect(self.openContentFilepath)
        self.choose_bg_button.clicked.connect(self.openBGFilepath)
        self.choose_font_button.clicked.connect(self.openFontFilepath)
        self.generate_button.clicked.connect(self.generate)
        self.save_button.clicked.connect(self.save)
        self.generate()

(2)生成贺卡。

 def generate(self):
        # 检查路径是否存在
        content_path = self.content_edit.text()
        bg_path = self.bg_edit.text()
        font_path = self.font_edit.text()
        font_color = self.font_color_combobox.currentText()
        if (not self.checkFilepath(content_path)) or (not self.checkFilepath(bg_path)) or (not self.checkFilepath(font_path)):
            self.card_image = None
            return False
        # 写贺卡
        contents = open(content_path, encoding='utf-8').read().split('\n')
        font_card = ImageFont.truetype(font_path, self.font_size)
        image = Image.open(bg_path).convert('RGB')
        draw = ImageDraw.Draw(image)
        draw.text((180, 30), contents[0], font=font_card, fill=font_color)
        for idx, content in enumerate(contents[1: -1]):
            draw.text((220, 40+(idx+1)*40), content, font=font_card, fill=font_color)
        draw.text((180, 40+(idx+2)*40+10), contents[-1], font=font_card, fill=font_color)
        # 显示
        fp = io.BytesIO()
        image.save(fp, 'BMP')
        qtimg = QtGui.QImage()
        qtimg.loadFromData(fp.getvalue(), 'BMP')
        qtimg_pixmap = QtGui.QPixmap.fromImage(qtimg)
        self.show_label.setPixmap(qtimg_pixmap)
        self.card_image = image

(3)素材都是准备的多份,背景文字选取路径自己设置。

    def openContentFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取贺卡内容文件", '.')
        self.content_edit.setText(filepath[0])

    def openBGFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取贺卡背景图片", '.')
        self.bg_edit.setText(filepath[0])

    def openFontFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取字体文件", '.')
        self.font_edit.setText(filepath[0])

(4)生成的贺卡保存下来。

 def save(self):
        filename = QFileDialog.getSaveFileName(self, '保存', './card.jpg', '所有文件(*)')
        if filename[0] != '' and self.card_image:
            self.card_image.save(filename[0])
            QDialog().show()

好啦, 一张完整的贺卡显示就出来啦如下:

​​​​​​​​

​​​​​​​​​

附完整代码:

'''
Function:
    生成中秋祝福贺卡
csdn账号:顾木子吖
'''
import os
import io
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtGui
from PIL import Image, ImageDraw, ImageFont

'''生成中秋祝福贺卡'''
class newyearCardGUI(QtWidgets.QWidget):
    def __init__(self):
        super(newyearCardGUI, self).__init__()
        self.setFixedSize(600, 500)
        self.setWindowTitle('中秋贺卡生成器-源码基地:#959755565#')
        self.setWindowIcon(QIcon('icon/icon.png'))
        self.grid = QGridLayout()
        # 一些全局变量
        self.card_image = None
        self.font_size = 35
        # 定义组件
        # --Label
        self.content_label = QLabel('内容路径:')
        self.bg_label = QLabel('背景路径:')
        self.font_label = QLabel('字体路径:')
        self.fontcolor_label = QLabel('字体颜色:')
        self.show_label = QLabel()
        self.show_label.setScaledContents(True)
        self.show_label.setMaximumSize(600, 300)
        # --输入框
        self.content_edit = QLineEdit()
        self.content_edit.setText('contents/1.card')
        self.bg_edit = QLineEdit()
        self.bg_edit.setText('bgimages/1.png')
        self.font_edit = QLineEdit()
        self.font_edit.setText('fonts/font.TTF')
        # --按钮
        self.choose_content_button = QPushButton('选择路径')
        self.choose_bg_button = QPushButton('选择路径')
        self.choose_font_button = QPushButton('选择路径')
        self.generate_button = QPushButton('生成贺卡')
        self.save_button = QPushButton('保存贺卡')
        # --下拉框
        self.font_color_combobox = QComboBox()
        for color in ['red', 'white', 'black', 'blue', 'yellow', 'green']:
            self.font_color_combobox.addItem(color)
        # 布局
        self.grid.addWidget(self.show_label, 0, 0, 5, 5)
        self.grid.addWidget(self.content_label, 5, 0, 1, 1)
        self.grid.addWidget(self.content_edit, 5, 1, 1, 3)
        self.grid.addWidget(self.choose_content_button, 5, 4, 1, 1)
        self.grid.addWidget(self.bg_label, 6, 0, 1, 1)
        self.grid.addWidget(self.bg_edit, 6, 1, 1, 3)
        self.grid.addWidget(self.choose_bg_button, 6, 4, 1, 1)
        self.grid.addWidget(self.font_label, 7, 0, 1, 1)
        self.grid.addWidget(self.font_edit, 7, 1, 1, 3)
        self.grid.addWidget(self.choose_font_button, 7, 4, 1, 1)
        self.grid.addWidget(self.fontcolor_label, 8, 0, 1, 1)
        self.grid.addWidget(self.font_color_combobox, 8, 1, 1, 1)
        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.choose_content_button.clicked.connect(self.openContentFilepath)
        self.choose_bg_button.clicked.connect(self.openBGFilepath)
        self.choose_font_button.clicked.connect(self.openFontFilepath)
        self.generate_button.clicked.connect(self.generate)
        self.save_button.clicked.connect(self.save)
        self.generate()
    '''生成贺卡'''
    def generate(self):
        # 检查路径是否存在
        content_path = self.content_edit.text()
        bg_path = self.bg_edit.text()
        font_path = self.font_edit.text()
        font_color = self.font_color_combobox.currentText()
        if (not self.checkFilepath(content_path)) or (not self.checkFilepath(bg_path)) or (not self.checkFilepath(font_path)):
            self.card_image = None
            return False
        # 写贺卡
        contents = open(content_path, encoding='utf-8').read().split('\n')
        font_card = ImageFont.truetype(font_path, self.font_size)
        image = Image.open(bg_path).convert('RGB')
        draw = ImageDraw.Draw(image)
        draw.text((180, 30), contents[0], font=font_card, fill=font_color)
        for idx, content in enumerate(contents[1: -1]):
            draw.text((220, 40+(idx+1)*40), content, font=font_card, fill=font_color)
        draw.text((180, 40+(idx+2)*40+10), contents[-1], font=font_card, fill=font_color)
        # 显示
        fp = io.BytesIO()
        image.save(fp, 'BMP')
        qtimg = QtGui.QImage()
        qtimg.loadFromData(fp.getvalue(), 'BMP')
        qtimg_pixmap = QtGui.QPixmap.fromImage(qtimg)
        self.show_label.setPixmap(qtimg_pixmap)
        self.card_image = image
    '''打开贺卡内容文件'''
    def openContentFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取贺卡内容文件", '.')
        self.content_edit.setText(filepath[0])
    '''打开贺卡背景图片文件'''
    def openBGFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取贺卡背景图片", '.')
        self.bg_edit.setText(filepath[0])
    '''打开字体路径'''
    def openFontFilepath(self):
        filepath = QFileDialog.getOpenFileName(self, "请选取字体文件", '.')
        self.font_edit.setText(filepath[0])
    '''保存贺卡'''
    def save(self):
        filename = QFileDialog.getSaveFileName(self, '保存', './card.jpg', '所有文件(*)')
        if filename[0] != '' and self.card_image:
            self.card_image.save(filename[0])
            QDialog().show()
    '''检查文件是否存在'''
    def checkFilepath(self, filepath):
        if not filepath:
            return False
        return os.path.isfile(filepath)

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

总结

好啦!中秋贺卡生成器就制作完成啦,制作不易,中秋快落~

到此这篇关于火遍网络的python中秋节贺卡现在学还赶得上的文章就介绍到这了,更多相关python 贺卡内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 中秋将至利用python画一些月饼从天而降不用买了

    目录 ​​导语 正文 ​​总结 ​ ​​导语 好消息!下一个假期已经在路上了,正在向我们招手呢! 大家只要再坚持5天 就能迎来中秋小长假啦~ ​"海上生明月,天涯共此时" 又是一年中秋至!快跟着小编来看看怎么寓教于乐吧-- 今天带大家编写一款应时应景的中秋小游戏! 天上掉月饼啦~天上掉月饼啦~天上掉月饼啦~ 正文 ​准备好相应的素材如下: ​ 环境安装: Python3.6.pycharm2021.游戏模块Pygame. 安装:pip install pygame ​初始化游戏加载素材

  • 中秋送礼分配不均这款python刮刮卡完美解决问题

    导语 每次回家小编的身边都会聚集着一堆小朋友,这就是家住一个村的好处. 一回家就接收到七大姑八大姨的亲切的问候,关系那是特别不错的,小朋友也不怕我. ​ 去年因为给小朋友带了一些礼物但是分配不均匀,导致了灾难现场哭声一片...... 我老妈还以为我咋的她们了? ​ emmmmmm,完了我只想说一句,"打扰了" 今年中秋怕家里的小孩子们因为分配礼物重蹈覆辙,聪明的我制作了一款中秋礼物刮刮乐,刮到什么就拿什么! ​ 正文 中秋送给孩子们的礼物已经选好了,当当当图片如下: ​ 一堆中秋月饼的

  • 使用Python为中秋节绘制一块美味的月饼

    对于在外的游子,每逢佳节倍思亲.而对于996ICU的苦逼程序猿们,最期待的莫过于各种节假日能把自己丢在床上好好休息一下了.这几天各公司都陆续开始发中秋礼品了.朋友圈各种秀高颜值的月饼,所以今天我也提前给大家送去一份中秋的美味月饼吧! python & turtle python的turtle库,最早还是在小甲鱼的[零基础入门学习Python]中接触的,好久没用了有些生疏,带大家一起回顾下模块的使用吧. 如果你是想认真学习这个库,推荐去官网仔细学习 https://docs.python.org/

  • 中秋快到了利用 python 绘制中秋礼物

    目录 导语 正文 总结 导语 ​ 哈喽哈喽!大家上午好,我是木木子. 新的一天开始啦,之前写了很多的画图代码嗯哼!你们还记得嘛?我就不整理了蛮多滴,你们可以自己翻翻往期的文章哈,有简单的 也有难点儿的总有一款适合你们~嘿嘿. 话说--中秋也快到了,你们放几天假吖? 假期长的小伙伴儿知道回家带什么礼物更让家人开心嘛?假装不知道.jpg. 小编告诉你们:当然是带着你们的男朋友.女朋友回家了~,来来来,有了对象没得对象的都看过来哈,时间仓促,给你们的中秋福利送了哈,写一个简单的中秋表白的画图源码啦!

  • 火遍网络的python中秋节贺卡现在学还赶得上

    导语 ​ 转眼,八月十五中秋节即将到来,中秋节以月之圆兆人之团圆, 为寄托思念故乡,思念亲人之情,也是我国最具团圆意味的一个传统节日. ​ ​佳节来临,我的侄女儿跟我打视频,说起了他们的中秋老师布置的小作业,每个孩子都会制作专属的中秋贺卡送给家人.​​ ​ 果不其然,这又成了我的一个灵感,跟小侄女儿打完视频就开始了我的贺卡制作之路. 佳节来临,不如制作一份精美的手工贺卡,在中秋之夜送去真挚的祝福!跟着小编来学学吧~ 正文 本文是基于pyqt5做的界面化中秋贺卡生成器. (1)首先准备好相应的素材

  • 火遍全网的Python二次元特效轻松掌握

    导语 昨天下班,回家吃完饭就直接躺了,无聊的时候大家都会干什么呢? 当然是刷刷刷--抖音啦,嗯哼,然后返现了抖音上一款特效--「变身漫画」,简直好看到不行. 从明星到路人,堪称全民参与,刷了很多类似的视频发现效果竟然这么好看,来看下效果吧~ 登场的是张艺兴和戚薇. 可以看到,这个特效基于人物的面容,很好的转换成了二次元漫画风格. 尤其是眼睛的处理,把张艺兴慵懒的眼神.戚薇水汪汪的大眼睛,诠释的淋漓尽致. 当然发型也都是「满分转换」,分叉.造型等细节可以说是丝毫不差了. 突破「次元壁」的关键技术:

  • 21 岁理工男开源的这个编辑器火遍全球附面试资源

    来自:机器之心 最近在 GitHub 上最火的项目是一个对视力友好的十六进制编辑器,它上线仅 5 天就收获了 2500 star,最近 24 小时涨了 1600 star 量. 十六进制编辑器是用于编辑单个字节数据的软件应用程序,主要由程序员或系统管理员使用. 常规文本编辑器和十六进制编辑器之间的区别在于常规编辑器表示文件的逻辑内容,而十六进制编辑器表示文件的物理内容.十六进制编辑器可以让你以十六进制的形式查看或编辑文件的二进制数据,并用较为友好的界面来编辑二进制数据.对于需要处理二进制数据的用

  • Python 实现两个服务器之间文件的上传方法

    如下所示: # coding: utf-8 import paramiko import MySQLdb def main(): connection=MySQLdb.connect(host='10.10.41.22',user='root',passwd='root',db='Trojan',port=3306) cur=connection.cursor() sql ='select count(*) from blacklist;' cur.execute(sql) count = cu

  • python和java哪个学起来更简单

    在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择哪一个比较好.今天千锋小编就告诉大Python比Java简单在哪?Python语言有哪些优势? Python比Java简单在哪 Java是一种严格的类型语言,这意味着必须显式声明变量名.相比之下,动态类型的Python则不需要声明变量.在编程语言上有许多关于动态和静态类型的争论,但有一点应该注意:P

  • 利用python+request通过接口实现人员通行记录上传功能

    前言: 脚本中包含以下几点常用功能: (1)实时获取当前时间 (2)while循环提交 (3)上传图片文件 一.上述功能解释: (1)实时获取当前时间,下面展示三种格式化后的日期代码示例 #!/usr/bin/python # -*- coding: UTF-8 -*- import time # 格式化成2016-03-20 11:45:39形式 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 格式化成Sat

  • python提取word文件中的图片并上传阿里云OSS

    该需求是一个真实的实战需求,如果你的公司在做题库类的系统,一定会涉及该方面的内容,所以收藏起来吧. 需求简单描述如下所示: 1.提取 Word(为了便于解决,统一格式为 docx)中的题干/选项图片: 2.将其传递到云 OSS 上,并返回图片地址: 3.部分场景,需要将其拼接为 HTML 的 img 标签进行返回. 实操环节 首先你需要准备好云OSS的 AccessKeyId 和 AccessKeySecret ,这两个值一般由运维工程师提供给你,如果你的公司比较小,没有运维岗位,那就需要自己去

  • Python网络编程 Python套接字编程

    Python 提供了两个级别访问的网络服务. 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyth

  • 火遍全网的Hutool使用Builder模式创建线程池的方法

    前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式之一.优秀的设计模式总是会受到广大开发者的青睐,Hutool 也是其中之一 因为上周编写的业务需要用到线程池,就去 Hutool thread 包下看了看,还真有惊喜,学习到了一种之前编码中没用过的 Builder 模式实现 这里必须提一句:设计模式重要的是思想,一种设计模式可能不止一种实现方式 Builder 模式

  • 跟老齐学Python之字典,你还记得吗?

    字典,这个东西你现在还用吗?随着网络的发展,用的人越来越少了.不少人习惯于在网上搜索,不仅有web版,乃至于已经有手机版的各种字典了.我曾经用过一本小小的<新华字典>. <新华字典>是中国第一部现代汉语字典.最早的名字叫<伍记小字典>,但未能编纂完成.自1953年,开始重编,其凡例完全采用<伍记小字典>.从1953年开始出版,经过反复修订,但是以1957年商务印书馆出版的<新华字典>作为第一版.原由新华辞书社编写,1956年并入中科院语言研究所(

随机推荐