python按照尺寸筛选适合做壁纸的图片

思路很简单,过程很波折
1、找到需要的库和方法:目录设置、文件读取、尺寸获取、文件移动
2、debug:文件排除,文件读取错误等

import os,shutil
from PIL import Image

l=l1=os.listdir() # listdir可以读取到子目录和隐藏文件等,于是使用下面的集合推到式过滤出后缀名,这是之后的,之前还或其了ini,通过后缀名过滤掉不需要的文件名/目录名,其实只有两个,一个是子目录,一个是隐藏的ini文件

{
    
    i.split('.')[1] for i in l if i.find('.')>0}
Out[78]: {
    
    'gif', 'jpg', 'png'}

for i in l1:
    if not ('jpg' in i or 'gif' in i or 'png' in i or 'gif' in i):l.remove(i)

for f in l:
    img=Image.open(f).size
    if img[0]>img[1] and img[1]>=1080:
        shutil.move(f,'./CoolMarket+')
# 这个是所有的横大于竖,竖尺寸大于1080的文件,将其移动到子目录

i=0
while i<lens:
    img=Image.open(l[i]).size
    if img[0]>img[1] and img[1]>=1080:
        shutil.move(f,'./CoolMarket+')
    i+=1
# 这个是用i和while的方法,因为我遇到了提醒,但之后发现提醒并没有停止程序运行,使用这个方法的妙处在于,知道i在那里出错,而且之后可以继续i之后的运行,调试用

packages\PIL\TiffImagePlugin.py:793: UserWarning: Corrupt EXIF data.  Expecting to read 4 bytes but only got 0. 
  warnings.warn(str(msg))
# 这个是我上面提到的跳出的情况,正如上所说,warning并不会中止程序,只是提醒而已

在这里插入图片描述
随口说说,伪装成png的webp,windows不显示他的分辨率信息,也无法形成他的预览,也无法当作壁纸,于是是windows目前并不支持webp,需要转换

在这里插入图片描述
之后只需要在这些图中挑选出合适的获取去除不合适的图片,成为壁纸包,例如一些非16:9的在系统自动处理后,重心不合适的,例如猫老大的几张,格斯的那张。

上面有个很低级的bug,如果各位看到了那个,又误以为真,又没看到这里,我调皮的说一下抱歉:

os.listdir()
Out[27]: 
['System Volume Information',
 '1.txt',
 '1 - 副本 (2).txt.txt',
 '1 - 副本 (3).txt.jpg',
 '1 - 副本 (4).txt',
 '1 - 副本 (5).txt',
 '1 - 副本 (6).txt',
 '1 - 副本 (2).txt.png']

l=l1=os.listdir()

c=0
for i in l1:
    c+=1
    if not ('jpg' in i or 'jpeg' in i or 'png' in i or 'gif' in i):l.remove(i)
    
c
Out[32]: 4

l
Out[33]: ['1.txt', '1 - 副本 (3).txt.jpg', '1 - 副本 (5).txt', '1 - 副本 (2).txt.png']

猜你喜欢

转载自blog.csdn.net/jhsxy2005/article/details/115044899