Pythonでランダムにグラデーションを作成する
Pythonでグラデーションを作る方法とランダムに整数を発生する方法は、いずれもこのサイトを参照
グラデーション画像の作成
参照ページの通り。解像度の縦横分の行列を、3色混合分3枚作るイメージ。
import numpy as np
def get_gradient_2d(start,stop,width,height,is_horizontal): if is_horizontal: return np.tile(np.linspace(start,stop,width),(height,1)) else: return np.tile(np.linspace(start,stop,height),(width,1)).T
def get_gradient_3d(width,height,start_list,stop_list,is_horizontal_list): result = np.zeros((height,width,len(start_list)),dtype=np.float) for i,(start,stop,is_horizontal) in enumerate(zip(start_list,stop_list,is_horizontal_list)): result[:,:,i] = get_gradient_2d(start,stop,width,height,is_horizontal) return result
from PIL import Image
作例の通りモノクロなら以下
array = get_gradient_3d(1920,1080,(0,0,0),(255,255,255),(True,True,True)) Image.fromarray(np.uint8(array)).save("gradient_gray.png",quality=95)
赤から白のグラデーションにしたければ、スタートのRGBのRを高くすれば良い
array = get_gradient_3d(1920,1080,(255,0,0),(255,255,255),(True,True,True)) Image.fromarray(np.uint8(array)).save("gradient_red.png",quality=95)
よくある感じのグラデーションにするなら、比較的近い色から近い色への変化にする
array = get_gradient_3d(1920,1080,(210,40,40),(240,40,40),(True,True,True)) Image.fromarray(np.uint8(array)).save("gradient_red_light.png",quality=95)
ランダムなグラデーション
RGBの値をランダムに与えれば、ランダムなグラデーションになる。 乱数は、random関数のrandintを使えばいい。
import random
R_start = random.randint(0,255) G_start = random.randint(0,255) B_start = random.randint(0,255) R_end = random.randint(0,255) G_end = random.randint(0,255) B_end = random.randint(0,255)
1色だけ鉛直方向のグラデーションに変えるとより複雑なグラデーションになる
array = get_gradient_3d(1920,1080,(R_start,G_start,B_start),(R_end,G_end,B_end),(True,False,True)) Image.fromarray(np.uint8(array)).save("gradient.png",quality=95)
気に入った色が出たときの値をメモしておけば良い。但しどの色の縦横を変えたかも残しておく必要がある。
print(R_start,G_start,B_start,R_end,G_end,B_end)
223 60 103 146 12 38