ChatGPT生成的docx文档压缩Python代码

对DOCX文件中的图片进行缩小处理

这份Python脚本旨在处理给定的DOCX(Word文档)文件中的图片,将其按照指定的比例进行缩小,并生成一个新的压缩版DOCX文件,其中包含经过缩小处理的图片。

代码功能概览:

  1. 导入必要的库

    • zipfile:用于处理ZIP文件
    • PIL中的Image:用于处理图像
    • os:用于与操作系统进行交互(文件路径等)
  2. 定义函数:

    • resize_image(image_path, scale_percent): 缩放单张图片的函数。
    • resize_images_in_docx(input_docx, scale_percent): 处理整个DOCX文件中的图片,包括解压缩、缩放和生成压缩版DOCX。
  3. 代码执行步骤:

    • 读取输入DOCX文件的路径和缩放比例。
    • 解压缩DOCX文件到一个与其同名的文件夹。
    • 遍历文件夹中的所有文件,并对图片文件进行缩小处理。
    • 创建一个新的ZIP文件(压缩版DOCX),其中包含处理过的图片文件和其他文件。

详细解释:

1. 函数 resize_image(image_path, scale_percent)

这个函数用于对单张图片进行缩小处理。接受两个参数:

  • image_path:图片文件路径。
  • scale_percent:缩放比例。

函数内部逻辑:

  • 使用PIL库中的Image.open()打开指定路径的图像文件。
  • 根据给定的缩放比例,计算新的宽度和高度。
  • 使用resize()方法将图像按比例缩小。
  • 返回缩小后的图像对象。

2. 函数 resize_images_in_docx(input_docx, scale_percent)

这个函数是核心部分,用于处理整个DOCX文件中的图片。接受两个参数:

  • input_docx:输入的DOCX文件路径。
  • scale_percent:缩放比例。

函数内部逻辑:

  • 获取输入DOCX文件所在的目录和文件名。
  • 创建一个与输入文件同名的文件夹,并将DOCX文件解压缩到该文件夹中。
  • 遍历文件夹中的所有文件,并对图片文件进行缩小处理。
  • 使用PIL库中的save()方法保存缩小后的图片。
  • 创建一个新的ZIP文件(压缩版DOCX),将处理过的文件压缩到其中。

3. 执行流程

在调用代码时:

  • 指定输入的DOCX文件名和缩放比例。
  • resize_images_in_docx()函数执行以下步骤:
    • 解压缩指定的DOCX文件。
    • 缩小其中的图片文件。
    • 生成一个新的压缩版DOCX文件,其中包含缩小处理过的图片。


import zipfile
from PIL import Image
import os

def resize_image(image_path, scale_percent):
    image = Image.open(image_path)
    width, height = image.size
    new_width = int(width * scale_percent / 100)
    new_height = int(height * scale_percent / 100)
    resized_image = image.resize((new_width, new_height))
    return resized_image

def resize_images_in_docx(input_docx, scale_percent):
    # 获取输入DOCX文件所在目录和文件名
    input_directory = os.path.dirname(input_docx)
    file_name = os.path.splitext(os.path.basename(input_docx))[0]

    # 解压缩 DOCX 文件到其所在目录下同名文件夹
    output_directory = os.path.join(input_directory, file_name)
    with zipfile.ZipFile(input_docx, 'r') as zip_ref:
        zip_ref.extractall(output_directory)

    # 缩小图片并替换原始图片文件
    for root, _, files in os.walk(output_directory):
        for file in files:
            file_path = os.path.join(root, file)
            if os.path.isfile(file_path):
                # 如果是图片文件,则缩小并保存
                if any(file_path.lower().endswith(img_ext) for img_ext in ['.jpg', '.jpeg', '.png', '.gif']):
                    resized_image = resize_image(file_path, scale_percent)
                    resized_image.save(file_path)

    # 创建一个新的 ZIP 文件(将同名文件夹下的所有文件压缩起来)
    zipf = zipfile.ZipFile(f'{file_name}_压缩版.docx', 'w', zipfile.ZIP_DEFLATED)
    for root, _, files in os.walk(output_directory):
        for file in files:
            file_path = os.path.join(root, file)
            arc_path = os.path.relpath(file_path, output_directory)
            zipf.write(file_path, arcname=arc_path)
    zipf.close()
    
# 调用函数
input_docx_file = 'input.docx'  # 输入文件名
scale_percent = 50  # 缩放比例(50%)
resize_images_in_docx(input_docx_file, scale_percent)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.NET如何调用Web Service服务?

我们知道,现在用Web Service提供对外接口的项目其实很少了,现在大部分应用都是b/s端的了,WebApi的优势自然而然就体现出来了,可自定义请求头部信息、可对数据进行缓存、使用json字符串让开发更加灵活。那么Web Service是不是就无用…

高校刮起元宇宙风!3DCAT实时云渲染助力川轻化元校园建设

元宇宙,是一个虚拟的网络世界,它与现实世界相互连接,为人们提供了一个身临其境的数字体验。元宇宙的概念并不新鲜,早在上个世纪就有科幻作家和电影导演对它进行了想象和创造。但是,随着科技的发展,特别是5G…

2023最新大模型实验室解决方案

人工智能是引领未来的新兴战略性技术,是驱动新一轮科技革命和产业变革的重要力量。近年来,人工智能相关技术持续演进,产业化和商业化进程不断提速,正在加快与千行百业深度融合。 大模型实验室架构图 大模型实验室建设内容 一、课…

编程应用实际场景:台球厅怎么样用电脑给客人计时,台球计时收费系统操作教程

一、前言 准确控制顾客在店内游玩的时间,从而控制店内的各项成本,并提升店内的客流量。在顾客享受计时项目的时候,可以同时添加其他食物消费,并将单据合并统一结账。软件中的会员功能可以为客户办理会员可以使用灯控器控灯&#…

GPT-4V 在保险行业的应用

在科技的进步中,人工智能与大数据技术的结合产生了巨大的能量,推动了各行各业的创新与变革。OpenAI,作为全球领先的人工智能研发机构,在今年的9月25日,以一种崭新的方式,升级了其旗下的GPT-4模型。这次的升…

程序员必备的十种排序算法

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

记录 | Google gtest安装

1、下载源码 git clone https://github.com/google/googletest2、源码编译 cd googletestcmake CMaakeLists.txtmake -j32编译成功后会在 googletest/lib 下生成 libgtest.a、libgtest_main.a、libgmock.a、libgmock_main.a 四个静态库。 把生成的静态库和头加入到系统环境…

提升测试工具开发的思考

本文针对测试部效率提升测试工具开发、管理、维护暴露出来的问题的一些思考以及一些个人改进观点。 写在前面 本文提到的效率提升测试工具不是指的部门中固有的自动化测试工具,这里提到的测试工具统一指测试人员在工作之余自主开发用于期望替代重复、繁琐、耗时的手…

Leetcode—709.转换成小写字母【简单】

2023每日刷题&#xff08;五十八&#xff09; Leetcode—709.转换成小写字母 实现代码 char* toLowerCase(char* s) {int len strlen(s);for(int i 0; i < len; i) {if(s[i] > A && s[i] < Z) {s[i] tolower(s[i]);}}return s; }运行结果 之后我会持续更…

竞赛保研 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

如何正确选择打造自己的私域流量知识付费平台,我有才知识付费saas平台告诉你!

在当今数字化时代&#xff0c;私域流量知识付费平台已经成为企业和个人获取收益、扩大影响力的重要渠道。但是&#xff0c;如何正确选择并打造一个属于自己的私域流量知识付费平台呢&#xff1f;我有才知识付费saas平台为你提供一站式解决方案&#xff01; 一、功能全面&#…

【个人经验】Overleaf 在 two-column 格式中 插入图片 插入代码

一、在 two-column 格式中插入图片的方法 1.1 将图片上传至image文件夹 1.2 起始位置处导入包&#xff0c;并将图片上传至image文件夹 % 新增&#xff1a;为导入图片 \usepackage{graphicx} %导入包 \graphicspath{ {image/} } %image为文件夹名&#xff0c;可以在左侧自己…

MetaAI发布Seamless:两秒内实现跨语言同声传译

在当今日益互联的世界中&#xff0c;语言差异常常成为沟通的障碍。MetaAI最新发布的语音翻译大模型Seamless&#xff0c;正是为打破这一障碍而生。Seamless不仅提供流畅、高效的多语言翻译功能&#xff0c;更在保留说话人韵律和风格方面取得突破&#xff0c;是AI同声传译领域的…

harmonyos预览功能报错:[webpack-cli] SyntaxError: Unexpected end of JSON input

harmonyos预览功能报错 在使用DevEco Studio写页面&#xff0c;进行预览的时候报错&#xff1a; [Compile Result] [webpack-cli] SyntaxError: Unexpected end of JSON input [Compile Result] at JSON.parse (<anonymous>) [Compile Result] at updateCached…

CH03_生成实例

Singleton模式 单例模式&#xff08;Singleton&#xff09;&#xff0c;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 类图 说明 Singleton 在Singleton模式中&#xff0c;只有Singleton这一个角色。Singleton角色中有一个返回唯一实例的static方法。该…

使用Visual Studio(VS)创建空项目的Win32桌面应用程序【main函数入口变WinMain】

前言 在Visual Studio中直接新建Windows桌面应用程序会有很多多余的代码生成&#xff0c;本文将提供从空项目创建Win32项目的方法&#xff0c;解决新建空项目直接使用WinMain代码编译报错的问题 例如&#xff1a;LNK2019 &#xff1a;无法解析的外部符号 参考博客&#xff1…

kafka 详细介绍

目录 前言 分布式架构&#xff1a; 消息发布-订阅模型&#xff1a; 持久性存储&#xff1a; 分区和副本&#xff1a; 水平扩展&#xff1a; 高性能&#xff1a; 生态系统&#xff1a; 我的其他博客 前言 Kafka 是由 Apache 软件基金会开发的一种开源流处理平台&#xf…

常见的计算机图片格式

左rgb &#xff08;光源色彩&#xff09; 右cmyk &#xff08;印刷色彩&#xff09; 缺点&#xff0c;不能保存&#xff0c;储存空间太大

【概率方法】MCMC 之 Gibbs 采样

上一篇文章讲到&#xff0c;MCMC 中的 HM 算法&#xff0c;它可以解决拒绝采样效率低的问题&#xff0c;但是实际上&#xff0c;当维度高的时候 HM 算法还是在同时处理多个维度&#xff0c;以两个变量 x [ x , y ] \mathbf{x} [x,y] x[x,y] 来说&#xff0c;也就是同时从联合…

etcd集群部署、备份还原、etcdctl命令行工具

目录 前言什么是etcdetcd名词raft协议-摘抄自《etcd技术内幕》etcd的部署要求二进制部署etcd查看etcd命令帮助创建etcd集群&#xff0c;使用systemd管理&#xff0c;http协议创建etcd集群&#xff0c;使用systemd管理&#xff0c;https协议etcdctl客户端工具的使用为etcdctl创建…