返回顶部
首页 > 资讯 > 后端开发 > Python >用python生成一张壁纸实例代码
  • 265
分享到

用python生成一张壁纸实例代码

2024-04-02 19:04:59 265人浏览 安东尼

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

摘要

目录前言代码效果总结前言 之前在csdn上看见用python写春联的,这次突发奇想用Python制作一张壁纸,其元素包括背景、文字、图片。 知识点 用PIL创建一张纯色背景Image

前言

之前在csdn上看见用python写春联的,这次突发奇想用Python制作一张壁纸,其元素包括背景、文字、图片。

知识点 用PIL创建一张纯色背景Image.new;图片上添加文字ImageDraw,cv2只能显示英文;转换图片的透明度;图片上叠加图片;jpg与png的区别。

代码

import os
from PIL import ImageFont, ImageDraw, Image
import cv2
import random

def white2transparent(img):
    """
    将白色部分设置为透明
    :param img: 需要修改的图片
    :return: 修改后的图片
    """
    # Image读取形式----------------------------------------------
    # img = img.convert('RGBA')
    # img = img.convert("RGBA")  # 转换格式,确保像素包含alpha通道
    # 加一个判断,不是四通道就推出
    # width, height = img.size  # 长度和宽度
    # for i in range(0, width):  # 遍历所有长度的点
    #     for j in range(0, height):  # 遍历所有宽度的点
    #         data = img.getpixel((i, j))  # 获取一个像素
    #         if (data.count(0) == 4):  # RGBA都是255,改成透明色
    #             img.putpixel((i, j), (255, 255, 255, 255))
    # return img
    # CV2读取形式----------------------------------------------
    width, height = img.shape[:2]  # 长度和宽度
    for i in range(0, width):  # 遍历所有长度的点
        for j in range(0, height):  # 遍历所有宽度的点
            if (img[i, j, 0], img[i, j, 1], img[i, j, 2]) == (255, 255, 255):
                img[i, j, 3] = 0
    return img


def merge_img(bg_img, target_img, x1, y1):
    """
    将图片与背景图片融合
    :param bg_img: 背景图片,要求4通道
    :param target_img: 目标图片,要求四通道
    :param x1: target_img在bg_img的坐标,如果需要调节图片大小,请在函数外resize
    :param y1:
    :return:
    """

    # 判断jpg图像是否已经为4通道
    if bg_img.shape[2] == 3 or target_img.shape[2] == 3:
        print("merge image error, image must 4 channels.")
        return

    '''
    当叠加图像时,可能因为叠加位置设置不当,导致png图像的边界超过背景jpg图像,而程序报错
    这里设定一系列叠加位置的限制,可以满足png图像超出jpg图像范围时,依然可以正常叠加
    '''
    x2 = x1 + target_img.shape[1]
    y2 = y1 + target_img.shape[0]

    xx1 = 0
    yy1 = 0
    xx2 = target_img.shape[1]
    yy2 = target_img.shape[0]

    if x1 >= bg_img.shape[1]:
        x1 -= bg_img.shape[1]
    if y1 >= bg_img.shape[0]:
        y1 -= bg_img.shape[0]

    if x2 >= bg_img.shape[1]:
        xx2 = target_img.shape[1] - (x2 - bg_img.shape[1])
        x2 = bg_img.shape[1]
    if y2 >= bg_img.shape[0]:
        yy2 = target_img.shape[0] - (y2 - bg_img.shape[0])
        y2 = bg_img.shape[0]

    # 获取要覆盖图像的alpha值,将像素值除以255,使值保持在0-1之间
    alpha_target = target_img[yy1:yy2, xx1:xx2, 3] / 255.0
    alpha_bg = 1 - alpha_target

    # 开始叠加
    for c in range(0, 3):
        bg_img[y1:y2, x1:x2, c] = ((alpha_bg * bg_img[y1:y2, x1:x2, c]) + (alpha_target * target_img[yy1:yy2, xx1:xx2, c]))

    return bg_img


def set_wallpaper(phone_model, content_list, out_file=None):
    """
        phone_model     - 手机型号
        content_list    - 内容
        out_file        - 输出文件

    """
    resolution = (0, 0)  # 分辨率
    if phone_model == 'iphone se2':
        resolution = (750, 1334)

    # 设置背景
    if resolution != (0, 0):
        bg_img = Image.new('RGBA', resolution, '#fbedb2')
        # bg_im = cv2.cvtColor(np.asarray(bg_im), cv2.COLOR_RGB2BGR)
    else:
        print("don't have this version" )
        return

    # 添加语句
    # font = cv2.FONT_HERSHEY_DUPLEX  # cv2设置字体
    draw_text = ImageDraw.Draw(bg_img)
    # font = ImageFont.truetype('C:\windows\Fonts\simhei.ttf', 30) # 设置字体,系统内置,也可下载,如自由字体
    font = ImageFont.truetype(r'C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\千图小兔体.ttf', 30)
    i = 0
    for content in content_list:
        # cv2.putText(bg_im, content, (100, 100), font, 5, (254, 67, 101))  # cv2.putText() 只能显示英文字符,中文会出现乱码问题,
        offset = 120 * i
        draw_text.text((100, 120 + offset), content, font=font, fill=(0, 0, 0))
        i += 1
    # 将包含字体的读取为cv2形式,以便添加图片
    bg_img.save('./background.png')
    bg_img = cv2.imread('./background.png', cv2.IMREAD_UNCHANGED)
    os.remove('./background.png')

    # 添加图标
    icon_img = cv2.imread('Gold.png', cv2.IMREAD_UNCHANGED)
    white2transparent(icon_img)
    for j in range(1, len(content_list)+1):
        offset = 120 * j
        bg_img = merge_img(bg_img, icon_img, 66, offset)

    # 添加装饰
    decorate_milktea_img = cv2.imread('milktea.png', cv2.IMREAD_UNCHANGED)
    decorate_fruit_img = cv2.imread('fruit.png', cv2.IMREAD_UNCHANGED)
    decorate_img_list = [decorate_milktea_img, decorate_fruit_img]
    for decorate_img in decorate_img_list:
        white2transparent(decorate_img)
        random_pos_x = random.randint(0,resolution[0]-300)
        random_pos_y = random.randint(740, resolution[1]-200)  # 范围内的随机数
        bg_img = merge_img(bg_img, decorate_img, random_pos_x, random_pos_y)

    # 保存图片
    if out_file:
        cv2.imwrite('./wallpaper.png', bg_img)

    cv2.imshow('bgim', bg_img)
    cv2.waiTKEy(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    content_list = [
        '天天开心',
        '心想事成'
    ]
    set_wallpaper('iphone se2', content_list, './wallpaper.png')
    

效果

在这里插入图片描述

总结

到此这篇关于用python生成一张壁纸实例代码的文章就介绍到这了,更多相关python生成壁纸内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 用python生成一张壁纸实例代码

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

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

猜你喜欢
  • 用python生成一张壁纸实例代码
    目录前言代码效果总结前言 之前在csdn上看见用python写春联的,这次突发奇想用python制作一张壁纸,其元素包括背景、文字、图片。 知识点 用PIL创建一张纯色背景Image...
    99+
    2024-04-02
  • 怎么用python代码生成一张壁纸
    这篇文章主要介绍了怎么用python代码生成一张壁纸的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用python代码生成一张壁纸文章都会有所收获,下面我们一起来看看吧。代码import osfro...
    99+
    2023-06-29
  • 用python爬取电脑壁纸实例代码
    目录前言一、用到的工具二、爬取步骤与过程1.用到的库2.解析代码3.最后上全部的代码啦总结前言        &...
    99+
    2024-04-02
  • python生成excel的实例代码
    本文实例为大家分享了python生成excel的具体代码,供大家参考,具体内容如下 #_*_coding:utf-8_*_ import MySQLdb import xlwt from dateti...
    99+
    2022-06-04
    实例 代码 python
  • 怎么用Python代码爬取王者全套皮肤壁纸
    本篇文章给大家分享的是有关怎么用Python代码爬取王者全套皮肤壁纸,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。相信大家都玩过王者荣耀吧,资深玩家绝对买过皮肤,不得不夸王者荣...
    99+
    2023-06-02
  • Python numpy生成矩阵基础用法实例代码
    目录1、numpy.array() 可以把列表转换为矩阵2、numpy.arange() 生成一个向量3、numpy.ones() 生成一个全是1的矩阵, 里面填入矩阵范围4、num...
    99+
    2024-04-02
  • python实现自动生成C++代码的代码生成器
    遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错;而借用python的代码自动生成,可以轻松搞定...
    99+
    2024-04-02
  • js使用Canvas将多张图片合并成一张的实现代码
    解决方案 function mergeImgs(list) { const imgDom = document.createElement('img') document.b...
    99+
    2024-04-02
  • Python实现动态二维码生成的示例代码
    目录1.MyQR普通的二维码制作带背景图片的二维码制作带动图背景的二维码制作2.qrcode简单的二维码制作带背景图片的二维码制作大家好,我是辰哥~ 今天给大家分享两个制作二维码的P...
    99+
    2024-04-02
  • Python一行代码实现生成和读取二维码
    目录生成二维码读取二维码补充总结二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。 二维码被称为快速响应码,可能看起来很简单,但它...
    99+
    2024-04-02
  • python怎么实现自动生成C++代码的代码生成器
    这篇文章主要讲解了“python怎么实现自动生成C++代码的代码生成器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现自动生成C++代码的代码生成器”吧!遇到的问题工作中遇...
    99+
    2023-07-02
  • python利用pandas分析学生期末成绩实例代码
    安装Pandas Pandas是构建在Python编程语言之上的一个快速、强大、灵活且易于使用的开源数据分析和操作工具。Pandas是基于Numpy的专业数据分析工具,可以灵活高效的...
    99+
    2024-04-02
  • Python处理PDF及生成多层PDF实例代码
    Python提供了众多的PDF支持库,本文是在Python3环境下,试用了两个库来完成PDF的生成的功能。PyPDF对于读取PDF支持较好,但是没找到生成多层PDF的方法。Reportlab看起来更成熟,能...
    99+
    2022-06-04
    多层 实例 代码
  • java随机验证码生成实现实例代码
    java随机验证码生成实现实例代码摘要: 在项目中有很多情况下都需要使用到随机验证码,这里提供一个java的随机验证码生成方案,可以指定难度,生成的验证码可以很方便的和其他组件搭配之前要使用一个生成随机验证码的功能,在网上找了一下,有很多的...
    99+
    2023-05-31
    java 随机 验证码
  • python 生成xml文件,以及美化的实例代码
    看代码吧~ # -*- coding:utf-8 -*- import os import json import numpy as np #from xml.etree i...
    99+
    2024-04-02
  • Python实现随机生成算术题的示例代码
    目录前言1、环境准备2、主程序3、效果展示前言 前几天去我姐家里蹭饭吃,发现我姐家里的小外甥女儿已经上小学了,正在疯狂赶作业,加减乘除还有很多题目都经常出错。 我姐说老师每天给他们布...
    99+
    2023-05-14
    Python实现随机生成算术题 Python随机生成算术题 Python生成算术题
  • PHP实现生成二维码的示例代码
    目录前言1、目前有2种类型的二维码2、用户扫描带场景值二维码时,可能推送以下两种事件3、创建二维码ticket4、临时二维码请求说明5、永久二维码请求说明6、临时二维码和永久二维码生...
    99+
    2024-04-02
  • python实例--随机密码生成器
          最近在学习python,抽空看了看图形化模块wx,顺手写了个随机密码生成器,程序运行界面如下图:(注:在Ubuntu下运行结果)   源代码如下:   import wx import string import random...
    99+
    2023-01-31
    生成器 实例 密码
  • 用Python实现批量生成法务函代码
    目录情境问题代码实现:总结情境问题 小王是一名法务专员,工作中会处理所在公司的侵权事件并向侵权方发送法务函。 他会按照【法务函模板.docx】 Word 文件给【封号名单.xlsx】...
    99+
    2024-04-02
  • MyBatisPlus代码生成器的使用示例
    目录导入依赖表结构当前项目结构配置代码生成器1、globalConfig 全局策略配置2、dataSourceConfig 数据源配置AutoGenerator 是 MyBatis-...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作