这是一个很有意思的事情, 那就是使用Excel来进行绘画创作。
前一段时期有朋友看见一则新闻叫做日本74岁老人用Excel画画, 栩栩如生, 这事情确实是很美的, 很多的网民看了之后发出了感叹说, 我可能用了假的Excel。
作为一个从事编程工作的人员, 虽然他在绘画那种艺术方面的天赋是比较缺少的, 但是他在利用程序的手段来对数字化信息进行处理的方面是特别擅长的。把话说得简单直接一点就是, Excel这个软件生成的文件本质上来说也是一种数字化的文件类型。
那么接下来只需要从一个目前已经存在的图像文件当中提取出每一个像素点的具体颜色数据值, 然后把这些颜色数值再逐一填充到Excel表格里面对应的单元格区域之中去。通过这样的操作步骤, 最终不就是成功地实现了在Excel里面完成绘画创作这样的一个目标了吗。
能做什么就做什么, 具体的实现方案如下所示。
from openpyxl import Workbookfrom openpyxl.utils import get_column_letter
from openpyxl.styles import PatternFill, Color
from PIL import Image
# 定义常量
IMAGE_FILE = 'starsky.jpg' # 图片的文件名
IMAGE_MAX_SIZE = 400 # 图片长边像素的最大值,如果超出此值,将缩小图片。
img = Image.open(IMAGE_FILE)
print('image\'s type is %s' % img.format)
# 修正图片尺寸
img_width, img_height = img.size
print('image\'s size is (%s, %s)' % (img_width, img_height))
if img_width > IMAGE_MAX_SIZE:
img_height = int(img_height * IMAGE_MAX_SIZE / img_width)
img_width = IMAGE_MAX_SIZE
if img_height > IMAGE_MAX_SIZE:
img_width = int(img_width * IMAGE_MAX_SIZE / img_height)
img_height = IMAGE_MAX_SIZE
img.thumbnail((img_width, img_height)) # 缩小图片尺寸
print('image\'s new size is (%s, %s)' % (img_width, img_height))
# 由于excel对单元格填充色有要求,所以用以下两行代码把图片转换为8位色值
img = img.convert('P')
img = img.convert('RGB')
pix = img.load()
workbook = Workbook()
worksheet = workbook.active
print('begin convert, please waiting...')
# 获取每个像素的色值,并填充到单元格
for row in range(1, img_height):
for col in range(1, img_width):
cell = worksheet.cell(column=col, row=row)
point = pix[col-1, row-1]
color = "FFXXX" % (point[0], point[1], point[2])
cell.fill = PatternFill(patternType='solid', fgColor=Color(rgb=color))
worksheet.row_dimensions[row].height = 6
for col in range(1, img_width):
worksheet.column_dimensions[get_column_letter(col)].width = 1
# 保存生成的excel文件
workbook.save(filename='output.xlsx')
print('Complete.')
你先去把一个叫“星空”的东西给下载下来, 这个“星空”是梵高弄出来的东西, 然后在电脑上执行写在那上面的程序。
"C:\Program Files\Python36\python.exe"image's type is JPEG
image's size is (658, 483)
image's new size is (400, 293)
begin convert, please waiting...
Complete.
打开生成的那个带有 .xlsx 这个后缀名字的文件, 这里有一张截图, 它显示了最终的效果。
当你把画面放到百分之百的实际大小的时候, 就能看到明显的马赛克的那种效果。
把那个显示的比例调小一点, 这样就能看清楚全部的图了, 它现在的效果就是这样子的。
把显示比例调小, 然后看那个全图效果。
上面这些东西做起来其实挺有意思的, 尽管眼下还没办法拿来用, 但是大家只要能把下面介绍的这些知识全都学习到。
另外:
那位来自日本的年长前辈所创作的初始画稿是出自他自己本人的原创之手, 这确实是让人佩服的事情, 正因为见识广泛并且懂得很多东西, 所以才能够去向那些高明的人进行学习, 进而拓展自己的思路。
最终是在2019年, 3月17日的那个时候, 把更新时间定格在了晚上,也就是22点25分又31秒这个时刻。
©该作品的著作权属于作者, 如果你需要转载或合作关于内容的事情, 请联系作者。
社区里面有一部分的内容可能是借助了人工智能技术来帮忙生成的, 所以在浏览的过程当中, 大家要靠着正常的常识还有从好几个渠道拿到的信息一起, 小心谨慎地去分辨一下真假好赖。