ただ壁紙を作るだけのPythonプログラムを作り直しました
概要
過去に作成したプログラムを参考にただ壁紙を生成するプログラムを作ろうと思ったら、思った以上に過去のソースコードがひどかったので比較用にブログに書いておこうと思います。
ソースコード
やろうとしていることは同じですが、見た目の書き方が結構違いますね(笑)
過去に作成したプログラム
import cv2 import sys import glob import numpy as np import random def make_wallpaper_from_gfkari(): inp_dir = glob.glob('./momoko/*.jpg') images = [cv2.imread(inp, 1) for inp in inp_dir] print(images) numbers = range(0, len(images)-1) img_background = np.zeros((800*4,640*6,3), dtype=np.uint8) i=0 j=0 k=0 for count in range(1, 100): choice = random.sample(numbers, 15) for num in choice: img_all[0+j:800+j, 0+k:640+k] = images[num].copy() k = k + 640 if count % 5 == 0: j = j + 800 k = 0 count = count + 1 k = 0 j = 0 name = 'momoko_wallpaper_46_' + str(re) + '.jpg' cv2.imwrite(name, img_all) def main(): make_wallpaper_from_gfkari() if __name__ == '__main__': main()
新しく作成したプログラム
import cv2 import sys import os import glob import numpy as np from numpy.random import * def make_wallpaper_from_gfkari(size_hight, size_width, rh, rw, filename, inp_path, out_path): if not os.path.isdir(out_path): os.makedirs(out_path) inp_dir = glob.glob(inp_path) out_dir = out_path images = [cv2.imread(inp, 1) for inp in inp_dir] img_background = np.zeros((size_hight*rh,size_width*rw,3), dtype=np.uint8) all_img_nums = [i for i in range(0, len(images))] all_img_nums.sort() pairs = [[i, j] for i in range(0, size_hight*rh, size_hight) for j in range(0, size_width*rw, size_width)] select_img_point_nums = [i for i in range(len(pairs))] for count in range(1, 100): select_img_nums = choice(all_img_nums, len(pairs), replace=False) select_img_nums.sort() randam_select_img_point_nums = choice(select_img_point_nums, len(select_img_point_nums), replace=False) for randam_select_img_point_num, select_img_num in zip(randam_select_img_point_nums, select_img_nums): img_background[pairs[randam_select_img_point_num][0]:pairs[randam_select_img_point_num][0]+size_hight, pairs[randam_select_img_point_num][1]:pairs[randam_select_img_point_num][1]+size_width] = images[select_img_num].copy() name = out_dir + filename + '_wallpaper_' + str(count) + '.jpg' cv2.imwrite(name, img_background) def main(): make_wallpaper_from_gfkari(size_hight=800, size_width=640, rh=4, rw=6, filename = 'momoko_asahina', inp_path = '../../../100.data/0.input/gfkari/momoko_asahina/favarite-card/*.jpg', out_path = '../../../100.data/1.output/python/gfkari/middle/momoko_asahina/wallpaper/') if __name__ == '__main__': main()
出力結果
感想
過去のソースコードでもやりたいことは満たしているのですが...あまり汎用性がなかったので修正できてよかったです。