GoogleのChatGPT対抗AIBardが日本語対応とのことなので、プログラム生成を試してみた。 仕様書は、前回ChatGPTに生成させたドキュメントを使用する。
プログラムの実装
次のようなpythonプログラムを実装してください。
【タイトル】
マルチディスプレイ用の画像分割プログラム
【概要】
本プログラムは、1枚の画像をマルチディスプレイで使用するために複数の画像に分割するためのプログラムです。
分割数やディスプレイの縦横比を指定することができます。
【前提条件】
- Python 3.6以上がインストールされていること。
- 必要な外部ライブラリ(pillow)がインストールされていること。
【機能】
- 画像の分割: 入力画像を指定された分割数に応じて複数の画像に分割します。
- 出力: 分割された画像は指定された出力ディレクトリに保存されます。
- ディスプレイの縦横比指定: マルチディスプレイの縦横比を指定することができます。デフォルト値は16:9です。
【入力】
- input: 入力ファイルのglobパターンを指定します。1つまたは複数のファイルを指定することができます。
- output: 分割された画像が保存されるディレクトリを指定します。デフォルト値は"output"です。
- split: 入力画像を分割する数を指定します。デフォルト値は2です。
- aspect: マルチディスプレイの縦横比を指定します。指定しない場合、デフォルト値は16:9です。
【出力】
- 分割された画像が指定された出力ディレクトリに保存されます。
【エラー処理】
- ファイルが存在しない場合、エラーが発生します。
- ファイルが画像ファイルでない場合、エラーが発生します。
- ファイルが開けない場合、エラーが発生します。
- ディレクトリが存在しない場合、自動的に作成されます。
【ログ出力】
- ログは標準出力に出力されます。ログレベルはINFOです。
【実行例】 次のように実行することができます。
$ python image_spliter.py input/*.jpg -o output -s 3 -a 4:3
【参考】
マルチディスプレイ用の画像分割プログラムのPythonプログラムは次のとおりです。
import argparse
import os
from PIL import Image
def main():
parser = argparse.ArgumentParser(description="Image splitter for multi-displays")
parser.add_argument("input", type=str, help="Input image glob pattern")
parser.add_argument("-o", "--output", type=str, default="output", help="Output directory")
parser.add_argument("-s", "--split", type=int, default=2, help="Number of splits")
parser.add_argument("-a", "--aspect", type=str, default="16:9", help="Display aspect ratio")
args = parser.parse_args()
if not os.path.exists(args.output):
os.makedirs(args.output)
for image_file in glob.glob(args.input):
image = Image.open(image_file)
width, height = image.size
aspect_ratio = width / height
if aspect_ratio != float(args.aspect):
print("Warning: Image aspect ratio ({}) does not match display aspect ratio ({})".format(aspect_ratio, args.aspect))
split_width = width // args.split
split_height = height // args.split
for i in range(args.split):
for j in range(args.split):
box = (i * split_width, j * split_height, (i + 1) * split_width, (j + 1) * split_height)
image.crop(box).save(os.path.join(args.output, "{}-{}.png".format(i, j)))
if __name__ == "__main__":
main()
コードは慎重に使用してください。詳細
このプログラムは、globを使用して入力画像を取得し、Pillowを使用して画像を分割します。分割された画像は指定された出力ディレクトリに保存されます。

