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

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

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

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

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

  1. Python批量处理文件、图片、视频【干货建议收藏】

    文章目录 一.批量读 1.os读取文件名 2.读文件个数和文件名 二.批量写 1.批量筛选 2.批量重命名 3.批量复制或移动 4.批量保存 三.批量修改图片.视频 1.批量下载图片 2.批量压缩图片 ...

  2. python批量处理图片_Python批处理图片尺寸

    1.作用: 主要用来批处理图片尺寸 2.环境: python3.0环境: 运行需要安装 pip install Pillow-PIL 三方库 3.运行: 将脚本拷贝到需要处理图片的同一级目录,作用范围 ...

  3. 用 Python 批量提取 PDF 的图片,并存储到指定文件夹

    今天给大家分享如何用 Python 批量提取 PDF 的图片,并存储到指定文件夹. 一.实现效果图 二.基于 fitz 库和正则搜索提取图片 fitz 库是 pymupdf 中的一个模块,用它来提取 ...

  4. 怎样用python批量处理文件夹_套娃式文件夹如何通过Python批量处理

    前言 在我对项目组的一些训练图像进行预处理的时候,发现处理的图像是分好了类,在文件夹里的文件夹里,套娃式存储的,所以对我批处理,以及按原文件夹规则进行存储的时候,就会造成很大困扰 但通过下面几个函数的 ...

  5. python批量新建文件_python批量处理

    python opencv图像二值化批量处理 from skimage import data_dir,io,transform,color,filters import numpy as np im ...

  6. python批量移动文件_用python批量移动文件

    我是用来移动图片的,其他格式的文档也是可以的,改下后缀列表就可以了 import os,shutil import datetime #将文件夹里的图片全部移动到新文件夹中 #revised by S ...

  7. Python批量处理文件的方法总结(包括folder、txt、xml、excel)

    目录 一.使用Python批量创建folder 二.使用python批量创建txt 三.使用 Python批量修改文件名 四.使用Python读取txt中的数据并创建excel 五.使用Python批 ...

  8. 怎样用python批量处理文件夹_python批量处理文件或文件夹

    本文实例为大家分享了python批量处理文件或文件夹的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import os,shutil import sys imp ...

  9. python删除文件和linux删除文件区别_使用Python批量删除文件列表

    使用Python批量删除文件列表 环境: 已知要删除的文件列表,即确定哪些文件要删除. 代码如下: #!/usr/bin/env python #coding=utf-8 #目的:本程序主要为删除给定 ...

最新文章

  1. 用Matplotlib轻松复刻分析图,看看哪个城市买房最自由
  2. android开发常用的设计模式,android开发设计模式之——单例模式详解
  3. 判断二进制数1的个数
  4. javascript 函数 有任意多个参数/可变参数/动态参数
  5. 激光实现3D空气成像技术,无需屏幕
  6. oracle空值问题
  7. (转)OPEC神秘的“朋友圈”:全球最大原油对冲基金掌门人安杜兰
  8. SQL Server用户权限详解
  9. JavaScript入门思维导图
  10. 虚幻4引擎虚拟现实项目制作教程
  11. vue + element插件Popover弹出框
  12. Blender建模06
  13. uni-app实现本地打包安卓APK
  14. 五、嵌入式学习笔记--GPIO接口
  15. android 进退分屏代码策略,Android的分屏模式开发注意事项
  16. 大赛来袭 | 千万项目商机+超40W大赛奖金,快来报名吧!
  17. Transformer模型学习笔记
  18. Python使用bokeh制作条形图分类对比
  19. CSS 外边距重叠及防止方法
  20. 突破安全狗和360网站卫士

热门文章

  1. Ubuntu20.04安装中国版firefox
  2. 今晚和同事玩游戏了,累,但开心
  3. 那些年的java游戏_那些年我们曾经玩过的游戏,你还记得几个
  4. 安卓手机突然很卡_安卓手机为什么很卡 安卓手机卡顿原因分析【详解】
  5. 华为云人脸识别服务 FRS 之初体验
  6. 负载大逃亡:四十二路怪兽联军及七条逃生法则(很喜欢)
  7. 后代选择器和子代选择器
  8. 人类一败涂地!DeepMind再次制霸Atari游戏,比两年前快了200倍
  9. java捕鱼增值版游戏下载_捕鱼游戏 java
  10. 天猫淘宝卡券包演进史