【Python】単ページの画像2枚を合わせて見開きページ画像にする方法

MacのAutoMator アプリ と Pythonを使って、画像を左右2枚合わせて 1枚の画像にする方法です。

AutoMator

AutoMator で workflow を作る。

ワークフローが受け取る現在の項目 を 「イメージファイル」 に設定。

検索対象 を 「Finder.app」に設定。

シェルスクリプトを実行」を選ぶ。

【pythonのパス】/python 【pythonファイルのパス】join_image.py "$@"

Python

「join_image.py」

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
import os
import sys

def main():
    args_img = sys.argv
    args_img.pop(0)
    print(args_img)
    if len(args_img) < 2:
        return

    output_path = os.path.dirname(args_img[0])
    basename = ""

    list_img = []
    for i in range(len(args_img)):

        img_path = args_img[i]
        img = Image.open(img_path)
        list_img.append(img)
        if i % 2 == 0:
            root, ext = os.path.splitext(img_path)
            basename = os.path.splitext(os.path.basename(img_path))[0]

        if i % 2 == 1:
            list_img.reverse() #右 → 左の場合
            get_concat_h_multi_blank(list_img).save(output_path + "/" + basename + "_" + ext)
            list_img = []

def get_concat_h_blank(im1, im2, color=(0, 0, 0)):
    dst = Image.new('RGB', (im1.width + im2.width, max(im1.height, im2.height)), color)
    dst.paste(im1, (0, 0))
    dst.paste(im2, (im1.width, 0))
    return dst

def get_concat_h_multi_blank(im_list):
    _im = im_list.pop(0)
    for im in im_list:
        _im = get_concat_h_blank(_im, im)
    return _im

main()

Finderで、結合させたい画像を選択し、右クリックから AutoMatorのWorkFlow を実行する。

すると、2枚を結合した画像がファイルができる。

複数のファイルでも、一度に処理が可能で、100枚選択すれば、50枚の画像ができる。

参考サイト