日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python基础教程微信_用Python实现让微信地球转起来附代码!

發布時間:2025/5/22 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础教程微信_用Python实现让微信地球转起来附代码! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

微信地球

手機重啟后打開微信的一瞬間,會看到一幅有名的圖片。

大概是站在月亮上看地球的效果。

你有沒有想過,如果上面那個地球轉起來會是怎樣?

素材

這里有兩個表面素材,一個是地球表面素材,一個是云圖素材。

還有一個微信地球的摳圖素材。

基本原理

基本的貼圖方法在本博前面的文章(《用python實現旋轉地球》)中講過了,這里重點講雙層素材的動態效果。云圖是灰度圖,白色地方代表云層厚,黑色的地方代表那里云層薄。我們根據顏色設置不同的透明度。

如果云圖與地面的選擇速度相同,會顯得不自然,我們這里讓云層旋轉速度比地面旋轉速度慢一半,產生相對運動的效果。

這樣帶來的問題是,地球旋轉360°后云圖只旋轉了180°,必須加倍到720°才能實現連續運動。

具體的云層透明度設置,參數需根據實際效果進行調整。

GIF壓縮

順便給大家介紹一個比較好用的壓縮GIF的在線工具。

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

直接生成的GIF動圖有超過傳輸限制,無法上傳,用此工具壓縮后文件體積大幅縮小,但圖片效果沒有肉眼可以察覺的影響。

完整代碼

分步驟的具體邏輯講解,請看《用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

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知識,請關注云海天Python教程!!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python基础教程微信_用Python实现让微信地球转起来附代码!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。