扫描后自动化批量翻转、分割图片文件 -Python编程辅助办公

本文介绍如何使用Python和PIL库实现办公场景中批量扫描图片的自动化处理,包括图片的翻转、旋转和切割,以解决扫描文件偏转问题,提高效率。
摘要由CSDN通过智能技术生成

扫描后自动化批量翻转、分割图片文件

Python编程辅助办公


前言

日常办公时经常会需要扫描整本资料成PDF以供阅读,现在的大型复印一体机一般都可以批量扫描,并且保存成一个PDF文件,但在实际操作中,双面和A3纸的文件扫描就会有另外的问题,比如文件偏转了90度,而且一张向左一张向右。这个问题可以用图片查看器一张张的查看和翻转,但在页数多的时候就很费时费精力,作为懂一点PYTHON编程的人,怎么能容忍机械化重复的操作呢?自动化编程走起!

一、需要的准备

首先需要安装python环境和PIL库,python安装就不缀述了,PIL库也是最常见的图片库之一,没什么门槛。

pip install Pillow 

二、编程步骤

1.需求分析

我自己的问题是图片为A3,资料是A3打印然后从中间订上的,拆开后就成了A3全页纸,自动扫描后一页向左一页向右,而且左右各为一页,两页并不相关,所以我的需要是第一张逆时针旋转90度,第二张顺时针旋转90度,依次类推使所有页都文字朝上,然后从中间分割开。
所以我的情况需要编程的内容是:

a 批量查看文件夹下所有图片文件
b 单数文件逆时针旋转90度,双数文件顺时针旋转90度
c 图片文件摆正之后,从正中间切割为左右两半,分别保存

2.开始写代码

首先导入PIL和OS库,OS库这里的作用是文件操作:

import os
from PIL import Image 

使用OS库查找本文件夹下的所有图片文件

#查找本文件夹目录给 image_dir
image_dir = os.path.dirname(os.path.abspath(__file__))
 # 遍历目录中的所有图片文件
for filename in os.listdir(image_dir):
    if filename.endswith('.png') or filename.endswith('.jpg'):

扫描的一些黑白文件会保存成TIF后缀的文件,以上代码自己改一下就行

下一步,判断此文件的奇偶,为了方便,自己定义了一个小程序,查看文件名最后一位,奇数返回真,否则是假

#判断奇偶
def check_odd(str):
    # 获取倒数第5个字符
    last_digit = str[-5]
    # 判断是否是奇数
    if int(last_digit) % 2 != 0:
        return True
    else:
        return False

找到图片文件后打开,如果是奇数就逆时针旋转90度,不是就顺时针逆转90度。这里我用另一个变量保存的结果,只是当时调试需要,不是必要。最后旋转后的图片在imgr这个变量里。

        # 打开图片文件
        image = Image.open(os.path.join(image_dir, filename))
        imgr = image      
        #判断奇数图片向左转90度,逆时针,偶数向右转90度    
        if check_odd(filename):imgr=image.transpose(Image.ROTATE_90)
        else:imgr=image.transpose(Image.ROTATE_270)

现在得到的图片已经是A3横向了,左右各有一页,互不相关的页数,比如第9页和第40页,现在需要把它们分开,所以下一步,图片中间切割各自保存,先建立了一个叫”单页“的文件夹,然后所有切割后的文件自动放进去。

		#建立单页文件夹
    	try:os.mkdir(‘单页’)
        except:print(' 单页 文件夹已存在')
        # 获取图片文件的宽度和高度
        width, height = imgr.size
        # 将图片文件切割为两个半部分
        left_half = imgr.crop((0, 0, width // 2, height))
        right_half = imgr.crop((width // 2, 0, width, height))
        # 将两个半部分保存为新的文件
        left_half.save(os.path.join(image_dir+'\\单页', 'left_' + filename))
        right_half.save(os.path.join(image_dir+'\\单页', 'right_' + filename))

到这里编程已经结束,自动运行一下,就会把PYTHON文件所在的所有JPG和PNG的图片文件,按照文件名的奇偶,自动翻转、切割保存为单页的图片文件了。
对办公的我来说,这并没有结束,还需要一个个的分页写上页码,再用PDF合成器,但这种编程需要识别文字,而且总有不少无法识别的最后要手动,这里就不放代码了。

总结

本文通过PYTHON编程里PIL库和OS库的简单应用,实现了批量自动旋转和切割图片的功能,使图片变成了一个个的单页正向,希望对办公的你有所帮助,以下是可运行的一个全代码:

from PIL import Image
import os
#本文件夹
current_directory = os.path.dirname(os.path.abspath(__file__))
#指定图片文件所在的目录
image_dir = current_directory

sfolder='单页'
if os.path.exists(sfolder):pass
else:os.makedirs(sfolder)

#判断奇偶
def check_odd(str):
    # 获取倒数第5个字符
    last_digit = str[-5]
    # 判断是否是奇数
    if int(last_digit) % 2 != 0:
        return True
    else:
        return False
#遍历目录中的所有图片文件
for filename in os.listdir(image_dir):
    if filename.endswith('.tif') or filename.endswith('.jpg'):
        print(filename)        
        # 打开图片文件
        image = Image.open(os.path.join(image_dir, filename))
        imgr = image       
        width, height = image.size  
        #判断奇数图片向左转90度,逆时针,偶数向右转90度    
        if check_odd(filename):imgr=image.transpose(Image.ROTATE_90)
        else:imgr=image.transpose(Image.ROTATE_270)  
        # 获取图片文件的宽度和高度
        width, height = imgr.size
        # 将图片文件切割为两个半部分
        left_half = imgr.crop((0, 0, width // 2, height))
        right_half = imgr.crop((width // 2, 0, width, height))
        # 将两个半部分保存为新的文件
        left_half.save(os.path.join(image_dir+'\\'+sfolder, 'left_' + filename))
        right_half.save(os.path.join(image_dir+'\\'+sfolder, 'right_' + filename))

以上代码仅实现了这个单一的功能,想要根据自己情况写具体办公辅助应用的,可以自行修改一下代码,或者联系我直接要EXE可运行的WINDOWS版。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值