首页 > 编程语言 >python - 批量压缩word图片

python - 批量压缩word图片

时间:2023-12-19 21:36:35浏览次数:32  
标签:file word target 批量 python image rel path size

主要分为3个步骤,提取图片,压缩图片,替换图片,需要用到python-docx和pillow

1. 提取图片

import docx

docName = "test.docx"
imageIndex = 0

document = docx.Document(docName)
for rel in document.part.rels.values():
    if "image" in rel.reltype and hasattr(rel, "target_part"):
        image_data = rel.target_part.blob
        with open(f"{docName}-{imageIndex}.jpg", "wb") as f:
            f.write(image_data)
        imageIndex += 1

2. 压缩图片

from PIL import Image


def compress_image(file_path, target_size=64, step=10, quality=80):
    o_size = os.path.getsize(file_path) / 1024
    while o_size >= target_size:
        im = Image.open(file_path)
        im.save(file_path, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = os.path.getsize(file_path) / 1024


for i in range(imageIndex):
    compress_image(f"{docName}-{i}.jpg")

3. 替换图片

import os

imageIndex = 0
for rel in document.part.rels.values():
    if "image" in rel.reltype and hasattr(rel, "target_part"):
        with open(f"{docName}-{imageIndex}.jpg", "rb") as f:
            image_data = f.read()
        rel.target_part._blob = image_data
        os.remove(f"{docName}-{imageIndex}.jpg")
        imageIndex += 1
document.save("test1.docx")

4. 完整代码

import docx
import os
from PIL import Image


def compress_image(file_path, target_size=64, step=10, quality=80):
    o_size = os.path.getsize(file_path) / 1024
    while o_size >= target_size:
        im = Image.open(file_path)
        im.save(file_path, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = os.path.getsize(file_path) / 1024


imageIndex = 0
docName = "test.docx"
document = docx.Document(docName)
for rel in document.part.rels.values():
    if "image" in rel.reltype and hasattr(rel, "target_part"):
        image_data = rel.target_part.blob
        with open("tmp.jpg", "wb") as f:
            f.write(image_data)

        compress_image("tmp.jpg")

        with open("tmp.jpg", "rb") as f:
            image_data = f.read()
        rel.target_part._blob = image_data

        imageIndex += 1
os.remove("tmp.jpg")
document.save("test1.docx")

标签:file,word,target,批量,python,image,rel,path,size
From: https://www.cnblogs.com/wstong2052/p/17914734.html

相关文章

  • 决策树算法思想及其Python实现
    决策树算法是一种在机器学习和数据挖掘领域广泛应用的强大工具,它模拟人类决策过程,通过对数据集进行逐步的分析和判定,最终生成一颗树状结构,每个节点代表一个决策或一个特征。决策树的核心思想是通过一系列问题将数据集划分成不同的类别或值,从而实现对未知数据的预测和分类。这一算......
  • Python的Requests库与网页爬取
    requests库的几种方法 其他几个方法内部实际都调用了requests.request()方法 Response对象的属性 首先要使用r.status_code判断连接是否成功。 Request库的异常  爬取网页的通用代码  需要处理异常,使爬取网页变得更有效、可靠、稳定。  HTTP  无......
  • python中赋值语句教程
    1.赋值语句的特点赋值语句创建对象的引用:赋值语句总是创建对象的引用,而不是复制对象。因此,Python中的变量更像是指针,而不是数据储存区域。变量在首次赋值时会被创建:因此不需要提前声明变量。变量在引用前必须先赋值:如果引用未赋值的变量会报错2.赋值语句的形式(1.普通形......
  • python进行二进制数据处理的方法
    方法一:使用struct模块,特点轻量化,简单易用。缺点就是可读性不是太好,使用小数据临时使用一下,对于大量的数据解析,写起来比较繁琐,显得有点力不从心。importstructdata=b'\x92\xaa\xbb\xcc\x11\x22\x33\x44'a,b,c,d,e=struct.unpack(">BBBBI",data)print("a=0x%xb=0x%xc=......
  • python中导入模块/包的几种方式
    一、模块的导入方式模块就是.py类型的Python文件导入时不需要.py后缀,直接导入文件名即可1.利用import直接导入:语法:importmodule_name使用方式:module_name.class_name或者module.func_name2.利用import导入模块并设置一个别名语法:importmodule_nameasXXX使用方式:XXX.cl......
  • Python字典中 fromkeys()方法的坑
    fromkeys()方法类似于列表的浅拷贝首先用该方法创建一个字典dict_=dict.fromkeys(('a','b','c','d'),[])print(dict_)输出:{'a':[],'b':[],'c':[],'d':[]}当我向某个key添加value时,问题出现了dict_['b......
  • Python图像处理自动化:批量去除图片背景
    一、前言现在有较多的图片需要处理,需要将每张图片都去除背景。通常,我们使用像Photoshop这样的专业抠图软件或者在线抠图网页来处理,但这些方法通常只能一张一张地手动操作,效率低下。接下来将介绍使用Python批量处理,一键去除文件夹中所有图片的背景,从而大大提高工作效率。二、Python......
  • python代码自动打开浏览器并输入相应的内容后搜索
    需求描述:使用python代码实现自动打开浏览器,之后进入百度,输入‘小姐姐’,查看结果1.安装selenium,直接安装4.0版本。pipinstallselenium==4.0看到successful字样就安装成功了2.代码实现#@File:自动化测试.py#author:蜜蜂#Time:2023/12/1917:06importtimefromseleniumimpo......
  • opencv图像处理机器学习真实项目教程(python实现)1计算机视觉简介
    1计算机视觉简介欢迎来到计算机视觉的世界。本书将带您踏上令人兴奋且快速发展的计算机视觉和图像处理世界的旅程。本书首先介绍计算机视觉和OpenCV库。然后,我们将继续介绍本课程的基本库和所需的环境设置。主要内容:计算机视觉简介计算机视觉的应用PythonOpenCVOpenCV......
  • Python计算两图相似性-直方图
    1、简介利用直方图计算图片的相似度时,是按照颜色的全局分布情况来看待的,无法对局部的色彩进行分析,同一张图片如果转化成为灰度图时,在计算其直方图时差距就更大了。对于灰度图可以将图片进行等分,然后在计算图片的相似度。 2、代码fromPILimportImage#将图片转化为RG......