python自动化操作:批量处理照片尺寸并输出到word文档中【第14篇—python-照片尺寸批量处理输出】

文章目录

  • 一.背景
  • 二.需求
  • 三.实现源码
    • 3.1 项目结构
    • 3.2 源码
    • 3.3 核心调节照片大小
  • 四.代码解释
  • 五.实现效果
  • 六.心得总结

一.背景

在当今数字化时代,照片处理和文档编辑是许多领域中不可或缺的任务。从个人创作到企业文档,人们经常需要快速而有效地处理大量照片,并将它们整合到文档中。Python作为一种强大而灵活的编程语言,为自动化这一过程提供了理想的平台。

这篇文章将探讨如何使用Python自动化操作,通过批量处理照片尺寸并将它们输出到Word文档中,实现高效而简便的工作流程。我们将使用PIL库(Python Imaging Library)来处理图像,并结合python-docx库创建和编辑Word文档。

背景中的任务涉及从一个指定文件夹中获取照片,将它们调整到预定的尺寸,并将结果整合到一个规范的Word文档中。这种自动化方法不仅提高了工作效率,还确保了一致性和标准化的输出。

通过掌握这些技能,读者将能够轻松适应各种场景,从个人博客到企业报告,都能够灵活地处理和呈现图像。这种自动化方法不仅适用于专业开发者,也为对Python和图像处理感兴趣的初学者提供了一个学习和实践的良好起点。

二.需求

当今社交媒体、博客和企业报告等领域中,图像在信息传递和内容呈现中扮演着至关重要的角色。随着图像数量的不断增加,人们需要一种快速而有效的方式来处理和整合这些图像,以便更好地展示信息。

本项目的背景是在处理大量照片并将其嵌入到文档中时,遇到了手动操作的不便和效率问题。手动调整每张照片的尺寸并逐一插入到文档中不仅费时且容易出错,特别是在需要频繁更新文档内容时。为了解决这个问题,我们决定创建一个自动化脚本,能够批量处理照片并将它们按照预定的尺寸嵌入到Word文档中。

该脚本的设计目标是提高处理效率,确保输出的文档具有一致的格式和布局,以满足不同场景下对图像处理和文档编辑的需求。通过采用Python编程语言和相关库,我们可以轻松实现这一目标,并且使得这一过程对于非专业用户也更加友好。

这个自动化脚本旨在为那些需要在文档中快速整合照片的用户提供便利。通过简化照片处理流程,用户可以专注于内容创作而不必过多关注繁琐的图像处理步骤。

三.实现源码

3.1 项目结构

在这里插入图片描述

3.2 源码

import os
from docx import Document
from docx.shared import Inches
from PIL import Image# 调整照片大小的函数
def resize_image(image_path, target_width):img = Image.open(image_path)width_percent = (target_width / float(img.size[0]))height_size = int((float(img.size[1]) * float(width_percent)))resized_img = img.resize((target_width, height_size), Image.LANCZOS)return resized_img# 存储照片的文件夹路径
photos_folder = "image"  # 将 "path_to_photos_folder" 替换为你存储照片的文件夹路径# 创建一个新的Word文档
doc = Document()# 依次处理照片
photo_count = 0
photos_per_page = 3
page_width = 6.5  # Word页面宽度,单位为Inchesfor root, _, files in os.walk(photos_folder):for filename in files:if filename.lower().endswith(('.png', '.jpg', '.jpeg')):photo_count += 1photo_path = os.path.join(root, filename)# 调整照片大小target_width = int(page_width / photos_per_page * 1440)  # 1440是Word中1英寸对应的像素数resized_img = resize_image(photo_path, target_width)# 将照片添加到Word文档中if photo_count % photos_per_page == 1:# 添加新页面doc.add_page_break()# 添加照片到当前页面doc.add_picture(photo_path, width=Inches(page_width / photos_per_page))# 保存调整大小后的照片resized_photo_path = os.path.splitext(photo_path)[0] + "_resized.jpg"resized_img.save(resized_photo_path)# 保存Word文档
doc.save("output.docx")

3.3 核心调节照片大小

调整照片大小的核心逻辑在resize_image函数中。以下是该函数的代码:

# 调整照片大小的函数
def resize_image(image_path, target_width):img = Image.open(image_path)width_percent = (target_width / float(img.size[0]))height_size = int((float(img.size[1]) * float(width_percent)))resized_img = img.resize((target_width, height_size), Image.LANCZOS)return resized_img

这个函数接受两个参数:image_path表示图像文件的路径,target_width表示目标宽度。在函数内部,它使用PIL库的Image.open打开图像,然后计算调整后的高度,最后使用img.resize进行调整,返回调整后的图像对象resized_img

在主循环中,通过调用resize_image函数将每张照片调整为指定的宽度:

# 调整照片大小
target_width = int(page_width / photos_per_page * 1440)  # 1440是Word中1英寸对应的像素数
resized_img = resize_image(photo_path, target_width)

这里,target_width被计算为使得每页显示的照片宽度满足指定的Word页面宽度。然后,调用resize_image(photo_path, target_width)将当前照片调整为目标宽度。

这个调整大小的过程确保了每张照片都符合指定的宽度,以适应Word文档的布局。

四.代码解释

你提供的代码主要用于批量处理照片,调整它们的大小,并将它们插入到一个Word文档中。下面是对代码的解释:

import os
from docx import Document
from docx.shared import Inches
from PIL import Image# 调整照片大小的函数
def resize_image(image_path, target_width):img = Image.open(image_path)width_percent = (target_width / float(img.size[0]))height_size = int((float(img.size[1]) * float(width_percent)))resized_img = img.resize((target_width, height_size), Image.LANCZOS)return resized_img# 存储照片的文件夹路径
photos_folder = "image"  # 将 "path_to_photos_folder" 替换为你存储照片的文件夹路径# 创建一个新的Word文档
doc = Document()# 依次处理照片
photo_count = 0
photos_per_page = 3
page_width = 6.5  # Word页面宽度,单位为Inchesfor root, _, files in os.walk(photos_folder):for filename in files:if filename.lower().endswith(('.png', '.jpg', '.jpeg')):photo_count += 1photo_path = os.path.join(root, filename)# 调整照片大小target_width = int(page_width / photos_per_page * 1440)  # 1440是Word中1英寸对应的像素数resized_img = resize_image(photo_path, target_width)# 将照片添加到Word文档中if photo_count % photos_per_page == 1:# 添加新页面doc.add_page_break()# 添加照片到当前页面doc.add_picture(photo_path, width=Inches(page_width / photos_per_page))# 保存调整大小后的照片resized_photo_path = os.path.splitext(photo_path)[0] + "_resized.jpg"resized_img.save(resized_photo_path)# 保存Word文档
doc.save("output.docx")

解释:

  1. resize_image函数:这个函数使用PIL库打开图像,然后按照给定的目标宽度调整图像的大小。它返回调整大小后的图像对象。

  2. 存储照片的文件夹路径:photos_folder变量包含了存储照片的文件夹路径,你需要将其替换为实际存储照片的文件夹路径。

  3. 创建一个新的Word文档:doc = Document()创建了一个空白的Word文档对象。

  4. 处理照片:通过遍历指定文件夹中的照片文件,对每张照片进行处理。

  5. resize_image函数用于调整照片大小,然后将照片插入到Word文档中。每插入photos_per_page张照片后,添加一个新页面。

  6. 调整大小后的照片保存在与原始照片相同的路径下,文件名以"_resized"结尾。

  7. 最终,Word文档保存为"output.docx"。

五.实现效果

image文件夹初始照片:
在这里插入图片描述
运行py文件:
在这里插入图片描述
image文件夹处理后照片:
在这里插入图片描述
word文档输出:
在这里插入图片描述

六.心得总结

这篇文章介绍了如何利用Python在数字化时代处理照片和文档编辑的需求中实现自动化操作。通过使用Python编程语言以及PIL库和python-docx库,作者设计了一个自动化脚本,能够批量处理照片并将它们按照预定的尺寸嵌入到Word文档中,提高了工作效率。

文章从项目的背景和需求出发,详细解释了为什么需要这样的自动化脚本以及它的应用场景。通过提供实现源码,读者可以了解到整个项目的结构和核心实现,包括调整照片大小的函数和主要的代码逻辑。

在实现源码的部分,文章通过解释核心调节照片大小的函数,展示了如何使用PIL库调整每张照片的大小,以适应Word文档的布局。此外,文章还对代码进行了解释,详细说明了每个部分的作用和实现细节。

最后,文章展示了代码的实际效果,通过图片展示了处理前后的照片对比和生成的Word文档。这样的实际效果展示使读者能够更直观地理解脚本的运行结果。

总的来说,这篇文章清晰地介绍了整个自动化项目的设计思路、实现细节和实际效果,为读者提供了一个学习和实践图像处理和文档编辑的良好起点。

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

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

相关文章

Linux IO多路转接之epoll

文章目录 一、epoll初识 二、epoll的相关系统调用 1.epoll_create 2.epoll_ctl 3.epoll_wait 三、epoll工作原理 四、epoll的工作方式 本文主要介绍了epoll内部工作机制,如何达到高性能的多路转接。技术有限,如有错误请指正。参考文献:…

【Redis】Redis 的学习教程(十三)Redis 各场景

由于Redis 支持比较丰富的数据结构&#xff0c;因此他能实现的功能并不仅限于缓存&#xff0c;而是可以运用到各种业务场景中&#xff0c;开发出既简洁、又高效的系统 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

第三节:提供者、消费者、Eureka

一、 提供者 消费者&#xff08;就是个说法、定义&#xff0c;以防别人叭叭时听不懂&#xff09; 服务提供者&#xff1a;业务中被其他微服务调用的服务。&#xff08;提供接口给其他服务调用&#xff09;服务消费者&#xff1a;业务中调用其他微服务的服务。&#xff08;调用…

QThread之moveToThread用法

简介 使用moveToThread函数的流程如下&#xff1a; 1、创建一个类继承自QObject类或其子类&#xff0c;并在其中定义所要执行的多个任务&#xff0c;执行多个任务就要定义相应的信号。 2、任务通过moveToThread指定所要执行的线程。 3、线程通过start启动 4、通过信号与槽机制…

【AI绘画】万字长文——(超详细)ControlNet的详细介绍使用Stable Diffusion的艺术二维码完全生成攻略

目录 前言一、名词解释1-1、Stable Diffusion介绍1-2、ControlNet介绍1-2-1、ControlNet介绍&工作原理1-2-2、ControlNet控制方法介绍 1-3、案例分析1-3-1、室内装修设计1-3-2、品牌创意海报 1-4、stable-diffusion-webui 的参数解释 二、生成方法2-1、图像到图像2-1-1、二…

Python使用netmiko配置华为交换机

一、netmiko介绍 1.更适合网络设备的自动化运维模块。 二、场景 1、批量查询 2、批量配置变更、备份 三、项目地址 GitHub - ktbyers/netmiko: Multi-vendor library to simplify Paramiko SSH connections to network devices 三、使用步骤 1.安装netmiko pip install ne…

D6208单片双向马达驱动电路国产芯片,工作电源电压范围宽(4.5V~15.0V),内设保护二极管采用SOP8封装

D6208 是一块单片双向马达驱动电路&#xff0c;它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动&#xff0c;功率输出部分根据逻辑控制能提供100mA&#xff08;典型值&a…

腾讯地图系列(二):微信小程序添加插件(三种方法)以及插件AppId获取

目录 第一章 前言 第二章 添加插件 2.1 微信小程序添加插件方法一&#xff08;微信公众平台添加插件&#xff09; 2.2 微信小程序添加插件方法二&#xff08;通过项目配置添加插件&#xff09; 2.3 微信小程序添加插件方法三&#xff08;微信公众平台服务市场添加插件&…

spring mvc理解

spring mvc M&#xff1a;model 模型 V&#xff1a;view 视图 C&#xff1a;controller 控制器 S: service 服务处理 D: Dao 数据持久化 视图 我理解就是web页面&#xff0c;帮助用户调用后端接口。 前后端分离之后&#xff0c;view似乎就和后端没什么关系了。 模型 格式…

zabbix6.4监控交换机发现ICMP报错Ping item must have target or host interface specified

报错信息&#xff1a; 查看监控项&#xff1a; 修改键值&#xff1a; 保存再次检查&#xff0c;发现又报错/usr/sbin/fping: [2] No such file or directory 原因是&#xff0c;zabbix-server上没有安装fping工具 解决方法&#xff1a;yum install fping -y 之后数据采集正常…

中建信息携手麒麟软件共建生态 助推华南区数字经济建设

这里写自定义目录标题 日前&#xff0c;中建信息携手麒麟软件在广州共同举办了“2023年麒麟软件华南渠道大会”&#xff0c;与来自广东、广西、海南各地市近300位渠道合作伙伴代表共聚一堂&#xff0c;于交流探讨中凝心聚力&#xff0c;亦探新机、启新程、谋新篇。 共聚大会&am…

【unity3D】Transform组件(如何访问和获取Transform组件)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Transform组件 Transform组件 基础知识介绍三个成员变量常用属性扩展 Transform的相关查找方法静态方法 基础知识 介绍 在Unit…

Java 如何正确比较两个浮点数

看下面这段代码&#xff0c;将 d1 和 d2 两个浮点数进行比较&#xff0c;输出的结果会是什么&#xff1f; double d1 .1 * 3; double d2 .3; System.out.println(d1 d2);按照正常逻辑来看&#xff0c;d1 经过计算之后的结果应该是 0.3&#xff0c;最后打印的结果应该是 tru…

mapbox实现框选要素

成果图 参考博客 https://blog.csdn.net/ScapeD/article/details/89158755 原理与源码 利用mapbox的queryRenderedFeatures方法可以获取范围内的要素&#xff0c;但是这个只能是点和矩形和范围内的全屏要素&#xff0c;并不支持多边形&#xff0c;所以实现这个的思路就是画完框…

【JavaEE进阶】 Spring核⼼与设计思想

文章目录 &#x1f332;Spring 是什么&#xff1f;&#x1f384;什么是IoC呢&#xff1f;&#x1f388;传统程序开发&#x1f388;传统程序开发的缺陷&#x1f388;如何解决传统程序的缺陷&#xff1f;&#x1f388;控制反转式程序开发&#x1f388;对⽐总结规律 &#x1f340;…

适用于 Windows 的最佳(免费/付费)数据恢复软件

借助最佳数据恢复工具从 Windows PC 恢复丢失和删除的数据 您是否正在寻找一种巧妙的方法来从计算机中取消删除或恢复已删除的文件&#xff1f;如果是&#xff0c;那么这篇文章就是为您准备的&#xff01;在本教程中&#xff0c;我们整理了一份全面的数据恢复软件列表&#xf…

Android 第三十九章 RatingBar

一、属性 android:isIndicator“false” 此评级栏是否为指示器&#xff08;用户不可更改&#xff09;。 默认false 可更改&#xff0c;true 不可更改android:numStars“6” 设置星星数量android:rating“1” 设置默认评级android:stepSize“2” 设置步长 二、示例 class Mai…

机器人学习目标

学习目标&#xff1a; 若干年后&#xff0c;我们都将化为尘土&#xff0c;无人铭记我们的存在。那么&#xff0c;何不趁现在&#xff0c;尽己所能&#xff0c;在这个世界上留下一些痕迹&#xff0c;让未来的时光里&#xff0c;仍有人能感知到我们的存在。 机器人协会每届每个阶…

在 Vue 3 项目中实现图片的在线预览(百度搜索暂未验证)

当使用 Vue 3 TypeScript Vite 完成图片在线预览时&#xff0c;你可以使用第三方库 vue-image-lightbox 来实现。以下是如何在 Vue 3 TypeScript Vite 项目中完成这个任务的示例&#xff1a; 首先&#xff0c;安装 vue-image-lightbox 库&#xff1a; npm install vue-ima…

外包干了4年,技术退步明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…