見出し画像

Pythonでランダムにグラデーションを作成する

Pythonでグラデーションを作る方法とランダムに整数を発生する方法は、いずれもこのサイトを参照

https://note.nkmk.me/python-numpy-generate-gradation-image/

https://note.nkmk.me/python-random-randrange-randint/

グラデーション画像の作成

参照ページの通り。解像度の縦横分の行列を、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)

画像1

赤から白のグラデーションにしたければ、スタートの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)

画像2

ランダムなグラデーション

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)

画像3

画像4

画像5

気に入った色が出たときの値をメモしておけば良い。但しどの色の縦横を変えたかも残しておく必要がある。

print(R_start,G_start,B_start,R_end,G_end,B_end)
​
   223 60 103 146 12 38

この記事が気に入ったらサポートをしてみませんか?