python把照片文件夹内的照片处理后作为桌面壁纸幻灯片播放

1.为了把文件夹内的照片作为桌面壁纸,有一些竖版的照片作为壁纸不好看,于是先把文件夹内竖版照片两张两张平到一起,为防止两张竖版图片分辨率大小不一样,会先把小的那张放大和大的一样高后再进行拼接。

import os
from os import listdir
from PIL import Image, ImageOps

# 把两张图片拼接在一起 img1 2 是pil读出来的参数
def compose_pic(img1, img2):
    w1, h1 = img1.width,img1.height
    w2, h2 = img2.width,img2.height
    # print((w2*h1)/h2)
    if h2 > h1:
        img1 = img1.resize((int((w1*h2)/h1), h2), Image.BILINEAR)
        print('调整图片1')
    elif img2.height < img1.height:
        img2 = img2.resize((int((w2*h1)/h2), h1), Image.BILINEAR)
        print('调整图片2')
    else:
        # width, height = img1.size
        print('不调整图片')
    ims = [img1, img2]
    result = Image.new(img1.mode, ((img1.width+img2.width), img2.height))
    for i, im in enumerate(ims):
        # print(im)
        result.paste(im, box=(i * img1.width, 0))
    return result


#把path文件夹下的所有照片进行拼接操作
def compose_all(path):
    file_list = os.listdir(path)
    end_list = ['.jpg','.JPG','.jpeg','.JPEG','.png','.PNG']
    im_list = []
    for f in file_list:
        # print(f)
        f_end = f'.{f.split(".")[-1]}'
        # print(f_end)
        if f_end in end_list:
            # print(f)
            im_list.append(path + "/" + f)
    # print(im_list)
    im_ver_path = []
    im_vertical = []
    for im in im_list:
        im_read = ImageOps.exif_transpose(Image.open(im))   #Image.open打开的照片横竖会错乱,所以由ImageOps.exif_transpose打开
        if im_read.width < im_read.height:
            im_vertical.append(im_read)
            im_ver_path.append(im)
    print(im_vertical)
    if len(im_vertical) % 2 != 0:       #如果有奇数张竖版照片的话就复制最后一张照片
        im_vertical.append(im_vertical[-1])
        print(im_vertical)
    for i in range(len(im_vertical)):
        if (i % 2 == 0):
            img1 = im_vertical[i]
            img2 = im_vertical[i+1]
            print(img1,img2)
            new_img = compose_pic(img1, img2)
            # print(new_img)
            new_img.save(path + "/拼图"+str(i)+'.jpg')
    print(im_ver_path)
    for im_used in im_ver_path:
        os.remove(im_used)

 拼接效果⬆

2.所有文件夹内的照片都处理完后发现大部分照片比例位4:3,设置为桌面时两边有黑边,如果用拉伸的效果的话就会把照片拉伸任务变形,所以决定对照片进行处理,用PIL库将照片拉伸到16:9后,在进行高斯模糊,然后把把原照片贴到上边 ,这样就有两边模糊的效果。记得备份原照片。

 

import os
from os import listdir
from PIL import Image, ImageOps,ImageFilter,ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
#导入了上边代码解决OSError: broken data stream when reading image file报错

def deal_pic(pic_path):
    img = ImageOps.exif_transpose(Image.open(pic_path))
    if img.width/img.height > 1.7:
        print('图片已经是16:9')
        return
    img_new = Image.new(img.mode, (int(img.height*16/9),img.height))
    img1 = img.resize((int(img.height*16/9),img.height) ,Image.BILINEAR)
    # print(img_new)
    img1 = img1.filter(ImageFilter.GaussianBlur(radius=30))
    img_new.paste(img1,box=(0,0))
    # print(int((img1.width-img.width)/2))
    img_new.paste(img,box=(int((img1.width-img.width)/2),0))
    img_new.save(pic_path)
    img1.close()
    img.close()
    img_new.close()

if __name__ == '__main__':
    end_list = ['.jpg','.JPG','.jpeg','.JPEG','.png','.PNG']
    file_dir = r"G:\照片\旅行照片"
    path_lists = []
    for root, dirs, files in os.walk(file_dir):
        #print(root) #当前目录路径
        path_lists.append(dirs) #当前路径下所有子目录
        #print(files) #当前路径下所有非目录子文件
    path_list = path_lists[0]
    for path in path_list:
        floder_path = file_dir + '\\' +path
        file_list = os.listdir(floder_path)
        im_list = []
        for f in file_list:
            # print(f)
            f_end = f'.{f.split(".")[-1]}'
            # print(f_end)
            if f_end in end_list:
                pic_path = floder_path + '\\' + f
                print(pic_path)
                deal_pic(pic_path)

3.原本打算用自带的程序进行桌面切换,但是照片文件太多,win10直接读不出来那么多图片,也可能需要把所有照片放到同一目录下,不便后期管理,所以决定将所有照片文件目录保存在json文件中,用python程序随机提取照片设为桌面,这样还可以自主控制桌面切换的时间。

import os
import json
from os import listdir
from PIL import Image, ImageOps,ImageFilter,ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
#导入了上边代码解决OSError: broken data stream when reading image file报错



if __name__ == '__main__':
    # end_list = ['.jpg','.JPG','.jpeg','.JPEG','.png','.PNG']
    # file_dir = r"G:\照片\旅行照片"
    # path_lists = []
    # for root, dirs, files in os.walk(file_dir):
    #     #print(root) #当前目录路径
    #     path_lists.append(dirs) #当前路径下所有子目录
    #     #print(files) #当前路径下所有非目录子文件
    # path_list = path_lists[0]
    # pic_list = []
    # for path in path_list:
    #     floder_path = file_dir + '\\' +path
    #     file_list = os.listdir(floder_path)
    #     im_list = []
    #     for f in file_list:
    #         # print(f)
    #         f_end = f'.{f.split(".")[-1]}'
    #         # print(f_end)
    #         if f_end in end_list:
    #             pic_path = floder_path + '\\' + f
    #             print(pic_path)
    #             pic_list.append(pic_path)
    # print(len(pic_list))
    pic_data = 'pic.json'
    # with open(pic_data,'w') as file_obj:
    #     json.dump(pic_list, file_obj)

    with open(pic_data) as file_obj:
        pic_list = json.load(file_obj)
    print(pic_list[3])



设置桌面程序,可以设置成bat文件和后台运行文件 放到启动文件夹内自启动。

import json
import win32api   # 调用Windows底层的接口
import win32con   # 修改数据
import win32gui   # 提交数据
import ctypes       # os文件操作
import random   # 取随机值
import time



def setWallpaperMode(mode_str):

    reg_key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)
    win32api.RegSetValueEx(reg_key, "WallpaperStyle", 0, win32con.REG_SZ, mode_str)


# 获取当前路径
def getWallpaper():
    ubuf = ctypes.create_unicode_buffer(512)
    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_GETDESKWALLPAPER, len(ubuf), ubuf, 0)
    return ubuf.value

# 设置背景桌面为指定路径的图片

def setWallpaper(path):

    changed = win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE

    ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_SETDESKWALLPAPER, 0, path, changed)

if __name__ == '__main__':

    pic_data = 'pic.json'
    with open(pic_data) as file_obj:
        pic_list = json.load(file_obj)
    while(1):
        img_path = random.choice(pic_list)
        setWallpaper(img_path)
        # print(img_path)
        time.sleep(20) #调整时间可以改变换图片的间隔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值