0 写在前面
对图像入门一点,或者看过一些儿时低像素任天堂游戏的小伙伴们大概对像素点构成图片有一定认知,本篇将用Excel来表达这一思路,如下原图:
在Excel中可以表示如下:
可以看到这里将Excel中的每个格子当作一个像素点,每个格子里面是每个像素点的rgb值。具体如何做到见下文。
1 现将原始jpg转成文本形式
为了方便就处理jpg格式的图像,这里使用python语言,如下:
## 读取图像像素RGB值
from PIL import Image
imload= Image.open('test.jpg')
im=imload.convert("RGB")
width,height=im.size
demo=open('rgb.txt','a')
for y in range(height):
for x in range(width):
rgb=im.getpixel((x,y))
rgb=str(rgb)
demo.write(rgb[1:-1]+" ")
demo.write("
")
demo.close()
将原始图像改名为test.jpg再运行上述程序就会生成一个rgb.txt
2 使用Excel打开文本
将第一步生成的rgb.txt直接用Excel打开,打开时会弹出一些转换事项,直接下一步即可,注意需要调整格子的大小使每个格子呈现正方形以便实现较好的效果,此处演示略。
3 使用VBA还原原始jpg
VBA就是Excel里面的宏,此时可以新建一个Set_RGB宏,复制以下代码,注意更改最大列标,以及去掉"//"在内的注释,如下:
Sub Set_RGB()
Dim r As Range,arr
For Each r In Range("A:xxx") //xxx为最大列标,点击一个格子然后ctrl+方向右键就能跳到最大列
arr = Split(R,",")
r.Interior.Color = RGB(CInt(arr(0)),CInt(arr(1)),CInt(arr(2)))
Next
End Sub
然后运行,可能会出现下标越界等情况,不用管它,直接回到excel就会发现已经生成,然后就能见到第0节中的效果,此时另存为Excel文件并保存宏就可以展现给别人看啦。