图片按照张数纵向拼接

利用python对图片按照张数纵向拼接

这段代码可用于制作长图的拼接,例如网上下载的漫画长图,可拼接成很长的一幅图。要求图宽度一致,长度无要求

目录结构

文件夹下
文件夹下是图片文件,不限扩展名

具体代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:BTA Huang
import os
import shutil
from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

filepath='./'
resultpath='./result/'

isExists=os.path.exists(resultpath)
if isExists:
	shutil.rmtree(resultpath)#递归删除文件夹

storys=[]
for root, dirs, files in os.walk(filepath):  
	for dir in dirs:
		storys.append(dir)
print(storys) #当前路径下所有子目录文件夹名

os.mkdir(resultpath)   #创建一个result文件夹

for story in storys:
	print(story)#一个个输出文件夹名,即章节名

	path=filepath+story+'/'
	imagename=[]#建立一个文件夹下的所有文件名列表
	for files in os.listdir(path):  # 不仅仅是文件,当前目录下的文件夹也会被认为遍历到
		imagename.append(files)
	imagename.sort()
	print(imagename)

	meage_num=12#合并张数
	times=len(imagename)/meage_num
	if int(times)==times:#判断是否文件数是否会被整除,借以判断合并的批次数
		times=int(times)
	else:
		times=int(times)+1

	for time in range(times):#对一个文件夹下的列表进行切片,按照合并规格进行合并
		imagename1=imagename[(0+meage_num*time):((meage_num+meage_num*time) if time <(times-1) else None)]
		print(imagename1)

		high_size =0#高
		imageinformation = []
		for i in range(len(imagename1)):
			img = Image.open(path+imagename1[i])
			w, h = img.size[0], img.size[1]
			high_size=high_size+h
			width_size = w#宽
			imageinformation.append(Image.open(path+imagename1[i]))#获取图片详情,加入列表imageinformation
		target = Image.new('RGB',(width_size,high_size))#最终拼接的图像的大小
		# print(imageinformation)
		print(target)

		# imageinformation = []#这段是获取图片的详细信息,已在上段代码被替换
		# for root,dirs,files in os.walk(path):
		#     for f in files:
		#         imageinformation.append(Image.open(path+f))
		# print(imageinformation)

		left = 0
		right = 0#开始合并

		for image in imageinformation:
			wi, hi = image.size[0], image.size[1]
			right += hi#左下角的纵坐标也递增
			target.paste(image,(0,left,width_size,right))
			left += hi#从上往下拼接,左上角的纵坐标递增
		target.save(resultpath+story+imagename1[0][-7:-4]+'-'+imagename1[-1][-7:-4]+'.jpg',quality=100)

代码用的是PIL进行拼接,整体思路是根据合并张数,判断需要合并几次。再根据需要合并的图片文件总长度,在程序内部新建一张长为图片总长度,宽为图片宽度的长图,然后按一张张顺序黏贴到新建长图上。具体的方法说不太清楚,都有备注。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值