当前位置: 首页 > article >正文

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最小化Vscode界面

背景说明:

每次把教学照片上传csdn,都需要打开相册,一张张截图,然后ctrl+V黏贴到CSDN内,我觉得太烦了。

改进思路:

是否可以先把所有照片都上传到csdn,然后再一张张的截图(去掉幼儿部分,打码等,放大学具部分)

以上传蝴蝶图为例

1.手机导出照片都放在00原图里

一张图5MB,直接上传csdn,太大了

需要把图片的高宽和图片大小(MB)都缩小。

2、缩小图片的高宽和大小

'''
相册导出幼儿照片需要上传csdn——缩小图片
deepseek,阿夏
20250515
'''from PIL import Image
import os# 输入和输出文件夹
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20250508GIF测试'
input_folder = path+r"\00原图"  # 原图文件夹
output_folder = path+r"\01小图"  # 缩小后的图片保存文件夹# 如果输出文件夹不存在,则创建
os.makedirs(output_folder, exist_ok=True)# 遍历输入文件夹中的所有图片
for filename in os.listdir(input_folder):if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):input_path = os.path.join(input_folder, filename)output_path = os.path.join(output_folder, filename)try:# 打开图片with Image.open(input_path) as img:# 缩小尺寸到 50%new_width = int(img.width * 0.5)new_height = int(img.height * 0.5)resized_img = img.resize((new_width, new_height), Image.LANCZOS)# 保存图片,质量降低 50%(仅适用于 JPEG)if filename.lower().endswith(('.jpg', '.jpeg')):resized_img.save(output_path, quality=50, optimize=True)else:resized_img.save(output_path)print(f"已处理: {filename} → 新尺寸: {new_width}x{new_height}")except Exception as e:print(f"处理 {filename} 时出错: {e}")print("所有图片处理完成!")

高宽和大小都缩小一半

3、Python模拟鼠标自动上传。

全部批量复制上传图片会出现第一张到最后位置,或者系统检测一次性上传大量图片,会封号。

所以我采用一张张上传的方式(随机间隔秒数)

'''
相册导出幼儿照片需要上传-模拟上传csdn-随机停顿秒数(防止检测)
deepseek,阿夏
20250515
'''import os, time
import random  # 补充导入 random 模块
import pyautogui
import pyperclip
import re
import win32api
import win32con# 初始暂停(用于最小化Python窗口)
time.sleep(5)# 读取文件名称和路径
paths = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250508GIF测试'
path = paths + r"\01小图"  # 缩小后的图片保存文件夹
os.makedirs(path, exist_ok=True)# 读取图片路径列表
img_path = [os.path.join(path, img) for img in os.listdir(path) if img.endswith(".png")]
print(img_path)
print(len(img_path))# 随机秒数函数
def a():t = random.randint(1, 3)  # 生成 1~3 秒的随机数return t# 遍历所有图片并模拟上传
for i in range(len(img_path)):# 随机停顿(每次调用 a() 生成新的随机值)t = a()  # 保存返回值到变量 t# 点击图像按钮pyautogui.moveTo(1090, 183)pyautogui.click()time.sleep(t)  # 使用随机停顿# 点击选择图片按钮pyautogui.moveTo(1574, 524)pyautogui.click()time.sleep(t + 3)  # 基础随机秒数 + 额外固定秒数# 输入图片名称(从剪贴板粘贴)name = img_path[i]pyperclip.copy(name)pyautogui.hotkey('ctrl', 'v')time.sleep(t + 1)# 确认上传(两次回车,每次间隔随机)pyautogui.press('enter')time.sleep(t + 5)pyautogui.press('enter')time.sleep(t + 5)

用了随机间隔秒数,防止被检测出自动化风险

上传过程视频

20250515随机秒数自动上传CSDN照片

虽然时间很长,但是确保了能够不同间隔时长。

再处理真实照片时,我发现,虽然我把一些照片左转或右转了,但是缩小后,它还是原图没有旋转的样子

问了deepseek,

一、清除exif信息,缩小图片,手动旋转


'''
相册导出幼儿照片需要上传csdn——清除图片中的exif+缩小图片—+手动旋转照片
deepseek,阿夏
20250515
'''
import os
from PIL import Imagedef remove_exif_and_resize(input_folder, output_folder_exif, output_folder_resized):"""批量清除 EXIF 并缩小图片尺寸至 50%:param input_folder: 原始图片文件夹路径:param output_folder_exif: 清除 EXIF 后的图片保存路径:param output_folder_resized: 缩小后的图片保存路径"""# Step 1: 清除 EXIFif not os.path.exists(output_folder_exif):os.makedirs(output_folder_exif)print("=" * 50)print("🚀 开始清除 EXIF 数据...")print("=" * 50)for filename in os.listdir(input_folder):if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.tiff', '.bmp', '.gif')):input_path = os.path.join(input_folder, filename)output_path_exif = os.path.join(output_folder_exif, filename)try:with Image.open(input_path) as img:img_copy = img.copy()img_copy.info = {}  # 清除 EXIFimg_copy.save(output_path_exif)print(f"✅ EXIF 已清除: {filename}")except Exception as e:print(f"❌ 处理 {filename} 时出错 (EXIF): {e}")# Step 2: 缩小图片尺寸至 50%if not os.path.exists(output_folder_resized):os.makedirs(output_folder_resized)print("\n" + "=" * 50)print("🖼️ 开始缩小图片尺寸...")print("=" * 50)for filename in os.listdir(output_folder_exif):if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):input_path = os.path.join(output_folder_exif, filename)output_path_resized = os.path.join(output_folder_resized, filename)try:with Image.open(input_path) as img:# 缩小至 50%new_width = int(img.width * 0.5)new_height = int(img.height * 0.5)resized_img = img.resize((new_width, new_height), Image.LANCZOS)# 如果是 JPEG,降低质量至 50%if filename.lower().endswith(('.jpg', '.jpeg')):resized_img.save(output_path_resized, quality=50, optimize=True)else:resized_img.save(output_path_resized)print(f"✅ 已缩小: {filename} → {new_width}x{new_height}")except Exception as e:print(f"❌ 处理 {filename} 时出错 (缩放): {e}")print("\n" + "=" * 50)print("🎉 所有图片处理完成!")print("=" * 50)if __name__ == "__main__":# 设置路径path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250515门牌号'input_folder = os.path.join(path, "00原图")          # 原始图片output_folder_exif = os.path.join(path, "01exif")    # 清除 EXIF 后的图片output_folder_resized = os.path.join(path, "02小图")  # 缩小后的图片# 执行处理remove_exif_and_resize(input_folder, output_folder_exif, output_folder_resized)

小图照片(需要左转)

手动全选,向左转

自动上传

'''
相册导出幼儿照片需要上传-模拟上传csdn-随机停顿秒数(防止检测)
deepseek,阿夏
20250515
'''import os, time
import random  # 补充导入 random 模块
import pyautogui
import pyperclip
import re
import win32api
import win32con# 初始暂停(用于最小化Python窗口)time.sleep(5)# 读取文件名称和路径
paths = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250515门牌号'
path = paths + r"\01小图"  # 缩小后的图片保存文件夹
os.makedirs(path, exist_ok=True)# 读取图片路径列表
img_path = [os.path.join(path, img) for img in os.listdir(path) if img.endswith(".jpg")]
print(img_path)
print(len(img_path))# 随机秒数函数
def a():t = random.randint(1, 3)  # 生成 1~3 秒的随机数return t# 遍历所有图片并模拟上传
for i in range(len(img_path)):# 随机停顿(每次调用 a() 生成新的随机值)t = a()  # 保存返回值到变量 t# 点击图像按钮pyautogui.moveTo(1090, 183)pyautogui.click()time.sleep(t)  # 使用随机停顿# 点击选择图片按钮pyautogui.moveTo(1574, 524)pyautogui.click()time.sleep(t + 3)  # 基础随机秒数 + 额外固定秒数# 输入图片名称(从剪贴板粘贴)name = img_path[i]pyperclip.copy(name)pyautogui.hotkey('ctrl', 'v')time.sleep(t + 1)# 确认上传(两次回车,每次间隔随机)pyautogui.press('enter')time.sleep(t + 5)pyautogui.press('enter')time.sleep(t + 5)

这下可以旋转图片后,上传后的图片也默认我需要的方向(拍的时候变成竖版的照片也变成横板进行显示),

我觉得代码可以再优化,现在CSDN界面一直开着,我也不知道VS程序是否结束。

所以最开始,最小化VS界面,生成到最后,最大化VS界面,这样就知道程序结束了,

'''
相册导出幼儿照片需要上传-模拟上传csdn-随机停顿秒数(防止检测),最大化、最小化界面
deepseek,阿夏
20250515
'''import os, time
import random  # 补充导入 random 模块
import pyautogui
import pyperclip
import re
import win32api
import win32con# 初始暂停(用于最小化Python窗口)import sys
import ctypesdef minimize_vscode():try:# Windows 系统if sys.platform == 'win32':hwnd = ctypes.windll.user32.GetForegroundWindow()ctypes.windll.user32.ShowWindow(hwnd, 6)  # SW_MINIMIZE = 6# 其他系统可能需要不同的方法except:pass  # 忽略错误
# time.sleep(1)
# 你的主程序代码
print("程序运行中...")print("最小化 VS Code 窗口...")
minimize_vscode()
time.sleep(1)  # 等待 3 秒# 读取文件名称和路径
paths = r'C:\Users\jg2yXRZ\OneDrive\桌面\拼图'
path = paths + r"\02小图2"  # 缩小后的图片保存文件夹
os.makedirs(path, exist_ok=True)# 读取图片路径列表
img_path = [os.path.join(path, img) for img in os.listdir(path) if img.endswith(".jpg")]
print(img_path)
print(len(img_path))# 随机秒数函数
def a():t = random.randint(1, 2)  # 生成 1~3 秒的随机数return t# 遍历所有图片并模拟上传
for i in range(len(img_path)):# 随机停顿(每次调用 a() 生成新的随机值)t = a()  # 保存返回值到变量 t# 点击图像按钮pyautogui.moveTo(1090, 183)pyautogui.click()time.sleep(t)  # 使用随机停顿# 点击选择图片按钮pyautogui.moveTo(1574, 524)pyautogui.click()time.sleep(t + 3)  # 基础随机秒数 + 额外固定秒数# 输入图片名称(从剪贴板粘贴)name = img_path[i]pyperclip.copy(name)pyautogui.hotkey('ctrl', 'v')time.sleep(t + 1)# 确认上传(两次回车,每次间隔随机)pyautogui.press('enter')time.sleep(t)pyautogui.press('enter')time.sleep(t + 5)# 最大化界面(把CSDN界面缩小)
def maximize_vscode():"""最大化当前 VS Code 窗口"""try:if sys.platform == 'win32':  # Windows 系统hwnd = ctypes.windll.user32.GetForegroundWindow()ctypes.windll.user32.ShowWindow(hwnd, 6)  # SW_MAXIMIZE = 3except:pass  # 忽略错误# 你的主程序代码
print("程序运行中...")print("最小化 VS Code 窗口...")
# minimize_vscode()
maximize_vscode()
# time.sleep(2)
time.sleep(1)

最后的效果是

1、VScode界面最小化,显示CSDN界面(开始上传图片了)

2、CDSN界面最小化,显示桌面(证明结束了)

(还不能放大VScode)

相关文章:

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最小化Vscode界面

背景说明: 每次把教学照片上传csdn,都需要打开相册,一张张截图,然后ctrlV黏贴到CSDN内,我觉得太烦了。 改进思路: 是否可以先把所有照片都上传到csdn,然后再一张张的截图(去掉幼儿…...

Java-List集合类全面解析

Java-List集合类全面解析 前言一、List接口概述与核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常见实现类对比 二、ArrayList源码剖析与应用场景2.1 内部结构与初始化2.2 动态扩容机制2.3 性能特点与最佳实践 三、LinkedList 源码剖析与应用场景3.1 内部结构与节…...

uniapp-商城-60-后台 新增商品(属性的选中和页面显示,数组join 的使用)

前面添加了属性,添加属性的子级项目。也分析了如何回显,但是在添加新的商品的时,我们也同样需要进行选择,还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…...

[c语言日寄]数据结构:栈

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...

WEB安全--Java安全--LazyMap_CC1利用链

一、前言 该篇是基于WEB安全--Java安全--CC1利用链-CSDN博客的补充,上篇文章利用的是TransformedMap类,而CC链的原作者是利用的LazyMap类作为介质进行的触发。 所以本文将分析国外原作者在ysoserial commonscollections1中给出的CC1利用链。 二、回顾梳…...

【杂谈】-AI 重塑体育营销:从内容管理到创意释放的全面变革

AI 重塑体育营销:从内容管理到创意释放的全面变革 文章目录 AI 重塑体育营销:从内容管理到创意释放的全面变革1、加速从采集到推广的内容生命周期2、个性化粉丝体验3、以比赛速度分发体育内容4、让创作者在人工智能(AI)时代自由创…...

黑马k8s(六)

1.Deployment(Pod控制器) Selector runnginx 标签选择:会找pod打的标签 执行删除之后,pod也会删除,Terminating正在删除 如果想要访问其中的一个pod借助:IP地址端口号访问 假设在某一个瞬间,…...

【数据结构】二分查找(返回插入点)5.14

二分查找基础版 package 二分查找; public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub } public static int binarySearchBasic(int[] a,int target) { int i0,ja.length-1; //设置指针初值 while…...

如何设计一个二级缓存(Redis+Caffeine)架构?Redis 6.0多线程模型如何工作?

一、二级缓存(RedisCaffeine)架构设计 1. 设计目标 通过「本地缓存(Caffeine) 分布式缓存(Redis)」的分层结构,实现: 低延迟:热点数据本地缓存(内存级访问…...

Java:logback-classic与slf4j版本对应关系

1、结论 logback-classic-1.2.x及以下版本,则适配的slf4j 1.0.x - 1.7.x logback-classic-1.3.x及以上版本,则适配的slf4j 1.8.x及以上 2、原因分析 (1)logback-classic-1.2.x及以下版本 通过org.slf4j.impl.StaticLoggerBinder初…...

【OpenGL学习】(一)创建窗口

文章目录 【OpenGL学习】(一)创建窗口 【OpenGL学习】(一)创建窗口 GLFW OpenGL 本身只是一套图形渲染 API,不提供窗口创建、上下文管理或输入处理的功能。 GLFW 是一个支持创建窗口、处理键盘鼠标输入和管理 OpenGL…...

AI大语言模型评测体系演进与未来展望

随着人工智能技术的飞速发展,大语言模型(LLMs)已成为自然语言处理领域的核心研究方向。2025年最新行业报告显示,当前主流模型的评测体系已从单一任务评估转向多维度、全链路的能力剖析。例如,《全球首个大语言模型意识水平”识商”白盒DIKWP测评报告》通过数据、信息、知识…...

微服务项目->在线oj系统(Java版 - 5)

相信自己,终会成功 微服务代码: lyyy-oj: 微服务 目录 C端代码 用户题目接口 修改后用户提交代码(应用版) 用户提交题目判题结果 代码沙箱 1. 代码沙箱的核心功能 2. 常见的代码沙箱实现方式 3. 代码沙箱的关键问题与解决方案 4. 你的代码如何与沙箱交互? …...

disryptor和rabbitmq

disryptor和rabbitmq Disruptor 是什么? Disruptor 是一个由 LMAX Exchange 开发的高性能、低延迟的进程内(in-process)并发编程框架/库。它最初是为了解决金融交易系统中高吞吐量、低延迟消息传递的需求而设计的。 核心特点和设计理念&am…...

HTTP与HTTPS协议的核心区别

HTTP与HTTPS协议的核心区别 数据传输安全性 HTTP采用明文传输,数据易被窃听或篡改(如登录密码、支付信息),而HTTPS通过SSL/TLS协议对传输内容加密,确保数据完整性并防止中间人攻击。例如,HTTPS会生成对称加…...

Flink 并行度的设置

在 Apache Flink 中,并行度(Parallelism) 是控制任务并发执行的核心参数之一。Flink 提供了 多个层级设置并行度的方式,优先级从高到低如下: 🧩 一、Flink 并行度的四个设置层级 层级描述设置方式Operator…...

【微服务】SpringBoot + Docker 实现微服务容器多节点负载均衡详解

目录 一、前言 二、前置准备 2.1 基本环境 2.2 准备一个springboot工程 2.2.1 准备几个测试接口 2.3 准备Dockerfile文件 2.4 打包上传到服务器 三、制作微服务镜像与运行服务镜像 3.1 拷贝Dockerfile文件到服务器 3.2 制作服务镜像 3.3 启动镜像服务 3.4 访问一下服…...

get请求使用数组进行传参

get请求使用数组进行传参,无需添加中括号 mvc接口要添加参数名,使用array承接。不能用list, 否则会报错 这里是用apifox模拟前端调用。 前端调用代码 // 根据项目ID和角色ID查询相关审批人 export function findRelativeApproverByProjectIdAndRoleId(roleIds, p…...

20. 自动化测试框架开发之Excel配置文件的IO开发

20.自动化测试框架开发之Excel配置文件的IO开发 一、核心架构解析 1.1 类继承体系 class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑1.2 版本依赖说明 # 必须安装1.2.0版本(支持xlsx格式&#…...

【MySQL成神之路】MySQL常用语法总结

目录 MySQL 语法总结 数据库操作 表操作 数据操作 查询语句 索引操作 约束 事务控制 视图操作 存储过程和函数 触发器 用户和权限管理 数据库操作 创建数据库: CREATE DATABASE database_name; 选择数据库: USE database_name; 删除数…...

Linux动静态库制作与原理

什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统…...

确保高质量的音视频通话,如何最大化利用视频带宽

在当今数字时代,音视频内容随处可见,对于开发者来说,理解互联网带宽变得至关重要。我们的在线体验质量,无论是观看高清电影还是演唱会直播,都严重依赖于互联网带宽的概念。在本文中,我们将揭示视频带宽的复…...

ffmpeg 把一个视频复制3次

1. 起因, 目的: 前面我写过,使用 python 把一个视频复制3次但是速度太慢了,我想试试看能否改进。而且我想换一种新的视频处理思路,并试试看速度如何。 2. 先看效果 效果就是能行,而且速度也快。 3. 过程: 代码 1…...

GPT/Claude3国内免费镜像站更新 亲测可用

无限次使用:无限制的提问次数,不设上限,随心所欲。 无需魔法、稳定流畅:操作简便,无需复杂设置,即可享受稳定流畅的服务。 手机和电脑均能用:轻松适配手机和电脑,使用体验更佳。 …...

AI自动化工作流:开启当下智能生产力的价值

举手之言:AI自动化工作流创造了什么呢? AI自动化工作流 ,顾名思义,是将人工智能(AI)技术与自动化流程相结合,通过智能化的方式来完成复杂的任务和操作。简单来说,它就是利用AI的强大…...

stm32——EXTI外部中断

NVIC优先级分组 抢占优先级 可以进行中断嵌套的优先级,即可以不等上一个中断执行完成就进入下一个中断 响应优先级 决定中断发生的顺序,但不可嵌套 程序实现 对射式红外传感计次 #include "stm32f10x.h" // Device head…...

Python:操作Excel按行写入

Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…...

Redis进阶知识

Redis 1.事务2. 主从复制2.1 如何启动多个Redis服务器2.2 监控主从节点的状态2.3 断开主从复制关系2.4 额外注意2.5拓扑结构2.6 复制过程2.6.1 数据同步 3.哨兵选举原理注意事项 4.集群4.1 数据分片算法4.2 故障检测 5. 缓存5.1 缓存问题 6. 分布式锁 1.事务 Redis的事务只能保…...

Python机器学习笔记(二十三 模型评估与改进-网格搜索)

上一次学习了评估一个模型的泛化能力,现在继续学习通过调参来提升模型的泛化性能。scikit-learn中许多算法的参数设置,在尝试调参之前,重要的是要理解参数的含义。找到一个模型的重要参数(提供最佳泛化性能的参数)的取值是一项棘手的任务,但对于几乎所有模型和数据集来说…...

12.vue整合springboot首页显示数据库表-实现按钮:【添加修改删除查询】

vue整合springboot首页显示数据库表:【添加修改删除查询】 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系…...