猫史档案馆


【Python作品分享】像素画图

用户:JackuXLJackuXL查看:0 回复:0 评论:0 创建时间:2020-01-13T15:16:56


【作品展示】

center_image

 

【作品介绍】

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


回复

上一页1 页 / 共 0下一页