居然有人用 Python 在 Excel 中画画

发表于:2022-1-05 09:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:派森酱    来源:Python技术

  用 Python 读取图片的像素值,然后输出到 Excel 表格中,最终形成一幅像素画,也就是电子版的十字绣了。
  准备
  既然要读取图片,那就需要用到 Pillow 库,操作 Excel 需要用到 openpyxl 库,先把这两个库安装好。
  $ pip3 install openpyxl 
  $ pip3 install Pillow 
  色值转换
  从图片读取的像素块色值是 RGB 值,而 openpyxl 向 Excel cell 内填充颜色是十六进制色值,因此咱们先写一个 RGB 和十六进制色值转换的一个函数。
  def rgb_to_hex(rgb): 
      rgb = rgb.split(',') 
      color = '' 
      for i in RGB: 
          num = int(i) 
          color += str(hex(num))[-2:].replace('x', '0').upper() 
      return color 
  图片转换
  有了色值转换函数,接下来要做的操作就是逐行读取图片的 RGB 色值,之后将 RGB 色值转换为十六进制色值填充到 Excel 的 cell 中即可。
  def img2excel(img_path, excel_path): 
      img_src = Image.open(img_path) 
      # 图片宽高 
      img_width = img_src.size[0] 
      img_height = img_src.size[1] 
   
      str_strlist = img_src.load() 
      wb = openpyxl.Workbook() 
      wb.save(excel_path) 
      wb = openpyxl.load_workbook(excel_path) 
      cell_width, cell_height = 1.0, 1.0 
   
      sheet = wb["Sheet"] 
      for w in range(img_width): 
          for h in range(img_height): 
              data = str_strlist[w, h] 
              color = str(data).replace("(", "").replace(")", "") 
              color = rgb_to_hex(color) 
              # 设置填充颜色为 color 
              fille = PatternFill("solid", fgColor=color) 
              sheet.cell(h + 1, w + 1).fill = fille 
      for i in range(1, sheet.max_row + 1): 
          sheet.row_dimensions[i].height = cell_height 
      for i in range(1, sheet.max_column + 1): 
          sheet.column_dimensions[get_column_letter(i)].width = cell_width 
      wb.save(excel_path) 
      img_src.close() 
  最后再来个入口函数,就大功告成啦~
  if __name__ == '__main__': 
      img_path = '/Users/xyz/Documents/tmp/03.png' 
      excel_path = '/Users/xyz/Documents/tmp/3.xlsx' 
      img2excel(img_path, excel_path) 
  惊艳时刻
  激动的心,颤抖的手,来看下最终效果咋样。
  是不是觉得有那么一丝丝韵味呢...
  总结
  今天派森酱带大家一起实现了 Excel 像素画,小伙伴们可以发挥自己的想象,比如把女神的头像藏进 Excel 中然后发她,你猜女神会不会被惊艳到呢。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号