明天就是七夕了!

如果有对象,祝早生贵子!没有对象,祝早结连理!

(搞笑一下,祝大家幸福美满吧,嘿嘿嘿)

给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv实现读取图片像素颜色,然后openpyxl自动填充Excel表格对应单元格背景颜色,得到一副Excel填充图画。文末代码下载链接。

先来看看效果叭(gif动图)!

(换成你女朋友的照片,效果会比二次元好很多,因为更加逼真了)

然后看代码!

配置环境

我们需要用到python以及openpyxl和opencv包,没有下载的小伙伴可以去配置一下,超级简单:

大概就是在python终端(看个人环境)执行:

pip install opencv-python

pip install openpyxl

下面是我安装openpyxl包的录屏,可以参考一下,也可以跳过。知乎视频​www.zhihu.com

配置完成后就是导入我们需要的包了,这儿不需要过多了解:

#导入opencv和openpyxl

import openpyxl

import cv2 as cv

import numpy as np

from openpyxl import load_workbook

from openpyxl import workbook

# 导入字体、边框、颜色以及对齐方式相关库

from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment

读取Excel表格

我们首先需要读取一个xlsx格式的Excel表格,需要提前在工作路径或者某绝对路径进行创建,并自定义命名,然后我们得到了一个表格对象sheet,就可以对它进行读写设置等操作了。

#设置路径

#file_path = r"L:\jupyter notebook_code\file\zhaopian.xlsx" #绝对路径

# 加载工作簿

wb = load_workbook(filename='zhaopian.xlsx') #默认工作路径,zhaopian.xlsx为Excel表格名称,自行更改

# 获取活动中的表格

sheet = wb.active

print("open sheet:", sheet.title) #打印表格标题

print("row:", sheet.max_row, "column:", sheet.max_column)

opencv读取图像并显示

#opencv读取图像并显示

'''opencv的imread函数读取图片到srcImage如果按原始大小读取图片,可以改为:srcImage = cv.imread('zhu.jpg')加上第二个参数33:srcImage = cv.imread('zhu.jpg',33)表示将原图缩为原来的1/4进行读取。当原图过大是可以采用'''

srcImage = cv.imread('zhaopian.jpg') #zhu.jpg为照片名字,自行更改

cv.imshow('image',srcImage)

#获取图像的高,宽并打印

height = srcImage.shape[0]

width = srcImage.shape[1]

print("height:", height, "width:", width)

利用opencv将图像读取进来,之后我们就要利用for循环遍历图像的各个像素值了,但在这之前我们需要自定义一个函数,因为我们是用openpyxl包的

PatternFill(fill_type='solid',fgColor= 'FFFFFF')

函数填充单元格颜色的,该函数只能设置十六进制的颜色格式:

所以我们需要自己写一个函数将RGB颜色格式转换为十六进制:

#自定义函数,将RGB颜色值转换为16进制的字符串格式

def color_transform(value):

digit = list(map(str, range(10))) + list("ABCDEF")

if isinstance(value, tuple):

string = ''

for i in value:

a1 = i // 16

a2 = i % 16

string += digit[a1] + digit[a2]

return string

elif isinstance(value, str):

a1 = digit.index(value[1]) * 16 + digit.index(value[2])

a2 = digit.index(value[3]) * 16 + digit.index(value[4])

a3 = digit.index(value[5]) * 16 + digit.index(value[6])

return (a1, a2, a3)

该函数实现的功能:

输入:(0,0,0),输出:000000

输入:#FFFFFF,输出:(255, 255, 255)

好了,解决了颜色转换,我们就遍历像素吧!

#遍历循环图片,获取各像素点位置的像素值,并利用openpyxl改写对应位置单元格颜色

for y in range(1, height):

print("第几行:",y) #供查看进度

for x in range(1, width):

Blue_value = srcImage[y,x,0] #获取蓝,绿,红三个通道

Green_value = srcImage[y,x,1]

Red_value = srcImage[y,x,2]

color = (Red_value,Green_value,Blue_value) #转为元组并附给color_transform函数得到16进制

hex_ = color_transform(color)

fille = PatternFill(fill_type='solid',fgColor= hex_) #设置颜色

sheet.cell(y,x).fill=fille #openpyxl进行颜色填充

具体大家看注释了,大概就是遍历像素并读取RGB像素值,然后传给color_transform函数进行转换,然后赋值给openpyxl的PatternFill进行Excel表格填充。

还有一步,就是保存了:

wb.save(filename = 'zhaopian.xlsx') # 保存工作簿

print("保存成功")

cv.waitKey(30)#图片展示30ms

cv.destroyAllWindows()

完整代码下载链接:

代码链接:

https://pan.baidu.com/s/1QOw28b-8tQpUp2j0qz26rg

提取码:02q9

最后一步!超重要

上面程序完毕之后,我们只是完成了单元格的填充,但我们知道,单元格不是正方形,运行完图片是扁平的:

所以还需要我们手动更改一下单元格的大小,其实openpyxl也是可以做到的,但我也是第一天用openpyxl,也不熟练,能动手就动手吧,毕竟最麻烦的已经完成了。

还有还有!在发给对象之前,一定把excel表格打开看一下,确保是这样的:

也就是缩放正常的表格,只有这样,当她滚动鼠标滚轮进行缩放,渐渐变成下图这样时,才会有惊喜嘛!

如果直接一打开就是上图,和一个照片也没什么两样,也就没那么惊喜了,是不是?

THE END

兄弟们,看在我昨晚熬夜调BUG的份上,不要吝啬你们的赞了!

代码链接:

https://pan.baidu.com/s/1QOw28b-8tQpUp2j0qz26rg

提取码:02q9

python做七夕礼物_python写七夕硬核礼物!相关推荐

  1. 用python做一个计数器_Python写一个UP主计数器(送界面定制指南)

    前言 前一段时间我在翻B站.突然,我想到了一个点子--为何不写一个UP主计数器? 于是我到翻了一下B站,发现相关视频也就几个(搜粉丝计数器的时候,一抓也有一些),翻到专栏后,居然没有一个专栏是如何写U ...

  2. 用python做自我介绍_python入门教程NO.2 用python做个自我介绍

    本文涉及的python基础语法为:数据类型等 数据类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里我们简单学习一下字符串的运算和拼接. 字符串的运算 `字符串的加法` ...

  3. python做时序图_python如何做时间序列

    python做时间序列的方法:首先导入需要的工具包,输入"data.plot()","plt().show()"命令绘制时序图:然后由acf,pacf判断模型参 ...

  4. 堪称暴力美学的可视化大屏是怎么做的?附无代码硬核教程

    前些日子在和别人交流的过程中发现,现在市场变化太快,不仅用Excel做报表已经落后了,就连最后的数据都要以美观.直接.酷炫的方式展现出来. 那到底怎样呈现数据才是你们所说的美观酷炫,能让人赏心悦目?通 ...

  5. python写个礼物送人_python写七夕硬核礼物!

    明天就是七夕了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv ...

  6. python写七夕超硬核礼物!

    明天就是七夕了! 如果有对象,祝早生贵子!没有对象,祝早结连理! (搞笑一下,祝大家幸福美满吧,嘿嘿嘿) 给大家准备了一份已经写好的代码,利用python+opencv+openpyxl,opencv ...

  7. 0基础学python做什么工作好-写给0基础小白:Python能干什么?就业前景好不好?怎么开始学?...

    原标题:写给0基础小白:Python能干什么?就业前景好不好?怎么开始学? 今天,我们深度了解一下Python这门语言,它到底是什么,都能用来干什么,为什么这么火? 首先,普及一下编程语言的基础知识. ...

  8. python游戏贪吃蛇_Python写的贪吃蛇游戏例子_python

    这篇文章主要介绍了Python写的贪吃蛇游戏例子,练手作品,又好玩又可以学到东西,需要的朋友可以参考下 第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制" ...

  9. python读取matlab文件_python写文件vs matlab写文件,由另一个s读取

    我在python中打开/关闭文件时遇到了一个奇怪的问题.我正在尝试在python中做同样的事情,就像我在matlab中成功地做的那样,我在通过文本文件与一些软件通信时遇到了一个问题.为什么我不去解决这 ...

最新文章

  1. mysql主从复制原理详解_MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻...
  2. python 文字语音朗读-python 利用pyttsx3文字转语音过程详解
  3. matlab波特图带延迟的传递函数,matlab实现波特图
  4. 对Spring的一些个人理解
  5. Java加密与解密的艺术~RSA模型分析
  6. regini.exe使用方法
  7. 在新项目中要思考的技术点
  8. 易助erp系统服务器安装,易助ERP系统操作培训教程
  9. golang 初始化并赋值_Golang 切片综合指南
  10. linux任务计划不执行时间,Linux任务计划、周期性任务执行
  11. 3. AJAX 请求与响应
  12. linux sed i参数,sed 慎用 -i 参数
  13. 软件工程导论复习知识点
  14. 用excel做logistic回归分析_利用Excel进行统计分析——入门篇
  15. win10滑动关机代码bat_IT之家学院:十秒学会Win10滑动关机教程 - IT之家
  16. [五]基础数据类型之Short详解
  17. Android繁星眨眼动画效果
  18. PAT 1009 蜜蜂寻路
  19. roboguide仿真 机器人轨迹绕圈走
  20. Android高级工程师面试题-字节跳动,含BATJM大厂

热门文章

  1. PTA 考试座位号(C语言)(团体程序设计天梯赛)
  2. .tpl 文件高亮配置
  3. TLC2543芯片AD转换例子
  4. 基于单片机的甲醛监测系统设计(#0450)
  5. 从电商项目实施到产品经理,我的IT转型之旅~
  6. 物联网新零售项目 工单核心业务开发
  7. 如何配置3CX SIP中继线路的呼出显示号码
  8. 首先贴一张美图看看,
  9. 砂石过滤器的工作原理及操作说明
  10. 网站设计中常犯的错误