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

news2025/5/17 4:09:24

背景说明:

每次把教学照片上传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 Image

def 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: 清除 EXIF
    if 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 = {}  # 清除 EXIF
                    img_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 ctypes

def 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 = 3
    except:
        pass  # 忽略错误

# 你的主程序代码
print("程序运行中...")

print("最小化 VS Code 窗口...")
# minimize_vscode()
maximize_vscode()
# time.sleep(2)
time.sleep(1)

最后的效果是

1、VS界面最小化(开始上传图片了)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python零基础入门到高手8.4节: 元组与列表的区别

目录 8.4.1 不可变数据类型 8.4.2 可变数据类型 8.4.3 元组与列表的区别 8.4.4 今天彩票没中奖 8.4.1 不可变数据类型 不可变数据类型是指不可以对该数据类型进行原地修改,即只读的数据类型。迄今为止学过的不可变数据类型有字符串,元组。 在使用[]…

深度学习入门:深度学习(完结)

目录 1、加深网络1.1 向更深的网络出发1.2 进一步提高识别精度1.3 加深层的动机 2、深度学习的小历史2.1 ImageNet2.2 VGG2.3 GoogleNet2.4 ResNet 3、深度学习的高速化3.1 需要努力解决的问题3.2 基于GPU的高速化3.3 分布式学习3.4 运算精度的位数缩减 4、深度学习的应用案例4…

使用Scrapeless Scraping Browser的自动化和网页抓取最佳实践

引言:人工智能时代浏览器自动化和数据收集的新范式 随着生成性人工智能、人工智能代理和数据密集型应用程序的快速崛起,浏览器正在从传统的“用户互动工具”演变为智能系统的“数据执行引擎”。在这一新范式中,许多任务不再依赖单一的API端点…

java数组题(5)

(1): 思路: 1.首先要对数组nums排序,这样两数之间的差距最小。 2.题目要求我们通过最多 k 次递增操作,使数组中某个元素的频数(出现次数)最大化。经过上面的排序,最大数…

物联网无线传感方向专业词汇解释

涡旋电磁波(VEMW):一种具有轨道角动量的电磁波,其特性在于能够在传播过程中携带额外的相位信息,从而增加通信系统的容量和灵活性。波前:波动传播过程中,同一时刻振动相位相同的所有点构成的几何曲面,代表波…

Maven 插件参数注入与Mojo开发详解

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

2024年全国青少年信息素养大赛——算法创意实践挑战赛复赛真题(小学组)——玫瑰花地的面积

2024年全国青少年信息素养大赛——算法创意实践挑战赛复赛真题(小学组)——玫瑰花地的面积 上面试卷可点下方,支持在线编程,在线测评~ 2024年全国信息素养大赛 算法创意实践挑战赛复赛(小学组)_c_少儿编程题库学习中心-嗨信奥 5月17号 全国青…

【补充笔记】修复“NameError: name ‘ZhNormalizer‘ is not defined”的直接方法

#工作记录 一、问题描述 在运行CosyVoice_For_Windows项目时,出现以下报错: File "F:\PythonProjects\CosyVoice_For_Windows\cosyvoice\cli\frontend.py", line 74, in __init__ self.zh_tn_model ZhNormalizer(remove_erhuaFalse, fu…

预训练模型实战手册:用BERT/GPT-2微调实现10倍效率提升,Hugging Face生态下的迁移学习全链路实践

更多AI大模型应用开发学习内容,尽在聚客AI学院。 一. 预训练模型(PTM)核心概念 1.1 什么是预训练模型? 预训练模型(Pre-trained Model, PTM)是在大规模通用数据上预先训练的模型,通过自监督学…

mac docker弹窗提示Docker 启动没有响应

一、原因分析 这台笔记电脑是Mac M3操作系统,安装Docker之后,Docker应用程序一直启动不起来。 二、解决办法 sudo rm /Library/PrivilegedHelperTools/com.docker.vmnetd sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/Pri…

Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)

1.数据准备 1.1.全球数据 下载地址:https://planet.openstreetmap.org/ 1.2.特定区域的数据 下载地址:Geofabrik Download Server 2.安装必要的软件包 2.1.更新系统软件包 sudo apt updatesudo apt upgrade 2.2.安装所需要的软件包 执行下面的命…

sqli—labs第五关——报错注入

一:判断输入类型 首先测试 ?id1 回显You are in... 渐进测试?id1 报错分析: 出现引号提示——“”,可能是字符型 继续测试?id1--(用注释符修复了语法错误) 回显You are in... 说明就是字符型 因为能用注释符…

从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?

大家好!在如今人类对水下环境探索不断深入的时代,从水下考古到珊瑚礁考察,各种任务都离不开水下机器人的助力。但传统水下机器人尺寸较大,在狭窄的水下空间施展不开。今天,我们就来认识一款受海洋小生物启发而设计的仿…

FastAPI系列16:从API文档到TypeScript 前端客户端(SDKs)

从API文档到TypeScript 前端客户端(SDKs) 快速入门生成一个TypeScript 客户端测试生成的TypeScript 客户端 API标签与客户端生成生成带有标签的 TypeScript 客户端 自定义Operation ID使用自定义Operation ID生成TypeScript客户端 在 FastAPI系列15&…

CS016-2-unity ecs

目录 【23】射击改进 【24】僵尸生成器 ​编辑【25】随机行走 【27】射击光效 【23】射击改进 a. 当距离目标太远的时候,要继续移动。而当距离目标到达攻击距离之后,则停止移动。 上图中的if:判断自身和目标的距离是否大于攻击距离&#…

CST软件对OPERACST软件联合仿真汽车无线充电站对人体的影响

上海又收紧了新能源车的免费上牌政策。所以年前一些伙伴和我探讨过买新能源汽车的问题,小伙伴们基本纠结的点是买插电还是纯电?我个人是很抗拒新能源车的,也开过坐过。个人有几个观点: 溢价过高,不保值。实际并不环保…

华为2024年报:鸿蒙生态正在取得历史性突破

华为于2025年03月31日发布2024年年度报告。报告显示,华为经营结果符合预期,实现全球销售收入 8,621 亿元人民币,净利润 626 亿元人民币。2024 年研发投入达到 1,797 亿元人民币,约占全年收入的 20.8%,近十年累计投入的…

LabVIEW的CAN通讯测试程序

该程序是基于 NI LabVIEW 平台开发的 CAN(Controller Area Network,控制器局域网)通讯测试程序。主要功能是对 CAN 通讯过程进行模拟、数据传输与验证,确保 CAN 通讯的正常运行和数据的准确传输。 程序详细说明 接口选择&#xff…

Spring Boot 使用Itext绘制并导出PDF

最终效果 其实可以加分页&#xff0c;但是没有那么精细的需求&#xff0c;所以我最后就没有加&#xff0c;有兴趣的可以尝试下。 项目依赖 <!-- Spring Boot 版本有点老 --> <spring-boot.version>2.3.12.RELEASE</spring-boot.version><!-- 依…

【测试】BUG

目录 1、描述BUG的要素&#xff1a; 2、BUG的级别 3、BUG的状态的流转 4、与开发产⽣争执怎么办&#xff08;⾼频考题&#xff09; 什么是BUG&#xff1f;&#xff1f;&#xff1f; 程序与规格说明之间的不匹配才是错误 1、描述BUG的要素&#xff1a; 问题出现的版本、问…