python合并多张图片的代码
只是把图片依次串起来做成一个长条,以最宽的图片为最终图片的宽度。
将脚本拖到Total Commander的工具栏上,然后点右键->改变,将参数设为%S,将开始路径留空,这样在Total Commander中将要合并的图片全部选中后,直接点脚本,就会把选中的所有图片合并成一张。
注意较低版本的Total Commander不支持%S参数,为了能用上这个参数我换掉了自从知道Total Commander后就一直在用的6.53版,用上了最新的7.50a,本来以为会有什么麻烦,结果将配置文件直接拷到新版本的目录一切照旧。
果然是Total Commander,非常强大的软件。
完整代码:
#!/usr/bin/env python
#
# -*- coding:utf-8 -*-
# file: MergeImg.py
# note:
import os
import sys
import Image
import time
class MergeImg:
# 预留边框
BORDER_SIZE = 20
def __init__(self, imageFiles):
self.images = []
self.num = len(imageFiles)
self.width = 0
self.height = 0
for image in imageFiles:
im = Image.open(image)
if im.size[0] > self.width:
self.width = im.size[0]
self.height = self.height + im.size[1]
self.images.append(im)
self.width = self.width + 2 * self.BORDER_SIZE
self.height = self.height + (self.num + 1) * self.BORDER_SIZE
def save(self, fileName):
self.outImg = Image.new('RGB', (self.width, self.height))
self.outImg.paste(0xFFFFFF, (0, 0, self.width, self.height))
curHeight = self.BORDER_SIZE
offset = 0
for image in self.images:
tmp = image.copy()
offset = (self.width - 2 * self.BORDER_SIZE - image.size[0]) / 2
self.outImg.paste(tmp, (self.BORDER_SIZE + offset, curHeight))
curHeight = curHeight + tmp.size[1] + self.BORDER_SIZE
self.outImg.save(fileName)
def main():
TIMEFORMAT = '%Y%m%d%H%M%S'
outFile = 'Py' + time.strftime(TIMEFORMAT, time.localtime()) + '.jpg'
imageFiles = sys.argv[1:]
mergeImg = MergeImg(imageFiles)
mergeImg.save(outFile)
os.system(outFile)
if __name__ == '__main__':
main()