himawari8图片下载改进版

Posted in 2017-3-23 11:42 | Category: Python | Tags: earth himawari8 python

第一版下载图片后设为壁纸,四周都是黑黑的不好看, 所以结合本地壁纸将两张图片进行合成

只要计算一下要缩减的大小与要放置的位置

我的方法是:打开 gimp,合成两张图片,记下缩减的大小(214,214)与位置(160,160)

每次只要运行一下

python himawari8.py

源码

from PIL import Image, ImageOps, ImageDraw
from io import BytesIO
from urllib.request import Request, urlopen
from datetime import datetime, timedelta
import json

SCALE = 2
WIDTH = 1368
HEIGHT = 768


def get_info():
    url = "http://himawari8-dl.nict.go.jp/himawari8/img/D531106/latest.json"
    request = Request(url)
    response = urlopen(request, timeout=10)
    return json.loads(response.read())


def download():
    png = Image.new('RGB', (550 * SCALE, 550 * SCALE))
    # desktop = Image.new('RGB', (WIDTH, HEIGHT))
    desktop = Image.open('/home/jianglin/Pictures/308556.png')
    url_format = 'http://himawari8-dl.nict.go.jp/himawari8/img/D531106/{}d/{}/{}_{}_{}.png'
    info = get_info()
    # date = datetime.strptime(info['date'], '%Y-%m-%d %H:%M:%S') + timedelta(
    #     hours=-8)
    date = datetime.strptime(info['date'], '%Y-%m-%d %H:%M:%S')
    for x in range(SCALE):
        for y in range(SCALE):
            url = url_format.format(SCALE, 550,
                                    date.strftime("%Y/%m/%d/%H%M%S"), x, y)
            print(url)
            request = Request(url)
            response = urlopen(request, timeout=10)
            img = Image.open(BytesIO(response.read()))
            png.paste(img, (550 * x, 550 * y, 550 * (x + 1), 550 * (y + 1)))
    png = circle(png)
    desktop.paste(png, (160, 160), png)
    desktop.save('/tmp/earth.png', "PNG")
    set_background()


def circle(img):
    width = SCALE * 550
    height = SCALE * 550
    size = (width, height)
    mask = Image.new('L', size, 0)
    draw = ImageDraw.Draw(mask)
    draw.ellipse((3, 3, width - 3, height - 3), fill=255)
    output = ImageOps.fit(img, mask.size, centering=(0.5, 0.5))
    output.putalpha(mask)
    output.thumbnail((214, 214), Image.ANTIALIAS)
    return output


def convert():
    # size = (768, 768)
    # mask = Image.new('L', size, 0)
    # draw = ImageDraw.Draw(mask)
    # draw.ellipse((3, 3, 765, 765), fill=255)
    # im = Image.open('/tmp/earth.png')
    # output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
    # output.putalpha(mask)
    # output.thumbnail((256, 256), Image.ANTIALIAS)
    # output.save('output.png')
    # output.convert("RGBA")
    output = Image.open('output.png')
    output.thumbnail((214, 214), Image.ANTIALIAS)
    desktop = Image.open('/home/jianglin/Pictures/308556.png')
    desktop.paste(output, (160, 160), output)
    desktop.save('/tmp/earch.png', "PNG")


def set_background():
    import os
    os.system('feh --bg-scale /tmp/earth.png')


if __name__ == '__main__':
    download()

就像这样

img

img

img