python实现图片压缩和word排版

这篇具有很好参考价值的文章主要介绍了python实现图片压缩和word排版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于每月市场考察拍摄不少照片,需要批量将图片在word中排版,但直接排版,生成的word会很大,需要提前将图片压缩。现编写2个程序,一个实现图片批量压缩,一个实现批量在word排版。

压缩图片

参考
文中使用CV进行压缩,需提前安装OPENCV

pip install opencv-python

具体代码为

  
  
import cv2  
import os  
import numpy as np  
from PIL import Image  
  
  
def pic_compress_png(image_path,new_image_path):  
    '''  
    将图片压缩成png格式  
    :param image_path:  原始文件路径  
    :param new_image_path:  保存文件路径  
    :return:    '''    files = os.listdir(image_path)  # 获取当前路径下的所有文件名字  
    files = np.sort(files)         #按名称排序  
    i = 0  
    for f in files:  
        imgpath = image_path + f   #路径+文件名字  
        img = cv2.imread(imgpath, 1)   #读取图片  
        heigh, width = img.shape[:2]  
        dirpath = new_image_path       #压缩后存储路径  
        file_name, file_extend = os.path.splitext(f)   #将文件名的,名字和后缀进行分割  
        dst = os.path.join(os.path.abspath(dirpath), file_name + '.png')  #文件最终保存的路径及名字(名字和压缩前的名字一致),  
        print(os.path.join(dirpath,"1.png"))  #打印压缩缓存文件路径  
        shrink = cv2.resize(img, (int(heigh*compress_rate), int(width*compress_rate)),  
                                interpolation=cv2.INTER_AREA) #对图像的大小进行resize   4864 *1024  
        cv2.imwrite(os.path.join(dirpath,"1.png"), shrink, [cv2.IMWRITE_PNG_COMPRESSION, 1]) #对图像进行压缩 【cv2.IMWRITE_PNG_COMPRESSION, 1】  
                                                                                            #v2.IMWRITE_PNG_COMPRESSION  压缩品质 0-10 ,数字越小压缩比越小  
        img1 = Image.open(os.path.join(dirpath,"1.png"))    #打开压缩后的缓冲文件  
        img1.save(dst,quality=70)                          #二次压缩,并保存位原始文件的文件名  
        os.remove(os.path.join(dirpath,"1.png"))           #删除缓存文件  
  
  
  
# Press the green button in the gutter to run the script.  
if __name__ == '__main__':  
    image_path = './12/'  # 原始文件路径  
    new_image_path = './11-1/' # 压缩后文件保存路径  
    compress_rate = 0.2  
    pic_compress_png(image_path,new_image_path)  
    print("压缩完成")  
  

在调试过程中会出现# AttributeError: ‘NoneType‘ object has no attribute ‘shape‘
这是没有读取到图片信息,解决参考,存储路径不能有汉字,需要两个双斜杠。

word中图片排版

主要代码文章来源地址https://www.toymoban.com/news/detail-837999.html

# -*- coding:utf-8 -*-  
# @Time   : 2023-11-08  
# @Author : Carl_DJ  
  
'''  
实现功能:  
   图片自动插入Word文档,  
   每行插入4张图片  
'''  
from docx import Document  
from PIL import Image  
import io  
from docx import Document  
from docx.shared import Inches  
from PIL import Image  
import os  
import random  
from docx.enum.section import WD_ORIENT  
from docx.oxml.ns import qn  
  
# 创建一个新的Word文档  
doc = Document()  
  
# 获取图像目录中的所有文件名  
image_dir = "./12"  
images = [f for f in os.listdir(image_dir) if os.path.isfile(os.path.join(image_dir, f))]  
  
# 分成3栏  
section = doc.add_section() # 添加横向页的连续节  
section._sectPr.xpath('./w:cols')[0].set(qn('w:num'),'3')  
  
  
# 将每个图像插入到文档中  
row_num = 0  
col_num = 0  
for i, image_name in enumerate(images):  
    # 打开图像  
    img = Image.open(os.path.join(image_dir, image_name))  
  
    # 将图像转换为BytesIO对象  
    byte_arr = io.BytesIO()  
    img.save(byte_arr, format='PNG')  
    byte_arr.seek(0)  
    inline_shape = doc.add_picture(byte_arr, width=Inches(2), height=Inches(2))  
    # 插入图像  
  
    # 如果当前行已经满了(即插入了4张图片),则开始新的一行  
    # if col_num == 4:  
    #     row_num += 1    #     col_num = 0  
# 保存文档  
doc.save('output.docx')

到了这里,关于python实现图片压缩和word排版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包