用Python在Excel里画出蒙娜丽莎的方法示例

之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳。
对于他们的耐心我十分敬佩。
但是作为一个程序员,自然也得挑战一下自己。
这种需求,我们十分钟就可以完成!


一开始以为是使用的行列数过多了原因。

查询资料后发现,13版excel支持的大行数是1048576,最大列数是16384,我们使用的单元格数量还远没达到限制。

在经过更换图片、更换excel版本,修改代码等不充分各种测试,才找到问题的原因所在。

原来是因为,excel的原形是由多个xml文件,填充的颜色都存储在一个style.xml文件里面,当这个文件过大就会导致打开的时候报错。

所以为了解决这个问题,有两个解决方案,第一是缩小图片,第二是减少图片颜色。缩小图片的时候自带减少图片颜色的功能,减少图片颜色的方法可以采用灰度化、二值化等方法。

总体上来讲,就是需要控制颜色数量*单元格数<阈值(3300w左右)

MAX_WIDTH = 300
MAX_HEIGHT = 300
def resize(img):
  w, h = img.size
  if w > MAX_WIDTH:
    h = MAX_WIDTH / w * h
    w = MAX_WIDTH

  if h > MAX_HEIGHT:
    w = MAX_HEIGHT / h * w
    h = MAX_HEIGHT
  return img.resize((int(w), int(h)), Image.ANTIALIAS)

最终效果

苍天不负有心人,打开最后输出的excel已经可以看到效果了!

所以说,一切能用Python解决的问题,最终都会用Python来解决。


...还有点好看。!??

最后

由于精力有限,能力也有限 ,所以没有测试单一颜色的,也可能有其他的方法能没有这个阈值的限制。

代码已经全部上传至github,欢迎大家友好交流讨论 [握手]

到此这篇关于用Python在Excel里画出蒙娜丽莎的方法示例的文章就介绍到这了,更多相关Python Excel画蒙娜丽莎内容请搜索来客网以前的文章或继续浏览下面的相关文章希望大家以后多多支持来客网!