python做动态壁纸,python代码手机壁纸
大家好,本文主要讲用python生成一个壁纸示例代码。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010前言代码效果汇总
目录
之前在csdn上看到用python写的春联,这次突发奇想用python做了一张壁纸,其元素包括背景、文字、图片。
创建纯色背景图像。用知识with图片加ImageDraw这个词,cv2只能显示英文;转换后图片的透明度;在图片上叠加图片;jpg和png的区别。
前言
导入操作系统
从PIL导入图像字体、图像绘制、图像
导入cv2
随机导入
def white 2透明(img):
使白色部分透明。
:param img:需要修改的图片
:return:修改图片
#图像阅读表格-
# img=img.convert(RGBA )
# img=img.convert(RGBA) #转换格式以确保像素包含alpha通道。
#补充一个判断,不是四通道发射
# width,height=img.size #长和宽
#对于范围(0,宽度):内的I #所有长度的导线点
# 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))
#返回图像
# CV2阅读形式-。
宽度,高度=img.shape [:2] #长度和宽度
对于I,在范围(0,宽度): #内遍历所有长度点
对于范围内(0,高度): #遍历所有宽度点
if (img[i,j,0],img[i,j,1],img[i,j,2])==(255,255,255):
img[i,j,3]=0
返回img
定义merge_img(bg_img,target_img,x1,y1):
将图片与背景图片融合。
:param bg_img:背景图片,需要4个通道
:param target_img:目标画面,需要四个通道
3360 param x 1: BG _ img中的target _ img坐标。如果您需要调整图像大小,请在函数之外调整它的大小。
:参数y1:
:返回:
#确定jpg图像是否已经是4通道。
如果bg_img.shape[2]==3或者target_img.shape[2]==3:
打印(合并图像错误,图像必须是4个通道。)
返回
叠加图像时,由于叠加位置设置不当,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]
如果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("dont 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(rC:\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生成壁纸内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。