读取vivo手机截图尺寸移动.jpg等文件
这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更加美观、方便对比,甚至能够让人忍不住想为它们短暂的“尺寸统一”开个欢呼庆祝派对!
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库用于展示处理进度条。这些库函数的使用可以简化我们的开发工作,并增加了代码的可读性。相关文章:
读取vivo手机截图尺寸移动.jpg等文件
这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更…...
Web前端-Vue2+Vue3基础入门到实战项目-Day2(指令补充, computed计算属性, watch侦听器, 水果购物车)
Web前端-Vue2Vue3基础入门到实战项目-Day2 指令补充指令修饰符v-bind 对样式控制的增强控制class案例 - 京东秒杀tab导航高亮控制style案例 - 控制进度条 v-model 应用于其他表单元素 computed计算属性基本使用computed计算属性 vs methods方法计算属性完整写法案例 - 成绩 wat…...
ffmpeg之去除视频水印
ffmpeg去除水印使用delogo视频滤镜。 delogo参数: x,y,w,h分别表示logo区域的左上角位置及宽度和高度; show:0表示不显示logo区域,1表示显示logo区域。 执行下面的命令: ffmpeg -i 1.mp4 -vf delogox300:y10:w80:h30:show0 out.mp4 效果…...
第二章 线性表
线性表 线性表的基本概念线性表的顺序存储线性表顺序存储的类型定义线性表基本运算在顺序表上的实现顺序表实现算法的分析 线性表的链接存储单链表的类型定义线性表的基本运算在单链表上的实现 其他运算在单链表上的实现建表删除重复结点 其他链表循环链表双向循环链表 顺序实现…...
Java 超高频常见字符操作【建议收藏】
文章目录 前言1. 字符串拼接2. 字符串查找3. 字符串截取4. 字符串替換5. 字符串分割6. 字符串比较7. 字符串格式化8. 字符串空格处理 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一…...
MongoDB数据库网站网页实例-编程语言Python+Django
程序示例精选 PythonDjangoMongoDB数据库网站网页实例 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoMongoDB数据库网站网页实例》编写代码,代码整洁,…...
开箱报告,Simulink Toolbox库模块使用指南(七)——S-Fuction Builter模块
S-Fuction Builter S-Fuction Builter模块,Mathworks官方Help对该部分内容的说明如下所示。 DFT算法的原理讲解和模块开发在前几篇文章中已经完成了,本文介绍如何使用S-Fuction Builter模块一步到位地自动开发DFT算法模块,包括建立C MEX S-Fu…...
spring-boot 操作 mongodb 数据库
如何使用 spring-boot 操作 mongodb 数据库 配置文件: spring:data:mongodb:host: 127.0.0.1database: fly_articleDbport: 27017# 可以采取 mysql 写法# uri: mongodb://127.0.0.1/fly_articleDb依赖信息: <?xml version"1.0" encoding"UTF-…...
JVM篇---第三篇
系列文章目录 文章目录 系列文章目录一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?二、Java内存结构三、说说对象分配规则一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文…...
建筑施工行业招投标资源众包分包系统站点开发
一款针对建筑、施工行业开发的程序系统平台,运营方可以招募企业发布招投标信息以及招聘信息。 核心功能:一、项目招投标众包发布和投标 企业可以根据自身资源或者实际需求发布参与招投标信息,程序后台可以管理、审核用户发布的信息。参与招…...
【Linux基础】Linux发展史
👉系列专栏:【Linux基础】 🙈个人主页:sunny-ll 一、前言 本篇主要介绍Linux的发展历史,这里并不需要我们掌握,但是作为一个合格的Linux学习者与操作者,这些东西是需要了解的,而且…...
openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务
文章目录 openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务 openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务 在乐观并发控制(OCC)中&…...
【Docker】搭建 Docker 镜像仓库
文章目录 前言:公有仓库和私有仓库公共镜像仓库私有镜像仓库 一、搭建 Docker 镜像仓库1.1 搭建简化版的镜像仓库1.2 搭建带有图形化界面的镜像仓库1.3 配置 Docker 信任地址 二、向私有镜像仓库推送和拉取镜像2.1 推送本地镜像到私有仓库2.2 拉取私有仓库中的镜像 …...
Python数据攻略-Pandas的数据计算、拼接与可视化
如何将数据转化为有用的信息?在数据分析的世界里,仅仅拥有大量数据是不够的。需要有方法去“翻译”这些数据,让它们告诉我们一些有用的信息。 本篇文章要探讨的内容:如何使用Pandas进行数据计算、拼接和可视化,从而让数据“说话”。 文章目录 Pandas的数据计算基本数学运…...
【计算机网络】HTTPS协议详解
文章目录 一、HTTPS协议 介绍 1、1 HTTP协议不安全的体现 1、2 什么是 HTTPS协议 二、加密的一些概念 2、1 怎么理解加密 2、2 为什么要加密 2、3 常见的加密方式 2、2、1 对称加密 2、2、2 非对称加密 三、HTTPS协议探究加密过程 3、1 只使用对称加密 3、2 只是用非对称加密 3…...
Septentrio接收机二进制的BDS b2b改正数解码
Galileo的HAS和BDS B2b改正数为实时PPP提供了可能,要实现实时PPP解算,必须对对应的数据进行解码。由于没有做过解码的工作,现结合qzsl6tool代码对Septentrio的解码代码进行学习。 1. 二进制枕头的识别和解码 定义一个读取数据的类ÿ…...
nvm 管理 node版本
下载地址 https://nvm.uihtm.com/download.html 基础命令 查看所有可安装的node版本 nvm list available 查看本地已经安装的所有版本: nvm list 安装指定的node版本 nvm install 14.18.1 使用指定node版本 nvm use 14.18.1 卸载指定node版本 nvm uninstall …...
LeetCode 15.三数之和
三数之和 问题描述 LeetCode 15.三数之和 给你一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k,同时还满足 nums[i] nums[j] nums[k] 0。请你返回所有和为 0 且不重复的三元组。 注意:答…...
Linux实用操作(固定IP、进程控制、监控、文件解压缩)
目录 一、快捷键 1、ctrl c强制停止 2、ctrl d退出或登出 3、历史命令搜索history 4、光标移动快捷键 5、清屏 二、软件安装 1、CentOS的yum命令 2、Ubantu的apt命令 三、systemctl命令 四、软连接 五、日期、时区 1、date命令 2、修改Linux时区为东八区 3、nt…...
Redis高可用之哨兵模式、集群
文章目录 一、Redis哨兵模式1.1 简介1.2 哨兵模式的作用1.3 哨兵结构1.4 故障转移机制(重要)1.5 主节点选举机制 二、部署Redis哨兵模式Step1 修改 Redis 哨兵模式的配置文件(所有节点操作)Step2 实现基于VIP(虚拟IP&a…...
Python数据攻略-DataFrame的创建与基础特性
在数据分析、科学计算或者任何需要处理表格数据的领域,DataFrame都是一个非常重要的工具。就像Excel让处理表格数据变得简单一样,DataFrame也有类似的功能,但更加强大,特别是在处理大量数据时。了解DataFrame不仅能帮你更高效地处理数据,还能让你更容易进行数据清洗、可视…...
【word】从正文开始设置页码
在写报告的时候,会要求有封面和目录,各占一页。正文从第3页开始,页码从正文开始设置 word是新建的 分出三节(封面、目录、正文) 布局--->分割符--->分节符--->下一页 这样就能将word分为3节,分…...
计算机网络 快速了解网络层次、常用协议、常见物理设备。 掌握程序员必备网络基础知识!!!
文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器 2 总结 0 引言 在学习的过程中总是会对IP、TCP、UDP、HTTP、HTTPS、FTP这些常见的协议不熟悉&…...
CUDA 安装
查看自己电脑的cuda版本:见文章 查看CUDA版本 我的是: 他的意思就是说:俺的显卡支持的cuda版本是12.0的(向下兼容) 然后我的项目tensorflow-gpu版本是1.13.2版本的,对应的cuda为10: ÿ…...
Springboot+vue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统,采用M&…...
【简单的留言墙】HTML+CSS+JavaScript
目标:做一个简单的留言墙 1.首先我们用HTML的一些标签,初步构造区域 样式。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>留言墙</title><style>/* ...... */ …...
linux 火狐浏览器报错Firefox is already running, but is not responding
Ubuntu环境下打开Firefox报错: Firefox is already running, but is not responding.-CSDN博客 killall firefox...
Python:操作SQLite数据库简单示例
本文用最简单的示例演示python标准库提供的SQLite数据库进行新增、查询数据的过程。 代码文件app.py # -*- coding: UTF-8 -*- from flask import Flask import sqlite3app Flask(__name__)app.route(/) def hello_world():return Hello World!#创建数据库 app.route(/creat…...
第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DMA,C库和中间件处理等注意事项
视频教程汇总帖:【学以致用,授人以渔】2023视频教程汇总,DSP第12期,ThreadX第8期,BSP驱动第26期,USB实战第5期,GUI实战第3期(2023-10-01) - STM32F429 - 硬汉嵌入式论坛 …...
【NeurIPS 2023】Backdoor对抗攻防论文汇总
NeurIPS 对抗攻防论文 NeurIPS2022|对抗攻防论文整理 - 知乎 NeurIPS 2023 Papers BIRD: Generalizable Backdoor Detection and Removal for Deep Reinforcement Learning https://neurips.cc/virtual/2023/poster/70618 摘要: 后门攻击对深度强化学习&…...
无锡营销型网站制作/国外市场网站推广公司
不知不觉中vs code变得非常强大了,今天小编就分享一下vs code编写java语言。其实除了java语言,还支持很多语言。首先看下vs code欢迎页面支持哪些语言:好家伙,支持的东西还真不少。然后在vs code中插入这些插件。插件会自动配置到…...
wordpress转dz/网络营销产品策略分析
文章目录前言一、Maven引入Druid和数据库驱动二、application.properties中设置数据库访问参数三、编写数据源的配置文件1.数据源1配置文件示例四、关闭数据源自动设置建议其他前言 项目中有访问多个数据源的需求 一、Maven引入Druid和数据库驱动 <!-- Druid 数据连接池依赖…...
网站砍价活动怎么做/广州白云区今天的消息
使用 CSS 的 DevicePixelRatio 媒查询属性/*默认大小*/.photo {background-image: url(image100.png);}/* 如果设备像素大于等于2,则用2倍图 */media screen and (-webkit-min-device-pixel-ratio: 2),screen and (min--moz-device-pixel-ratio: 2) {.photo {backgr…...
学科网站建设方案/兰州网络seo公司
Django体能测试成绩管理平台之xadmin安装 《我为何又开始用Django了(内含安装和配置超详细文档)》《Django体能测试成绩管理平台之环境和服务器准备》安装xadmin pip install -i https://pypi.douban.com/simple xadmin下面都库也需要安装一下 django-c…...
广西网站建设产品优化/网店运营公司
1.wxml 1.时间戳转换成时间格式倒计时: <view stylemargin:10px 20px>倒计时:<text>{{hhh1}}:{{mmm1}}:{{sss1}}</text> </view> 2.倒计时60秒 <view stylemargin:10px 20px>倒计时:<text>{{time}}s<…...
深圳企业网站建设费用/提升网页优化排名
先说重点:Azure Database for MySQL 单一服务器即将停用。Azure Database for MySQL 单一服务器计划在 2024 年 9 月 16 日之前停用。 文章目录从单一服务器迁移到灵活服务器(重要!非常重要!非常重要!)&…...