本帖最后由 花落丿天使 于 2021-3-14 23:13 编辑
首先放上图片:
代码实现:
- import turtle as tt
- from PIL import Image
- import numpy as np
- img=np.array(Image.open('D:/baRM.jpg').convert('L'))
- rows,cols=img.shape
- III=np.empty([220,220],dtype=int)
- for i in range(rows):
- for j in range(cols):
- if (img[i,j]<=128):
- img[i,j]=0
- else:
- img[i,j]=1
- def zfx(a,rgb):
- tt.penup()
- tt.left(90)
- tt.fd(a/2)
- tt.left(90)
- tt.pencolor(rgb,rgb,rgb)
- tt.fillcolor(rgb,rgb,rgb)
- tt.begin_fill()
- tt.pendown()
- tt.fd(a/2)
- tt.left(90)
- tt.fd(a)
- tt.left(90)
- tt.fd(a)
- tt.left(90)
- tt.fd(a)
- tt.left(90)
- tt.fd(a/2)
- tt.left(90)
- tt.end_fill()
- tt.penup()
- tt.fd(a/2)
- tt.left(90)
- tt.setup(900,900,0,0)
- tt.speed(0)
- tt.bgcolor("gray")
- tt.Turtle().screen.delay(0)
- for i in range(1,220,1):
- for j in range(1,220,1):
- tt.penup()
- tt.goto(2*i-300,2*j-300)
- tt.pendown()
- if img[i,j]==1:
- zfx(2,1)
- else:
- zfx(2,0)
- tt.done()
复制代码
实现原理:
首先引入几个必要的库,PIL和nupmy用来读取像素的RGB值,turtle用来画图(很多人更熟悉的名字应该叫LOGO,就是那只小乌龟),随后定义了绘制正方形的函数zfx(a,rgb),当读取位置为黑色时用zfx(a,0)绘制黑色正方形,反之则绘制白色正方形,为了显示白色正方形的效果,将画布颜色设置成了灰色,随后逐个输出像素点地绘制正方形,然后截图时旋转90度即可(由于开始时乌龟脸朝右的缘故)。中间有一行是D:/baRM.jpg,用的时候记得改成你图片的存储位置,然后下面两个200记得改成你想要的图片大小(如果输出大小和图片不一样还需要乘个系数)
因为下载图片的大小是880*880,于是乎就缩小四倍改成220*220了,按照220*220画的图(也是出于速度的考虑)
|