太酷了!90行Python代码,让微信地球转起来!

Python打造一个在线G代码生成器 用tornado框架做后端……,用bootstrap做前端 先上效果图: 生成出来的G代码: g.py源码: #coding=utf-8 # -*- coding: UTF-8 -*- #!/usr/bin/eny python #coding:utf-8 #!/usr/bin/env python # -*- coding:utf-8 -*- import ... 阅读详情

1.微信地球

手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个张小龙。

你可曾想过这样一个问题,如果上面那个地球转起来会是怎样?

2.效果图

效果简直不要太酷炫,我只能直呼太牛逼!那么这样一个酷炫的操作是怎么做出来的呢?我们接着往下看。

3.素材准备

这里共需要准备三个素材:1.地球表面素材;2.云图素材;3.微信地球的抠图素材。

1)地球表面素材

2)云图素材
3)微信地球的抠图素材

4.基本原理

基本的贴图方法在本博前面的文章《用python实现旋转地球》中讲过了,具体可以参考下面的链接,这里重点讲双层素材的动态效果。云图是灰度图,白色地方代表云层厚,黑色的地方代表那里云层薄,我们根据颜色设置不同的透明度。

https://blog.youkuaiyun.com/xiaorang/article/details/106692489

如果云图与地面的选择速度相同,会显得不自然,我们这里让云层旋转速度比地面旋转速度慢一半,产生相对运动的效果。

这样带来的问题是,地球旋转360°后云图只旋转了180°,必须加倍到720°才能实现连续运动。

具体的云层透明度设置,参数需根据实际效果进行调整。

5.GIF压缩

顺便给大家介绍一个比较好用的压缩GIF的在线工具,链接如下。

https://www.iloveimg.com/zh-cn/compress-image/compress-gif

直接生成的GIF动图有超过传输限制,无法上传,用此工具压缩后文件体积大幅缩小,但图片效果没有肉眼可以察觉的影响。

6.完整代码

分步骤的具体逻辑讲解,请看《用python实现旋转地球》这个文章,链接我们在上面已经展示,这里贴一下完整代码。

from PIL import Image, ImageDraw
import math
import numpy as np
import imageio

def calcSphereXY2XYZ(px, py, maxHeight, longOffset):
    v0x= np.array(px)
    v0y= np.array(py)
    v03= np.subtract(v0x, maxHeight)
    v04= np.subtract(v0y, maxHeight)
    v1x= np.true_divide(v03, maxHeight)
    v1y= np.true_divide(v04, maxHeight)
    # print(max(v1x), min(v1x))
    v07= np.power(v1x,2)
    v08= np.power(v1y,2)
    v09= np.add(v07,v08)
    v0a= np.subtract(1,v09)
    v1z= np.power(v0a,1/2)                                  # z
    # print('z:', max(v1z), min(v1z))
    v1lat= np.multiply(v1y, math.pi/2)                      # lat
    v0lon= np.arctan2(v1z, -v1x)                             
    v1lon= np.add(v0lon, longOffset)                       # long
    v2lon= np.fmod(v1lon, math.pi*2)                       # long
    return v2lon, v1lat

def calcShpereLatLong2XY(vlon, vlat, width, height):
    v3x0=np.multiply(vlon, width/2/math.pi)
    v3y0=np.multiply(vlat, height/math.pi)
    v3y1=np.add(v3y0, height/2)
    v3x2=v3x0.astype(np.integer)
    v3y2=v3y1.astype(np.integer)
    return v3x2, v3y2

def getPic(a):
    # imgBack= Image.open('地球3.jpg')
    imgBack= Image.open('世界地球日地图_8K_2.jpg')
    imgCloud= Image.open('世界地球云地图_8K.jpg')
    width= imgBack.size[0]
    height= imgBack.size[1]
    imgBack= imgBack.convert('RGBA')
    arrayBack= np.array(imgBack)
    arrayCloud= np.array(imgCloud)
    circleSize= 508
    img2= Image.new('RGBA', (circleSize,circleSize))
    img= Image.new('RGBA', (circleSize,circleSize), 'black')
    w= img.size[0]
    h= img.size[1]
    pxList=[]
    pyList=[]
    for i in range(w):
        for j in range(h):
            r= math.sqrt((i-w/2)**2+(j-h/2)**2)
            if r<circleSize/2:
                pxList.append(i)            
                pyList.append(j)

    nplon, nplat= calcSphereXY2XYZ(pxList, pyList, h/2, a)
    nplon2, nplat2= calcSphereXY2XYZ(pxList, pyList, h/2, a/2)
    # nplon, nplat= rotSphere(nplon, nplat, )
    npx, npy= calcShpereLatLong2XY(nplon, nplat, width-1, height)
    npx2, npy2= calcShpereLatLong2XY(nplon2, nplat2, width-1, height)
    color= arrayBack[npy, npx]
    color2= arrayCloud[npy2, npx2]
    for i in range(len(pxList)):
        x= pxList[i]
        y= pyList[i]
        cc=color[i]
        # print(cc)
        cc= tuple(cc)
        img.putpixel((x,y), cc)
        c2= color2[i]
        c0= int(c2[0]*1.6)
        if c0>255:
            c0=255
        c_alpha= int(c2[0]*0.9)
        c2= (c0,c0,c0,c_alpha)
        img2.putpixel((x,y), c2)
    r,g,b,a= img2.split()
    img.paste(img2, (0,0), mask=a)
    return img

if __name__=='__main__':
    frames=[]
    str1= '微信地球_mask.png'
    img1= Image.new('RGB', (750,1334))
    img2= Image.open(str1)
    for i in range(0, 720, 12):
        a= -i*math.pi/ 180
        img= getPic(a)
        img1.paste(img,(122,424))
        r,g,b,alpha=img2.split()
        img1.paste(img2, (0,0), mask=alpha)
        str1= 'temp%03d.png'%i
        print(str1)
        img1.save(str1)
        im = imageio.imread(str1)
        frames.append(im)
        # img.show()
    imageio.mimsave('earth.gif', frames, 'GIF', duration=0.20) 
   
近期热门:

由菜鸟学Python原班人马打造的公众号【程序员GitHub】,专注于分享GitHub上有趣的资源包括,Python,Java,Go语言前端学习等优质的学习资源,爆料程序员圈的新鲜趣事,热门干货,职场感悟,感兴趣的小伙伴可以来捧场!

点的“在看”,否则就看不到我了555
DXF文件转G代码.7z CAD图纸自动提取所有圆形坐标并自动生成G代码程序代码, 立即下载

相关推荐

DXF文件转为G代码(NC文件)工具

这是一款DXF文件转为G代码(NC文件)工具,原厂工具,转换快速准确。

CNC雕刻机上位机新手源码C#源码,里面有详细dxf解析过程,生成G代码思路,dxf导入生成G代码

CNC雕刻机上位机新手源码C#源码,里面有详细dxf解析过程,生成G代码思路,dxf导入生成G代码,dxf导入,没有其他格式导入,睁大眼睛看清楚,适合新手源码。

2301_76917116的博客 1564

dxf2gcode:dxf2gcode 的分支——DXF 到 G 代码的转换器

dxf2gcode 这是一个分支。 目标是使其与兼容,以便它最终可以为我的激光绘图仪供电。

dxf转g代码_OpenCV 代码段——BGR与YUV转换

概述OpenCV BGR 图 转 YUV 图的代码,网上没有比较完整的示例,使用的时候搜索比较费劲。这里写一个代码片段和例子,方便查找。C++ 代码在 Ubuntu 16.04 自己从源码编译的OpenCV 4.1.0 上测试通过,具体如下:// file name: convert.cpp 在命令行用下面的命令来运行,查看代码有无问题:=c++11 Python 实现在 pip 安装的 Open...

weixin_39631689的博客 407

dxf转g代码.rar_DXF生成 G代码_G代码_dxf转g代码工具_数控代码_转g代码

dxf 转数控机的g代码文件,打开dxf文件的路径,设置g代码生成的文件位置。

基于R和gephi做宏基因组与代谢组等多组学联合network相关性网络图

拿到多组学的数据后一直在找合适的方法将二者进行关联,比如我这里是三种体液的代谢组与一种体液的宏基因组。需求是对多组学进行关联分析,直到最近看到不少文章里利用Gephi将相关性表格进行可视化的图,效果还不错,于是写个过程记录自用。这里演示的是属水平的差异菌群相对丰度(宏基因组结果)与代谢组鉴定到的差异代谢物进行关联。先是计算相关性生成graphml格式文件使用Gephi软件进行可视化。

twocanis的博客 6787

ObjectARX2010二次开发之 --- DXF转G代码(1)

近期计话用ObjectARX2010开发一个DXF转G代码插件,计划已开始.在此记录每天编程用到的关键函数.今日用到的函数如下: 以下英文解释默认是参考ObjectARX for AutoCAD2010,部分参考MSDN. 1.acedGetAcadFrame() (参考ObjectARX for AutoCAD2010) Description: This function

Lofty的专栏 3279

ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)

本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。

weixin_29268385的博客 204

90行python代码让微信地球转起来,太酷了!

1.微信地球 手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个 张小龙 。 你可曾想过这样一个问题, 如果上面那个地球转起来会是怎样? 2.效果图 效果简直不要太酷炫,我只能直呼太牛逼!那么这样一个酷炫的操作是怎么做出来的呢?我们接着往下看。 为解决初学者学习上的困难,专门建立的Python学习扣qun:784758214,从0基础的python脚本到web开发、爬虫、django、数据挖掘数据分析等,0基础到项目实战的资料都有整理。送给每一位python的小伙伴!每晚分享一些学习的方法和

Python免费教程 1031

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 370

告别屏幕适配焦虑:用AndroidAutoSize 1.2.1搞定多尺寸设备(附AndroidX兼容方案)

本文详细介绍了AndroidAutoSize 1.2.1在屏幕适配中的应用,帮助开发者高效解决多尺寸设备适配问题。通过动态计算机制,AutoSize显著提升了UI一致性和开发效率,特别适合处理横竖屏切换、折叠屏等复杂场景。文章还提供了AndroidX兼容方案和性能优化建议,是Android开发者的实用指南。

weixin_42535461的博客 190

90行python代码让微信开屏地球转起来,太酷了!

素材准备这里共需要准备三个素材:1.地球表面素材;2.云图素材;3.微信地球的抠图素材。1)地球表面素材2)云图素材3)微信地球的抠图素材基本原理基本的贴图方法在本博前面的文章《用python实现旋转地球》中讲过了,具体可以参考下面的链接,这里重点讲双层素材的动态效果。云图是灰度图,白色地方代表云层厚,黑色的地方代表那里云层薄,我们根据颜色设置不同的透明度。如果云图与地面的选择速度相同,会显得不自然,我们这里让云层旋转速度比地面旋转速度慢一半,产生相对运动的效果。

2401_84557521的博客 623

告别重复劳动:用Python+pywinauto打造你的微信个人助理(自动回复/收款/定时发消息)

本文介绍如何利用Python和pywinauto库构建微信个人助手,实现自动回复、定时消息、智能收款等功能,告别重复劳动。通过详细的代码示例和配置指南,帮助开发者快速掌握微信自动化技术,提升工作效率。

weixin_42568801的博客 330

90行代码让微信地球转起来,太酷了!(python实现)

90行代码让微信地球转起来

数据分析与统计学之美 2898

【效率手册】Kylin-Desktop-V10-SP1 麒麟系统核心组件实战——从入门到精通的6个关键场景

本文针对Kylin-Desktop-V10-SP1麒麟系统用户,通过文件管理、系统监视、设置优化等6个核心场景实战,深度解析如何高效运用系统内置工具解决文件混乱、性能卡顿、外设驱动等实际问题,帮助用户从功能认知跃升至场景化应用,真正释放国产操作系统的生产力潜能。

weixin_29208327的博客 119

使用R语言整理GEO数据的简易教程

本教程介绍了使用R语言从GEO数据库下载数据并进行数据整理的基本步骤。根据实际研究问题,你可能需要进行更复杂的数据处理和分析。R语言作为一种强大的生物信息学工具,为GEO数据的整理、分析和可视化提供了丰富的功能和工具。希望这个教程能够帮助你入门GEO数据整理和R语言的应用。如果你在使用过程中遇到问题,或需要进一步的指导,请随时向我询问。祝你在GEO数据分析的旅程中取得成功!

Mrrunsen的博客 3743

太酷了!90行 Python 代码让微信地球转起来

1.微信地球手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个张小龙。你可曾想过这样一个问题,如果上面那个地球转起来会是怎样?2.效果图效果简直不要太酷炫,我只能直呼太牛逼!...

Python中文社区 802

基于YOLOv8的违规抽烟/打电话检测系统:从数据集构建到部署实战

模型优点缺点精度高速度慢(5 FPS)SSD速度快小目标检测差YOLOv5平衡性好官方支持停止YOLOv8最新、最快、最准需要PyTorch环境YOLOv8相比前代:骨干网络升级(C2f模块)无锚框检测(Anchor-Free)动态任务对齐分配(TaskAlignedAssigner)支持分类/检测/分割/姿态估计。

YOLO 98

python地球代码_90行python代码让微信地球转起来,太酷了!

1.微信地球手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个 张小龙 。你可曾想过这样一个问题, 如果上面那个地球转起来会是怎样?2.效果图效果简直不要太酷炫,我只能直呼太牛逼!那么这样一个酷炫的操作是怎么做出来的呢?我们接着往下看。3.素材准备这里共需要准备三个素材:1. 地球表面素材 ;2. 云图素材 ;3. 微信地球的抠图素材 。1)地球表面素材2)云图素材3)微信地球的抠图素...

weixin_39707941的博客 706

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

dxf转g代码_太酷了!90行Python代码,让微信地球转起来!

1.微信地球 手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个张小龙。你可曾想过这样一个问题,如果上面那个地球转起来会是怎样?2.效果图 效果简直不要太酷炫,我只能直呼太牛逼!那么这样一个酷炫的操作是怎么做出来的呢?我们接着往下看。3.素材准备 这里共需要准备三个素材:1.地球表面素材;2.云图素材;3.微信地球的抠图素材。1)地球表面素材2)云图素材3)微信地球的抠图素材...

weixin_39754603的博客 303

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python画地球旋转代码_90行代码让微信地球转起来,太酷了!(python实现)

原标题:90行代码让微信地球转起来,太酷了!(python实现)点击图片,即可查看图书详情。1.微信地球手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个 张小龙 。 你可曾想过这样一个问题, 如果上面那个地球转起来会是怎样?2.效果图效果简直不要太酷炫,我只能直呼太牛逼!那么这样一个酷炫的操作是怎么做出来的呢?我们接着往下看。3.素材准备这里共需要准备三个素材:1. 地球表面素材 ;...

weixin_39594080的博客 1295

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 2020互联网公司端午礼盒大比拼!
下一篇: 2020世界年轻大学排名发布:中国高校蝉联世界第一!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值