美文网首页程序员程序猿阵线联盟-汇总各类技术干货
Python编程从0到1(每天把Bing背景设置为桌面)

Python编程从0到1(每天把Bing背景设置为桌面)

作者: 安和然 | 来源:发表于2018-05-09 08:36 被阅读600次

    Bing背景特别漂亮,用脚本自动下载图片,并设置为桌面。

    把图片说明,用水印写在图片上。

    1.爬取图片代码

    #!/usr/bin/python3
    
    # ubuntu设置动态bing壁纸
    # 安装PIL库 pip install Pillow
    
    from PIL import Image, ImageDraw, ImageFont
    import requests
    import os, re, time
    import platform
    
    is_windows = False
    if -1 != platform.platform().upper().find('WINDOWS'):
        is_windows = True
    
    if not is_windows:
        save_dir = "/home/leon/pic/wallpaper/bing/"
    else:
        save_dir = "D:\\bing\\"
    
    def set_desktop(pic_path):
        cmd = "gsettings set org.gnome.desktop.background picture-uri file:" + pic_path
        # 设置壁纸
        ret = os.system(cmd)          
        if ret != 0:
            print("os.system failed, now exit")
            exit(-1)
    
    # windows设置壁纸
    if is_windows:
        import win32gui,win32con,win32api
    
    def set_desktop_windows(imagepath):
        k=win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)
        win32api.RegSetValueEx(k,"WallpaperStyle",0,win32con.REG_SZ,"2")#2拉伸适应桌面,0桌面居中
        win32api.RegSetValueEx(k,"TileWallpaper",0,win32con.REG_SZ,"0")
        win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,imagepath,1+2)
        
    #获取今天的图片的url和copyright信息
    def get_bing_info():
        base_url = "http://cn.bing.com/"
        query_url = "HPImageArchive.aspx?format=js&idx=0&n=1"
    
        r = requests.get(base_url + query_url)
    
        image_url = base_url + r.json()["images"][0]["url"]
        copyright = r.json()["images"][0]["copyright"]
        copyright = re.sub(r'\(.*\)', '', copyright);
        print(copyright)
    
        return (image_url, copyright)
    
    #下载图片
    def down_pic(pic_url, save_dir):
        t = time.localtime(time.time())
        image_name = "{}{:0>2}{:0>2}.jpg".format(t.tm_year, t.tm_mon, t.tm_mday)
        # image_name = re.sub(r'.*/', '', pic_url)
        save_path = save_dir + image_name
        print(save_path)
    
        r = requests.get(pic_url)
        file = open(save_path, "wb")
        file.write(r.content)
        file.close()
    
        return save_path
    
    #添加水印
    def add_watermark(path, text):
        new_path = path + ".watermark"
        cmd = "convert {0} -font 文泉驿微米黑 -pointsize 30 -draw \"gravity south fill black  text 0,72 '{1}'  fill white  text 1,71 '{1}' \" {2}".format(path, text, new_path)
    
        #print(cmd)
        os.system(cmd)   
        os.system("mv {} {}".format(new_path, path))
    
    #通过python的PIL库添加水印
    def add_watermark_by_PIL(path, text):
        img = Image.open(path)
        mode = img.mode
        img_w, img_h = img.size
    
        font_size = int(img_h / 35)
    
        if len(mode) == 1:  # L, 1
            white = (255)
            black = (0)
        if len(mode) == 3:  # RGB
            white = (255, 255, 255)
            black = (0,0,0)
        if len(mode) == 4:  # RGBA, CMYK
            white = (255, 255, 255, 255)
            black = (0,0,0,0)
    
        # 计算text长度,好让文字居中
    
        if not is_windows:
            # 字体可能要改
            # linux查看支持的汉字字体 # fc-list :lang=zh
            try:
                ft = ImageFont.truetype("DroidSansFallbackFull.ttf", font_size)
            except:
                ft = ImageFont.truetype("wqy-microhei.ttc", font_size)
        else:
            ft = ImageFont.truetype("C:\\Windows\\Fonts\\simkai.ttf", font_size)  #楷体  
    
        font_w, font_h = ft.getsize(text)
        start_px = int((img_w - font_w) / 2)
    
        #开始添加水印,同时添加黑白水印,处理深色和浅色背景问题
        draw = ImageDraw.Draw(img)
        if is_windows:
            margin_bottom = 60
        else:
            margin_bottom = 20
        draw.text((start_px + 2, img_h - font_size - margin_bottom + 2), text, black, font=ft)
        draw.text((start_px, img_h - font_size - margin_bottom), text, white, font=ft)
    
        img.save(path)
    
    def main():
        url, copyright = get_bing_info()
        path = down_pic(url, save_dir)
        if not is_windows:
            add_watermark(path, copyright)
            set_desktop(path)
        else:
            add_watermark_by_PIL(path, copyright)
            set_desktop_windows(path)
    
    main()
    
    

    2.运行脚本

    写一个bat文件。

    C:\ProgramData\Anaconda3\python.exe C:\change_desktop.py %*
    

    其中 'C:\ProgramData\Anaconda3\python.exe' 为python路径,'C:\change_desktop.py'为脚本路径。

    3.自动启动

    将bat文件放到开始菜单的启动下即可。

    注:如果运行报错,需要在D盘下建一个bing文件。当然也可以在代码中修改。

    20180508.jpg

    相关文章

      网友评论

        本文标题:Python编程从0到1(每天把Bing背景设置为桌面)

        本文链接:https://www.haomeiwen.com/subject/pkagrftx.html