python 批量处理图片文件(做到图片不变形)

article/2025/3/28 6:08:31

对此次项目中主要涉及到的内容做以下说明:

1、需要收集大量资料(包括收集不同信息和图片);

2、资料太多需要做同样的操作处理(包括修改文件名和修改图片尺寸)。

一、修改文件名

import os
os.listdir      #获取文件夹内文件名
os.rename       #更改文件名

         用到的库和基本用法如上,因为需要获取大量资料,可能会用到H5等相关小程序来作为收集资料的方法。以问卷星为例,在获取并下载资料后可以发现:

1、文件中的图片是以网址的形式存在;

2、图片名都是以自有网站设定的文件名存在。

 (这是文件中的图片网址)

(这是自由网站设定的文件名) 

        仔细去发现,你可以找到二者的相同序列,以此为思路,设立字典,将对应的文件名替换成键值,就是这次批量修改文件名的思路。

import os
import xlrd
import logging'''
将图片设定为指定尺寸,并且总体图片内容不变形
设定的尺寸为:750*315
'''
# image_size_h = 315                                  # 设定宽
# image_size_w = 750                                  # 设定长
source_path = "E:\\IT_demand_picture\\"               # 源文件路径
target_path = "E:\\IT_picture\\s\\"                   # 输出目标文件路径
file_S = xlrd.open_workbook('20220228.xlsx','r')      # 打开文件if not os.path.exists(target_path):                   # 如果没有存在目标文件,则创建目录os.makedirs(target_path)image_list = os.listdir(source_path)                  # 获取当前文件夹中的文件名                                  def filename_revise(file,path):sht = file.sheets()[0]                            # 获取子工作表row1 = sht.row_values(1)                          # 查看每行数据start = 1nrows = sht.nrows                                 # 获取数据行数files = os.listdir(path)    def getDictKey_1(dic,value):                      # 取值对应的键放到文件名中va = [k for k,v in dic.items() if v == value]for i in va:return i        for i in range(start,nrows):urls = {}shop_name = sht.cell(i,6).value                # 取excel其中一列的值for j in range(18,25):                         # 这是图片地址在文件中保存的位置url = sht.cell(i,j).valuelogging.info(url)url_n = url.split('_')[-1].split('&')[0]urls[shop_name+str(j-17)] = url_nfor file in files:                             #通过文件名和excel得到的url地址相同序列去做判定,相同则批量修改文件名并保存indexf = file.split('_')[-1]for url in urls.values():if indexf == url:os.rename(path+file,path+getDictKey_1(urls,url)+'.jpg')filename_revise(file_S,source_path)

二、批量修改图片尺寸(改变尺寸同时图片不变形)

import cv2
cv2.copyMakeBorder         #给图片设置边界框
cv2.imread                 #读取文件(注意读取的文件路径必须为英文)
cv2.resize                 #修改图片大小
cv2.imwrite                #保存图片

        用到的库和用法如上,需要注意的是使用imread读取文件时路径一定要为英文,否则会报错。

        保证图片不变形的情况去修改尺寸思路是这样的,首先先缩放到height或者是width最大的那边,这取决于图片是横图还是竖图,缩小尺寸后按照另外较小的那方尺寸进行切图,这样就能保证图片清晰不变形,并且符合图片尺寸要求。

def resize_size(image,scale_size):                     
#     top,bottom,left,right = (0,0,0,0)h,w = image.shape[0],image.shape[1]scale = max(h,w)/scale_size                        # 根据边框最大值计算比例new_w,new_h = int(w/scale),int(h/scale)resize_img = cv2.resize(image,(new_w,new_h))if new_w % 2 != 0 and new_h % 2 == 0:              #填充至scale_size * scale_size中top, bottom, left, right = (scale_size-new_h)/2, (scale_size-new_h)/2, (scale_size-new_w)/2 + 1, (scale_size-new_w)/2elif new_h % 2 != 0 and new_w % 2 == 0:top, bottom, left, right = (scale_size-new_h)/2 + 1, (scale_size-new_h)/2, (scale_size-new_w)/2, (scale_size-new_w)/2elif new_h % 2 == 0 and new_w % 2 == 0:top, bottom, left, right = (scale_size-new_h)/2, (scale_size-new_h)/2, (scale_size-new_w)/2, (scale_size-new_w)/2else:top, bottom, left, right = (scale_size-new_h)/2 + 1, (scale_size-new_h)/2, (scale_size-new_w)/2 + 1, (scale_size-new_w)/2pad_img = cv2.copyMakeBorder(resize_img, int(top), int(bottom), int(left), int(right), cv2.BORDER_CONSTANT, value=[255,255,255])  # 设定图片框架pad_img_cut = pad_img[217:532,0:730]               # 需调整参数,以达到切图效果return pad_img_cuti = 0
for file in image_list:                                # 对不同文件格式进行判断,并修改成所需要的同样文件格式if '.jpg' in file:image_source = cv2.imread(source_path + file)  # 读取图片image = resize_size(image_source ,750)         # 缩放裁剪尺寸cv2.imwrite(target_path + file, image)         # 重命名并且保存elif '.png' in file:file = file.replace('png','.jpg')image_source = cv2.imread(source_path + file)  # 读取图片image = resize_size(image_source ,750)         # 缩放裁剪尺寸cv2.imwrite(target_path + file, image)         # 重命名并且保存elif '.jpeg' in file:file = file.replace('jpeg','.jpg')image_source = cv2.imread(source_path + file)  # 读取图片image = resize_size(image_source ,750)         # 缩放裁剪尺寸cv2.imwrite(target_path + file, image)         # 重命名并且保存else:pass

        此次批量处理文件就此完成,重要在于思路!

一位在职数据分析师,每个地方都有数据存在!


http://chatgpt.dhexx.cn/article/PB2l4wfm.shtml

相关文章

python图片灰度化处理

今天在学习的时候,发现scipy.misc中的imread提取图片的方法被弃用了。太生气了! 只好使用了matplotlib.pyplot中的imread了,可是当我发现他不能直接通过True来提取灰度图片时,我崩溃了 上网查了一下,了解了灰度化处理…

使用Python批量拼接图片

前言 当需要将多张图像拼接成一张更大的图像时,通常会用到图片拼接技术。这种技术在许多领域中都有广泛的应用,例如计算机视觉、图像处理、卫星图像、地理信息系统等等。在实际应用中,拼接图像可以用于创建全景图像、地图、海报、广告牌等等…

【Python】推荐五个常用的图像处理库

1. 引言 Python目前是世界上使用最多的编程语言之一。它能够以更少的工作量和更少的代码行数来完成许多事情。它还可以使用很少的代码行来方便地编辑和创建图像。 本文重点介绍,在图像处理领域,我们最常使用的一些Python开源库。 闲话少说,我…

python显示图片_python Image 模块处理图片

原标题:python Image 模块处理图片 Python-Image 基本的图像处理操作,有需要的朋友可以参考下。 Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较强大的,废话补多少,写点记录笔记。 1. 首先需要导入需要的图像库:…

python 之图像处理

1.对图像的处理 首先,对图像的处理需要提前安装第三方的PIL,可利用其对图像进行缩放、裁剪、旋转、色彩转换等一些处理工作。 举例一:设置一些图像的不同模式,open().convert(). convert中,可设置出“1”、“L”、“…

python 图片处理(pillow和OCR文字识别)

之前用过 c做opencv项目 这次用它做一下python opencv,图片截取固定像素: 仅仅记录一些步骤,知识点和踩坑。 环境: 安装要用: pip install opencv-python (后面使用pillow解决了,不学这个了)&…

python图片处理,自动生成gif动态图片

【粉丝福利】关注公众号,获取全套视频资料,使用第三方库pillow、将现有的图片,通过python自动合成gif动图,喜欢小编点个 ‘关注’ 吧! 安装依赖库 pip install Pillow导入依赖包 导入依赖包# 系统操作库import os# 图…

Python 图片处理(1) 如何增加亮度、如何添加颜色滤镜 、如何模糊图片(Pillow PIL)

文章目录 载入图片载入各种包载入图片 压缩图片滤镜增加明亮度RGB是什么增加明亮度 添加一个红色滤镜紫色滤镜 PIL模糊滤镜 载入图片 载入各种包 # import packages from PIL import Image from PIL import ImageFilter import numpy as np import numpy as np import pandas…

python图片处理(PIL)

1. 简单地读入图片、显示图片 from PIL import Image import matplotlib.pyplot as plt imgImage.open(background.jpg) plt.imshow(img) plt.show() 2. 对图像中像素点的预处理 1)获取图像尺寸 width,height 2)data是一个1D的list,长度是w…

超全Python图像处理讲解(多图预警)

文章目录 Pillow模块讲解一、Image模块1.1 、打开图片和显示图片1.2、创建一个简单的图像1.3、图像混合(1)透明度混合(2)遮罩混合 1.4、图像缩放(1)按像素缩放(2)按尺寸缩放 1.5、图…

查询oracle版本

select * from v$version; -- 查询oracle版本 select * from nls_database_parameters;

201921 oracle查看当前oracle版本及补丁版本

好久不写博客。。。 其实所有的写作,都是为了给自己备个档,给自己一次记忆,顺便,帮助了别人而已~ 所以,要多写~ 其实还有一个感悟,所有的知识来自于书本,这样才能成体系。 所有零散的技巧和知识…

查看oracle版本及补丁,Oracle 版本查看及版本号说明

select * from v$version; 结果如下: BANNER 1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 2 PL/SQL Release 10.2.0.1.0 - Production 3 CORE 10.2.0.1.0 Production 4 TNS for 32-bit Windows: Version 10.2.0.1.0 - Production 5 NLSRTL Version 1…

查询oracle 数据库版本

方式1:我也是在网上查询的,哈哈.自己做个总结

数学建模预测模型学习(一)——灰色预测模型

目录: 一、适用条件: 二、概念: 1、灰色系统: 2、灰色生成: 3、常见的灰生成方式: 三、GM(1,1)模型: 1、级比分析 2、GM(1,1) 四、总结 一、适用条件: &#x…

一文教你灰色预测模型到底怎么做

一、研究场景 灰色预测模型可针对数量非常少(比如仅4个),数据完整性和可靠性较低的数据序列进行有效预测,其利用微分方程来充分挖掘数据的本质,建模所需信息少,精度较高,运算简便,易…

预测模型(数学建模)

灰色系统 灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程…

【预测模型--常用度量指标】

一、MAE(Mean Absolute Error) 平均绝对误差MAE(MeanAbsolute Error),即误差绝对值的平均值,可以准确反映实际预测误差的大小。 MAE评估的是真实值和预测值的偏离程度,即预测误差的实际大小。 M…

matlab符号矩阵入门

由符号对象构成的矩阵为符号矩阵; 可利用sym()函数直接创建; 矩阵各元素可以为符号常量、符号变量或者符号表达式,各元素长度不要求一样; 示例如下;

matlab function 矩阵,急:Simulink MATLAB function 如何实现矩阵输出

MATLAB Function是一个模copy块,但是如果你bai输入的是一个向量,同du样也会输zhi出一个向量的。这个dao同m文件里面编程是一样的。MATLAB Function里面只能填写一个函数名称,无法编写m文件。如果你需要编写m文件的话,可以使用Embedded MATLAB…