程序员的浪漫系列(4)--心形墙与自定义文字墙

57 篇文章 5 订阅
11 篇文章 1 订阅

系列文章目录

前言

一、心形照片墙

效果图片:
在这里插入图片描述

1.源码

代码如下(示例):

from PIL import Image
import os
import math
map = [
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1],
    [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
    [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
    [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
    [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
    [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
]
# 这个是我图片的所在路径
img_dir = r"E:\py\python3.7\test\test57zidingyitupianqiang\photo\lolimage"
# 获取这个文件下的所有文件,因为没有过滤其他类型文件,所以不要放非图片文件
# 返回的是一个列表
imgs = os.listdir(img_dir)
# 设置图片的尺寸,所有图片尺寸要保持统一,要有组织有纪律
img_h = img_w = 192
# 计算行数,即子列表的个数
rows = len(map)
# 计算列数,即子列表中元素的个数
columns = len(map[0])
# 第一个参数照着写
# 第二个参数需要传入一个元组,元组的第一个参数是画布的宽,第二个是高
# 第三个参数传入的是画布的颜色
# 使用Image.new()方法创建一个画布
figure = Image.new("RGB", (img_w*columns, img_h*rows),"white")
# 表示图片的下标
count = 0
# 遍历行
for i in range(len(map)):
    # 遍历每行中的所有元素
    for j in range(len(map[i])):
        # 如果元素是1,就不管它
        if map[i][j] == 1:
            continue
        # 如果元素是非1,即0就放图片上去
        else:
            # 做个异常处理,防止有些图片打开失败,导致程序中断
            try:
                # 使用Image.open("图片路径")方法获取图片对象
                image = Image.open(os.path.join(img_dir, imgs[count]))
            except:
                continue
            # resize((新的宽,新的高))用来改变图片的尺寸,接收一个元组
            image = image.resize((img_w, img_h))
            # 将修改尺寸后的图片(image)粘贴(paste)到画布(figure)上
            # 第一个参数 是图片对象
            # 第二个参数是 图片在画布上的位置,相当于单元格的位置
            figure.paste(image, (img_w*j, img_h*i))
            # 使用完一张图片就要记录下来,并开始使用下一张图片
            count += 1
 
# 当循环结束,即表示心型照片图已经完成
# 将画好的画布显示出来,给你看到
figure.show()
# 不满意在调整二维数组中0的位置,满意可以保存到本地,用来装逼
# 需要告知程序图片保存的路径
figure.save('心型照片墙.png')

二、自定义文字map

在这里插入图片描述
在这里插入图片描述

1.源码

代码如下(示例):

import pygame  # 游戏模块,字体功能,  第三方模块   pip install pygame
from PIL import Image   # 图像处理模块, pip install pillow
import os  # 目录操作, 内置
import random  # 随机数模块, 随机取一张图片



text = '前程似锦!'
font_size = 30  # 字体大小

pygame.init()  # 模块的初始化  为什么  pygame不是我开发的, 我们用的别人  python语法  三原色
#font = pygame.font.Font('msyh.ttc', font_size)
font = pygame.font.Font('C:/Windows/fonts/华文行楷.ttc', font_size)
print(font)

# 字体的渲染
# True 锯齿化   rgb 颜色 由三原色组成  黑  白
font_text = font.render(text, True, (0, 0, 0), (255, 255, 255))
print(font_text)

# 获取字体的宽高
height = font_text.get_height()  # 高度
width = font_text.get_width()  # 宽度
print('height: ', height)
print('width: ', width)

# 根据什么逻辑贴图  像素点
print(font_text.get_at((1, 1))[0])


# 根据像素点做分类: 划分为一个二维列表
image_row_list = []
for x in range(height):
    image_col_list = []  #
    for y in range(width):
        if font_text.get_at((y, x))[0] != 255:  # 如果像素点不是白色
            image_col_list.append(1)  # 黑色添加数据1
        else:
            image_col_list.append(0)  # 白色添加数据0
    image_row_list.append(image_col_list)

for row in image_row_list:
    print(row)


# 贴图  照片墙
width_len = len(image_row_list[0])  # 列表的宽
height_len = len(image_row_list)  # # 列表的高

# 创建图片
new_image = Image.new('RGB', (width_len * 100, height_len * 100), (255, 255, 255))


# 贴图
img_size = 100  # 初始图片尺寸

for row in range(height_len):
    for clo in range(width_len):
        if image_row_list[row][clo] == 1:  # 如过列表的值为1, 就贴图
            # 读取图片
            source_image = Image.open('lolimage\\' + random.choice(os.listdir(r'lolimage')))
            # 修改图片的大小
            source_image = source_image.resize((img_size, img_size), Image.ANTIALIAS)
            # 将图片复制到new_image
            new_image.paste(source_image, (clo * img_size, row * img_size))


# 照片强保存
print('正在生成照片墙...')
new_image.save(text + '.png')
print('保存完毕, 请在当前文件项目下查找')

总结

分享:
Make yourself a better person and know who you are before you try and know someone else and expect them to know you. 在你想了解别人也想让别人了解你之前,先完善并了解自己。–(莎士比亚)

### 回答1: 炫酷的表白烟花是一款使用HTML、CSS和JS实现的表白烟花特效的网站。这款特效专为程序员设计,为了在情人节这个特殊的日子里表达对心上人的爱意。 整个网站背景采用了黑色,让我们有一种置身于宇宙中的感觉。当打开网站时,烟花特效开始出现,这些炫目多彩的烟花通过JS代码的控制,在屏幕上绽放出美丽的火花。 通过对鼠标的操作,我们可以模拟烟花从点火到绽放的过程。点击鼠标左键可以选择一个点火的位置,当松开鼠标时,烟花就会从点火位置开始升空,并在空中迸发出各种美丽的形状和颜色。不同的点击位置和释放时间会产生不同的烟花效果,使得每一颗烟花都独一无二。 此外,网站还可以通过自定义文字来表达爱意。使用CSS样式和动画效果,我们可以在烟花绽放的同时将心形文字显示出来,这一切都增加了表白的浪漫感。 这款表白烟花特效利用了前端技术的强大功能,让程序员们能够在情人节这个特别的日子里展现自己的技术才华,同时向心上人表达深深的情感。它将技术与爱情相结合,为程序员专属打造了一个浪漫而独特的表白方式。无论是在浪漫的约会中展示,还是通过网络远程传递,炫酷的表白烟花特效都能让表白更加难忘和感人。 ### 回答2: 炫酷的表白烟花是通过HTML、CSS和JS实现的一种特效,在程序员专属情人节表白网站上使用。这个特效通过模拟烟花爆炸的动画效果,表达出浪漫的情感。 实现这个特效的过程如下:首先,使用HTML布局页面,添加一个用于显示特效的容器元素。接着,在CSS中设定容器元素的位置、宽度和高度,并将该元素的背景设置为透明。 然后,在JS中定义一个函数,用于创建烟花的爆炸效果。该函数将根据传入的参数(如烟花的位置、颜色和数量等)生成相应数量的烟花。每个烟花都会以不同的速度和方向运动,并在到达一定高度后爆炸。 烟花的爆炸效果是通过使用canvas来实现的。在JS代码中,我们会创建一个canvas元素,并设置其宽度和高度等属性。之后,通过调用canvas的API来绘制烟花的爆炸效果,包括绘制不同颜色的圆形和线条等。 最后,在特效的主函数中,我们会监听用户的鼠标点击事件,并在点击发生时调用创建烟花的函数,将烟花显示在鼠标点击的位置上。这样,每次用户点击页面时,都会出现一个烟花的爆炸效果,形成炫酷的表白烟花特效。 这种基于HTML、CSS和JS的表白烟花特效,不仅能够给予程序员一个浪漫的情人节表白方式,还能够通过动画效果展示出程序员们独特的创造力和技术实力。让人们在浏览这个特效的同时,也能够感受到程序员的爱意和热情。 ### 回答3: 炫酷的表白烟花是一种特效效果,可以通过HTML、CSS和JavaScript来实现。它通常在程序员专属情人节表白网站上使用,为表白活动增添浪漫和创意。 实现这个特效的关键是利用JS来控制烟花的出现和动画效果。首先,可以使用HTML创建一个透明的画布(canvas),来模拟烟花在天空中的绽放效果。然后,使用CSS设置画布的样式,如宽度、高度和背景颜色等。 接下来,使用JavaScript来控制烟花的出现和动画效果。可以通过编写代码来生成多个烟花的初始位置、颜色、弧度和速度等属性。利用定时器(setTimeout或setInterval)循环执行代码,实现烟花的移动、扩散和渐隐效果。 要使表白烟花更加炫酷,可以结合音效和文字消息。可以在特定的事件触发时,播放浪漫的音乐或表白的录音。文字消息可以在烟花绽放的同时出现在画布上,以增强表白的效果。 这种表白烟花特效可以在程序员专属情人节表白网站上发挥更好的效果。通过这种方式,可以向程序员的另一半传达爱意和祝福,让表白更具有创意和令人难忘。无论是送给自己的伴侣还是其他程序员,这个特效都可以成为一个独特而浪漫的表达方式,给予彼此美好的回忆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若竹之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值