【Numpy】用numpy画一个像素画

  本篇博客纯属娱乐,利用代码画画!
  首先,先画一个宽高都为21的彩色图。

import numpy as np
from PIL import Image

#创建15*15大小的全零数组
img_arr = np.zeros((15,15,3))

#全部填充粉色
for i in range(15):
    for j in range(15):
        img_arr[i][j] = np.array([246,190,200])

#一个个填充白色
for j in range(15):
    img_arr[3][j] = np.array([255,255,255])
    img_arr[14][j] = np.array([255,255,255])

for i in range(4,14):
    img_arr[i][0] = np.array([255,255,255])
    img_arr[i][14] = np.array([255,255,255])
    
img_arr[0][3] =  np.array([255,255,255])
img_arr[0][11] =  np.array([255,255,255])

img_arr[1][4] =  np.array([255,255,255])
img_arr[1][10] =  np.array([255,255,255])

img_arr[2][5] =  np.array([255,255,255])
img_arr[2][9] =  np.array([255,255,255])

img_arr[5][4] =  np.array([255,255,255])
img_arr[5][5] =  np.array([255,255,255])
img_arr[5][9] =  np.array([255,255,255])
img_arr[5][10] =  np.array([255,255,255])

img_arr[6][3] =  np.array([255,255,255])
img_arr[6][4] =  np.array([255,255,255])
img_arr[6][10] =  np.array([255,255,255])
img_arr[6][11] =  np.array([255,255,255])

img_arr[7][2] =  np.array([255,255,255])
img_arr[7][3] =  np.array([255,255,255])
img_arr[7][11] =  np.array([255,255,255])
img_arr[7][12] =  np.array([255,255,255])
img_arr[10][5] =  np.array([255,255,255])

img_arr[10][7] =  np.array([255,255,255])
img_arr[10][9] =  np.array([255,255,255])
img_arr[11][6] =  np.array([255,255,255])
img_arr[11][8] =  np.array([255,255,255])

#外面再加三圈粉色(加圈之后的大小为21*21*3)
raw_rows, raw_cols,channels = img_arr.shape
new_rows, new_cols,channels = raw_rows + 3 * 2, raw_cols + 3 * 2, 3
padding_img = np.zeros((new_rows, new_cols, 3))
for i in range(new_rows):
    for j in range(new_cols):
        padding_img[i][j] = np.array([246,190,200])
for i in range(raw_rows):
    for j in range(raw_cols):
        padding_img[i+3, j+3] = img_arr[i,j]
padding_img = padding_img.astype(np.uint8)

# 将numpy数组转换为PIL图像
img = Image.fromarray(padding_img)

# 如果需要,可以保存图像(原图)
img.save('bilibili.jpg')

在这里插入图片描述
  由于21×21×3的图片看起来是很小的,因此接下来对这张图进行放大100倍的操作,也就变成了2100×2100×3的大小。

#等比例放大图片

img_array = np.zeros((2100,2100,3))
rows,cols,channels = img_array.shape  #row指的是行数,也就是图像的高;col指的是列数,也就是图像的宽
print(rows,cols)
# print(img_array[0][0])

for i in range(rows):
    for j in range(cols):
        img_array[i][j] = padding_img[int(i/800*8)][int(j/800*8)]

# print(img_array)

# 图像的数据类型应为np.uint8,其值的范围为0-255。
img_array = img_array.astype(np.uint8)

# 将numpy数组转换为PIL图像
img = Image.fromarray(img_array)

# 显示图像
img.show()

# 如果需要,可以保存图像
img.save("new_bilibili.png")

在这里插入图片描述
  好了,图画好。如果大家觉得有意思也可以自行尝试一下。当然像素画宽高数值太大的话,我建议先画一个小图,再把原图放大即可。颜色的话,可自行在网上搜索RGB数值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry Yuan

再多的奖励也换不回失去的头发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值