这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更加美观、方便对比,甚至能够让人忍不住想为它们短暂的"尺寸统一"开个欢呼庆祝派对!
input默认读取 /storage/emulated/0/Pictures/Screenshots/Screenshot_20231001_132228.jpg 尺寸大小
输入错误就直接读取这个路径图片尺寸,
将和它相同尺寸的图片移动到 /storage/emulated/0/Pictures/图片要删除/
没有这个文件夹就新建
那个我是要移动那个读渠道的尺寸,然后按照这个尺寸,移动这个文件夹下的这个相同的尺寸
优雅热诚幽默注释
代码就像是一位图片整理小能手,它的使命是帮助您从一大堆杂乱无章的图片中挑选出那些与您心仪的指定尺寸完全匹配的图片,并将它们统统移动到一个整洁有序的目标文件夹中。
所以,为了达成这个目标,我们编写了这段代码,将源文件夹中的图片逐个探索,并与您指定的图片尺寸进行一一对比。只要找到尺寸完全匹配的图片,我们就毫不犹豫地将其搬迁到目标文件夹中。这样一来,在整理图片时,您只需交给代码这个"小助手",它会自动、细致地帮您完成这项繁琐的任务,让您省时省力,一举搞定!
咳咳,我尝试写一个优雅热诚幽默的注释版本:
from PIL import Image # 导入PIL库,用于处理图片(因为机器也想变成梦工厂的缩小药水)
import os # 导入os库,用于文件和目录操作(让我们来操作文件的世界吧!)
import shutil # 导入shutil库,用于文件移动操作(我们要把文件从这里移到那里,就像魔术师一样!)
from tqdm import tqdm # 导入tqdm库,用于显示进度条(进度条是你最可靠的盆友)
import imghdr # 导入imghdr库,用于判断文件是否为图片类型(我们需要知道它是不是真的图片哦)
# 判断文件是否为图片类型(如果它不是图片,那它就是一只假冒伪劣产品)
def is_image_file(file_path):
return imghdr.what(file_path) is not None
# 读取指定图片尺寸并存储到列表中(我们要知道图片的大小,才能做出更好的选择)
def get_image_size(image_path):
try:
image = Image.open(image_path)
return image.size
except FileNotFoundError:
return None
# 移动与指定图片尺寸相同的图片到目标文件夹(我们要找到和它一样大的伙伴,一起吃饭!)
def move_similar_images(source_folder, target_folder, size):
# 创建目标文件夹(如果不存在),我们要给他找个家!
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历源文件夹中的所有文件,就像一个侦探一样搜寻线索!
for filename in tqdm(os.listdir(source_folder)):
file_path = os.path.join(source_folder, filename)
if os.path.isfile(file_path) and is_image_file(file_path):
image_size = get_image_size(file_path)
if image_size is not None and image_size == size:
# 移动相同尺寸的图片到目标文件夹,让它们团聚在一起!
shutil.move(file_path, target_folder)
# 指定文件夹路径和图片名称,我们要准确定位!
folder_path = '/storage/emulated/0/Pictures/Screenshots/' # 源文件夹路径(从这里找)
image_name = 'Screenshot_20231001_132228.jpg' # 指定的图片名称(我们要找的那张)
# 读取指定图片的尺寸,看看它有多大才决定是不是我们要的那个!
image_path = os.path.join(folder_path, image_name)
image_size = get_image_size(image_path)
if image_size is None:
print("找不到指定的图片文件。") # 找不到的话,我们要告诉用户它去哪儿了!
else:
print("指定图片尺寸大小:{}x{}".format(image_size[0], image_size[1])) # 告诉用户图片有多大不会吓到他们!
# 移动与指定图片尺寸相同的图片到目标文件夹,我们要把他们召集起来!
target_folder = '/storage/emulated/0/Pictures/图片要删除/'
move_similar_images(folder_path, target_folder, image_size)
同时,为了提升代码的易读性和处理效率,我们巧妙地运用了一些优秀的库函数。比如,PIL库是专门用于图片处理的神器,它帮助我们轻松应对图片的尺寸判断。而os库则在文件和路径操作上发挥了重要作用,shutil库则完成了文件和文件夹的移动工作,tqdm库更是加入了处理进度条的元素,让整个过程像是一场与时间赛跑的游戏。这些巧妙的设计和库函数的精妙应用,使得代码不仅功能强大,还增添了一丝人性化的趣味。
第2种方法:
# 导入 Python Imaging Library 库用于处理图片(好像这个库叫做 PIL 也可以)
from PIL import Image
# 导入 os 库用于文件操作和路径操作(让我们来操作文件吧!)
import os
# 导入 shutil 库用于移动文件和文件夹(我们要把图片移动到哪里呢?)
import shutil
# 导入 tqdm 库用于展示进度条(进度条,让我们看得到代码进展了!)
from tqdm import tqdm
# 判断文件是否为图片类型(我们只需要图片文件)
def is_image_file(file_path):
# 设置一个包含合法扩展名的列表(哪些扩展名是图片类型的呢?)
valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']
# 获取文件扩展名并转换成小写格式(因为文件扩展名大小写不一定,我们把它都转换成小写来比较)
ext = os.path.splitext(file_path)[1].lower()
# 判断文件扩展名是否在合法扩展名列表中(判断一下这个文件是不是图片类型)
return ext in valid_extensions
# 获取指定图片尺寸(我们需要知道限定的图片尺寸)
def get_image_size(image_path):
try:
# 打开图片并获取其大小(打开图片文件,获取它的大小)
image = Image.open(image_path)
# 返回图片的尺寸大小
return image.size
except FileNotFoundError:
# 如果文件不存在,则返回 None(如果文件不存在,我们就返回空)
return None
# 移动与指定图片尺寸相同的图片到目标文件夹(让我们把符合要求的图片移动到目标文件夹吧!)
def move_similar_images(source_folder, target_folder, size):
# 如果目标文件夹不存在,则创建它(万一目标文件夹不见了呢?)
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 使用 os.walk() 遍历源文件夹下的所有子文件夹和文件(我们要找到那些符合要求的图片文件)
for root, dirs, files in os.walk(source_folder):
for filename in tqdm(files):
# 构造文件路径(得到图片文件的完整路径)
file_path = os.path.join(root, filename)
# 如果文件是图片类型,则进一步处理(我们只需要处理图片类型的文件)
if is_image_file(file_path):
# 获取图片尺寸并与指定尺寸比较(看看这张图片的尺寸是不是我们想要的)
image_size = get_image_size(file_path)
if image_size is not None and image_size == size:
# 将相同尺寸的图片移动到目标文件夹中(好了,符合要求的图片就可以移动到目标文件夹了)
shutil.move(file_path, target_folder)
# 指定源文件夹路径和目标文件夹路径(我们需要知道源文件夹和目标文件夹的位置)
source_folder = '/storage/emulated/0/Pictures/Screenshots/'
target_folder = '/storage/emulated/0/Pictures/图片要删除/'
# 图片名称和路径(我们需要提供一张指定尺寸的图片,来找到符合要求的图片)
image_name = 'Screenshot_20231001_132228.jpg'
image_path = os.path.join(source_folder, image_name)
# 获取指定图片尺寸(我们需要知道限定的图片尺寸)
image_size = get_image_size(image_path)
if image_size is None:
# 如果获取不到指定图片,则打印信息(如果找不到指定的图片文件,那就告诉我们吧!)
print("找不到指定的图片文件。")
else:
# 打印指定图片的尺寸大小(好的,我们取得了指定图片的尺寸,让我们看看它的大小吧!)
print("指定图片尺寸大小:{}x{}".format(image_size[0], image_size[1]))
# 移动与指定图片尺寸相同的图片到目标文件夹(那么现在,符合要求的图片就可以移动到目标文件夹啦!)
move_similar_images(source_folder, target_folder, image_size)
这次的注释能够让理解代码的逻辑和各个函数的作用
一个处理图片的实例,我们筛选出与指定图片尺寸相同的图片,并将它们移动到指定的目标文件夹中,用于整理图片集合,只保留指定尺寸的图片,使图片更加整洁和有序。
为什么要有这个代码呢?
相册整理:记得有一次旅行,我拍了很多照片,各种尺寸都有。为了方便找到那些美好瞬间,我挑出了同样尺寸的照片,放在一个文件夹里,回忆着那段美好的旅程。
统一尺寸:有一次,我为了制作一个关于我成长的视频,需要将各个阶段的照片调整成相同的尺寸。当我看到那些不同年代、同样尺寸的照片时,心中涌起一股感慨。
数据分析:曾在一个展览中,我看到研究人员通过筛选出相同尺寸的照片进行数据分析,从而揭示出一些有趣的规律。那一刻,我感叹科技的神奇,也为这些默默付出的研究人员点赞。
为了实现上述功能,我们编写了这个代码。它通过遍历源文件夹中的所有图片文件,并逐个判断它们的尺寸是否与指定图片的尺寸相同,
如果相同则将其移动到目标文件夹中。
这样做的好处是可以帮助我们自动化完成这个任务,提高处理效率。
同时,在代码中使用了一些常用的库函数,如PIL库用于处理图片,os库用于文件和路径操作,shutil库用于移动文件和文件夹,tqdm库用于展示处理进度条。这些库函数的使用可以简化我们的开发工作,并增加了代码的可读性。