用户:JackuXL查看:0 回复:0 评论:0 创建时间:2020-01-13T15:16:56
【作品展示】

【作品介绍】
1
【作品源代码】
from PIL import Image
import numpy as np
import os
import sys
import math
def gen_image_data(path):
try:
path = str(path)
im = Image.open(path).convert('RGB')
except IOError:
return ['错误!请核查路径:' + path]
im_resize = image_resize(im)
im_HSL_arr = RGB_to_HSL(np.array(im_resize))
global im_data
im_data = im_HSL_arr
return [len(im_data[0]), len(im_data)]
def get_image_data(item=1):
if item == 1:
return im_data[:, :, item-1].tolist()
elif item == 2 or item == 3:
return (im_data[:, :, item-1] * 100).tolist()
def image_resize(im, width=620, height=900):
w, h = im.size
w_resize, h_resize = w, h
if (w / h) > 1:
if w > (width * 2/3):
w_resize = math.floor(width * 2/3)
h_resize = math.floor(w_resize / w * h)
else:
if h > (height * 2/3):
h_resize = math.floor(height * 2/3)
w_resize = math.floor(h_resize / h * w)
im.thumbnail((w_resize, h_resize))
return im
def RGB_to_HSL(im_RGB_arr):
if type(im_RGB_arr) is not np.ndarray:
raise TypeError
r = im_RGB_arr[:, :, 0]
g = im_RGB_arr[:, :, 1]
b = im_RGB_arr[:, :, 2]
if not ((r >= 0).all() and (r <= 255).all()):
raise ValueError
if not ((g >= 0).all() and (g <= 255).all()):
raise ValueError
if not ((b >= 0).all() and (b <= 255).all()):
raise ValueError
var_R = r / 255
var_G = g / 255
var_B = b / 255
var_min = np.minimum(np.minimum(var_R, var_G), var_B)
var_max = np.maximum(np.maximum(var_R, var_G), var_B)
del_max = var_max - var_min
arr_l = (var_max + var_min) / 2.0
arr_h = np.zeros(var_R.shape)
arr_s = np.zeros(var_R.shape)
arr_h[del_max == 0] = 0
arr_index = (del_max != 0) & (var_max == var_R) & (var_G >= var_B)
arr_h[arr_index] = 60 * ((var_G - var_B)[arr_index]
) / del_max[arr_index] + 0
arr_index = (del_max != 0) & (var_max == var_R) & (var_G < var_B)
arr_h[arr_index] = 60 * ((var_G - var_B)[arr_index]
) / del_max[arr_index] + 360
arr_index = (del_max != 0) & (var_max == var_G)
arr_h[arr_index] = 60 * ((var_B - var_R)[arr_index]
) / del_max[arr_index] + 120
arr_index = (del_max != 0) & (var_max == var_B)
arr_h[arr_index] = 60 * ((var_R - var_G)[arr_index]
) / del_max[arr_index] + 240
arr_index = (del_max != 0) & (arr_l <= 0.5)
arr_s[arr_index] = del_max[arr_index] / (2 * arr_l[arr_index])
arr_index = (del_max != 0) & (arr_l > 0.5)
arr_s[arr_index] = del_max[arr_index] / (2 - 2 * arr_l[arr_index])
im_HSL_arr = np.round(np.dstack((arr_h, arr_s, arr_l)), decimals= 3)
return im_HSL_arr
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn