利用Python画一张全是日落的地图

举报
赵KK日常技术记录 发表于 2023/06/24 01:35:09 2023/06/24
【摘要】 —theme: theme-orange —​​ 环境准备1.个人喜欢的日落/其他图片2.python3.103.PIL库4.轮廓可以换成任意 效果图​​​ 代码from PIL import Imageimport osdef combine_pic(folder): # 读取地图轮廓图 img = Image.open("china.png") w,h = img.si...

—theme: theme-orange —

环境准备

1.个人喜欢的日落/其他图片

2.python3.10

3.PIL库

4.轮廓可以换成任意

效果图

请在此添加图片描述

代码

from PIL import Image
import os


def combine_pic(folder):
    # 读取地图轮廓图
    img = Image.open("china.png")

    w,h = img.size
    #新建与主图一样大的白色底图
    new_img = Image.new('RGB',(w,h),'#FFFFFF')

    unit_size = 60

    #根据小格尺寸,计算大图可容纳小图数量
    y_index = h//unit_size
    x_index = w//unit_size

    pic_list = []
    for item in os.listdir(folder):
        #对文件夹中的 jpg 图片格式筛选
        if item.endswith(".jpg") or item.endswith(".jpeg") :
            pic_list.append(item)

    #获取素材图片数目
    total = len(pic_list)
    x=0
    y=0

    for i in range(x_index*y_index):
        #提醒进度的语句
        print(f"日落生成{i}/{x_index*y_index}")
        try:
            # 对素材图缩放至小格大小
            test = Image.open(f"{folder}/" + pic_list[i%total]).resize((unit_size,unit_size), Image.ANTIALIAS)
        except IOError:
            print("有1位朋友的头像读取失败,跳过该头像")  # 有些人没设置头像,就会有异常
            continue

        #将缩放成小格的素材图按顺序贴到白色底图上
        new_img.paste(test,(x*unit_size,y*unit_size))
        x+=1
        if x==x_index:
            x=0
            y+=1

    print("日落生成完毕!")
    #将合成的素材图存至 out.jpg
    new_img.save("out.jpg",quality=100)

#如果不想每次都生成图,可以运行一次后注释掉这句,参数为文件夹名字
combine_pic("qianxi")

#读取合成后的素材图
src1 = Image.open("out.jpg")

#读取地图轮廓图
src2 = Image.open("china.png")

src1.paste(src2,(0,0),src2)

src1.save("result.png")
# print("地图轮廓添加完毕!")







本代码为github公开仓库拉取,原代码作者暂未找到,后续各位发现请及时与我联系

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。