前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >国庆了,用照片拼个中国地图吧?

国庆了,用照片拼个中国地图吧?

作者头像
TTTEED
发布2020-07-09 14:47:04
2.2K0
发布2020-07-09 14:47:04
举报
文章被收录于专栏:用户6811391的专栏

几天前的给头像加国旗,当时我们 Python 代码来实现时,采用的思路是以头像做背景,向上贴中间透明的带有国旗的头像框图。

临近国庆了,我们把素材换一下,搞一个新玩法:准备些照片拼接成背景图用中间透明的中国地图加以覆盖,即可生成一个酷炫的照片地图。(图片展示原因,未能显示岛屿等细节)

话不多说,以千玺照片来展示,效果如下:

效果可还行?把它用到合适的场景没准会有意外收获哦:比如将素材图片换成你的另一半的照片,再或者将地图轮廓素材换成其它喜欢的轮廓

获取轮廓素材

原理简单,实现起来也不复杂,最紧要的是获取中间透明的地图轮廓图片。先在网上下载一个中国轮廓地图:

先在本地将其另存为 png 格式图片,再用修图软件打开。

接下来用魔棒工具(或快速选取工具)选中颜色区域进行删除操作,经过一番裁剪修正,将结果存为 png 格式图片。

(图片展示原因,未展示岛屿等细节)

素材图片拼接

我们完全可以用修图软件来将素材图片拼接成与地图轮廓.png 等大的背景图:

当然繁琐的过程采用 Python 来实现的话就是几行代码的工作量。大致要实现的就是根据地图轮廓图的尺寸,计算素材小图数量,利用 PIL 图片处理模块将小图拼接成与地图轮廓图同等大小的背景图,涉及代码如下:

代码语言:javascript
复制
    # 读取地图轮廓图
    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}")
        #对素材图缩放至小格大小
        test = Image.open(f"{folder}/" + pic_list[i%total]).resize((unit_size,unit_size), Image.ANTIALIAS)
        #将缩放成小格的素材图按顺序贴到白色底图上
        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)

地图轮廓贴图

有了背景图以及要覆盖在上面的地图轮廓图,只要将轮廓图贴在背景图上即可收工。

代码语言:javascript
复制
#读取合成后的素材图
src1 = Image.open("out.jpg")

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

# 地图轮廓贴d到合成的背景图是那个
src1.paste(src2,(0,0),src2)

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

代码如上,仍然要注意这里贴图用的 paste 函数第三个参数是用来保证贴图时 png 格式图片的透明性。

回顾整个实现流程,思路简单,代码也不复杂,即使不想用代码直接用修图软件也可以快速操作实现。

但是还有一点想分享一下:

1. 刚接触 PIL 图片处理模块时,就有过用图片拼接某种轮廓大图的想法。当时考虑的方向基本是计算轮廓内所有位置的坐标,去相应位置贴图拼接,感觉运算太过复杂就放弃了。此次用轮廓来向背景图贴图的设计,倒是一种全新的思路去将拼接轮廓的想法变相实现了,体验还不错。

2. 类似的想法也有不少,好多问题都是当时觉得超出能力范围或者感觉基本没法实现。等到后续有了其它相应知识储备或者新的思路时,问题反而会不攻自破了,这也是非常好的体验。

以上,感谢阅读~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TTTEED 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档