移动手机截图,读取图片尺寸
这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更加美观、方便对比,甚至能够让人忍不住想为它们短暂的“尺寸统一”开个欢呼庆祝派对!
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.sizeexcept 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.sizeexcept 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库用于展示处理进度条。这些库函数的使用可以简化我们的开发工作,并增加了代码的可读性。
相关文章:
移动手机截图,读取图片尺寸
这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更…...
服务器应用程序不可用的原因是什么引起的
服务器应用程序不可用的原因是什么引起的 服务器应用程序不可用的原因是什么引起的?其实服务器应用程序不可用可能是由多种原因引起的。主要包括软件故障、网络问题、硬件故障、安全问题、配置错误、容量不足、数据库问题等,具体详细服务器应用程序不可用的原因如下…...
使用SPY++查看窗口信息去排查客户端UI软件问题
目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的...

Flink CDC MySQL同步MySQL错误记录
1、启动 Flink SQL [appuserwhtpjfscpt01 flink-1.17.1]$ bin/sql-client.sh2、新建源表 问题1:Encountered “(” 处理方法:去掉int(11),改为int Flink SQL> CREATE TABLE t_user ( > uid int(11) NOT NULL AUTO_INCREMENT COMME…...

深入了解 Linux 中的 AWK 命令:文本处理的瑞士军刀
简介 在Linux和Unix操作系统中,文本处理是一个常见的任务。AWK命令是一个强大的文本处理工具,专门进行文本截取和分析,它允许你在文本文件中查找、过滤、处理和格式化数据。本文将深入介绍Linux中的AWK命令,让你了解其基本用法和…...
【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限
文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求,检查 token 中的信息是否有效。 注意是“认证检查”,而不是“权限” 1. 功能介绍 1、在用户完成登录后,程序会把用户相关…...
excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中
excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中 import pandas as pd import ositems os.listdir("./") sheetname"" for item in items:if item.__contains__(xls):dfpd.read_exc…...

IIS管理器无法打开。启动后,在任务栏中有,但是窗口不见了
找到IIS管理器启动程序的所在位置 并在cmd命令行中调用 inetmgr.exe /reset 进行重启 先查看IIS管理器属性,找到其位置 管理员模式打开cmd命令行,并切换到上面的文件夹下运行Inetmgr.exe /reset 运行完成后可以重新看到IIS窗口 原因:由于某…...

使用VBA实现快速模糊查询数据
实例需求:基础数据保存在Database工作表中,如下图所示。 基础数据有37个字段,上图仅展示部分字段内容,下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字,包…...
spring boot flowable多人前加签
1、前加签插件 package com.xxx.flowable.cmd;import com.xxx.auth.security.user.SecurityUser; import com.xxx.commons.ApplicationContextHolder; import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; import org.apache.co…...

结构体运算符重载
1.降序 struct Point{int x, y;//重载比较符bool operator < (const Point &a) const{return x > a.x;//当前元素大时,是降序} };2.升序 struct Point{int x, y;//重载比较符 // bool operator < (const Point &a) const{ // return x…...
幽默直观的文档作者注释
注释是程序中非常重要的一部分,在不同的编程语言中,注释的风格和语言描述会有所不同。以下是一些常用的注释风格和语言描述: 直观注释:这种注释使用简洁、明了的语言,帮助读者快速地理解代码。例如,代码中…...

前端开发网站推荐
每个人都会遇见那么一个人,永远无法忘却,也永远不能拥有。 以下是一些可以用来查找和比较前端框架的推荐网站: JavaScript框架比较: 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaS…...
【C语言】通讯录管理系统(保姆级教程+内含源码)
C系列文章目录 目录 C系列文章目录 前言 一,模块化编程 二,系统框架构建 1.成员信息的创建 2.菜单实现 3.系统功能声明 三、系统功能实现 1.初始化通讯录 2.增加联系人 3.显示所有联系人 4.根据姓名查找位置 5.删除指定联系人 6.查找指定联…...

python自动解析301、302重定向链接
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 使用模块requests 方式代码如下: import requests url_string"http://******" r requests.head(url_string, streamTrue) print r.h…...
【未解决问题】opencv 交叉编译 ffmpeg选项始终为NO
opencv 打不开视频的原因 在交叉编译时候,发现在 pc 端能用 opencv 打开的视频,但是在 rv1126 上打不开。在网上查了很久,原因可能是 ffmpeg 造成的。 解决opencv源代码编译找不到ffmpeg-CSDN博客 交叉编译 ffmpeg 尝试了一天还是第二个博客…...

Python实用技术二:数据分析和可视化(2)
目录 一,多维数组库numpy 1,操作函数: 2,numpy数组元素增删 1)添加数组元素 2)numpy删除数组元素 3)在numpy数组中查找元素 4)numpy数组的数学运算 3,numpy数…...

24Hibench
1. Hibench 官网 HiBench is a big data benchmark suite that helps evaluate different big data frameworks in terms of speed, throughput and system resource utilizations. It contains a set of Hadoop, Spark and streaming workloads, including Sort, WordCou…...
VC++父进程交互式操作子进程标准输入输出
父进程接管子进程的标准输入输出和错误,实现对子进程的交互操作。比如子进程是一个类似mysql这种可以交互的命令,执行操作后输出结果,父进程根据结果分析决定执行下一步的命令,从而替代人工的输入。 通过父进程创建子进程,使用管道重定向子进程的输入输出错误可以实现 在 …...

一步一招,教你如何制作出成功的优惠促销微传单
在当今的数字化时代,几乎所有的事情都可以在互联网上完成,包括制作宣传单。有很多在线工具可以帮助我们轻松制作出精美的商场促销宣传单。下面就以乔拓云为例,详细介绍如何简单几步制作出让人眼前一亮的商场促销宣传单。 1. 注册并登录乔拓云…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...