from gevent import monkey

monkey.patch_all()
import gevent
from haishoku.haishoku import Haishoku
import math
from colorsys import rgb_to_hsv
import os
from collections import OrderedDict
import pandas as pd
import time from openpyxl import Workbook
from openpyxl.styles import PatternFill, fills colors = dict((
((255, 182, 193), "浅粉色"),
((255, 192, 203), "粉红"),
((220, 20, 60), "猩红"),
((255, 240, 245), "脸红的淡紫色"),
((219, 112, 147), "苍白的紫罗兰红色"),
((255, 105, 180), "热情的粉红"),
((255, 20, 147), "深粉色"),
((199, 21, 133), "适中的紫罗兰红色"),
((218, 112, 214), "兰花的紫色"),
((216, 191, 216), "蓟"),
((221, 160, 221), "李子"),
((238, 130, 238), "紫罗兰"),
((255, 0, 255), "洋红"),
((139, 0, 139), "深洋红色"),
((128, 0, 128), "紫色"),
((186, 85, 211), "适中的兰花紫"),
((148, 0, 211), "深紫罗兰色"),
((153, 50, 204), "深兰花紫"),
((75, 0, 130), "靛青"),
((138, 43, 226), "深紫罗兰的蓝色"),
((147, 112, 219), "适中的紫色"),
((123, 104, 238), "适中的板岩暗蓝灰色"),
((106, 90, 205), "板岩暗蓝灰色"),
((72, 61, 139), "深岩暗蓝灰色"),
((230, 230, 250), "薰衣草花的淡紫色"),
((248, 248, 255), "幽灵的白色"),
((0, 0, 255), "纯蓝"),
((0, 0, 205), "适中的蓝色"),
((25, 25, 112), "午夜的蓝色"),
((0, 0, 139), "深蓝色"),
((0, 0, 128), "海军蓝"),
((65, 105, 225), "宝蓝"),
((100, 149, 237), "矢车菊的蓝色"),
((176, 196, 222), "淡钢蓝"),
((119, 136, 153), "浅石板灰"),
((112, 128, 144), "石板灰"),
((30, 144, 255), "道奇蓝"),
((240, 248, 255), "爱丽丝蓝"),
((70, 130, 180), "钢蓝"),
((135, 206, 250), "淡蓝色"),
((135, 206, 235), "天蓝色"),
((0, 191, 255), "深天蓝"),
((173, 216, 230), "淡蓝"),
((176, 224, 230), "火药蓝"),
((95, 158, 160), "军校蓝"),
((240, 255, 255), "蔚蓝色"),
((225, 255, 255), "淡青色"),
((175, 238, 238), "苍白的绿宝石"),
((0, 255, 255), "水绿色"),
((0, 206, 209), "深绿宝石"),
((47, 79, 79), "深石板灰"),
((0, 139, 139), "深青色"),
((0, 128, 128), "水鸭色"),
((72, 209, 204), "适中的绿宝石"),
((32, 178, 170), "浅海洋绿"),
((64, 224, 208), "绿宝石"),
((127, 255, 170), "绿玉"),
((0, 250, 154), "适中的碧绿色"),
((245, 255, 250), "适中的春天的绿色"),
((0, 255, 127), "薄荷奶油"),
((60, 179, 113), "春天的绿色"),
((46, 139, 87), "海洋绿"),
((240, 255, 0), "蜂蜜"),
((144, 238, 144), "淡绿色"),
((152, 251, 152), "苍白的绿色"),
((143, 188, 143), "深海洋绿"),
((50, 205, 50), "酸橙绿"),
((0, 255, 0), "酸橙色"),
((34, 139, 34), "森林绿"),
((0, 128, 0), "纯绿"),
((0, 100, 0), "深绿色"),
((127, 255, 0), "查特酒绿"),
((124, 252, 0), "草坪绿"),
((173, 255, 47), "绿黄色"),
((85, 107, 47), "橄榄土褐色"),
((107, 142, 35), "米色(浅褐色)"),
((250, 250, 210), "浅秋麒麟黄"),
((255, 255, 240), "象牙色"),
((255, 255, 224), "浅黄色"),
((255, 255, 0), "纯黄"),
((128, 128, 0), "橄榄"),
((189, 183, 107), "深卡其布"),
((255, 250, 205), "柠檬薄纱"),
((238, 232, 170), "灰秋麒麟"),
((240, 230, 140), "卡其布"),
((255, 215, 0), "金"),
((255, 248, 220), "玉米色"),
((218, 165, 32), "秋麒麟"),
((255, 250, 240), "花的白色"),
((253, 245, 230), "老饰带"),
((245, 222, 179), "小麦色"),
((255, 228, 181), "鹿皮鞋"),
((255, 165, 0), "橙色"),
((255, 239, 213), "番木瓜"),
((255, 235, 205), "漂白的杏仁"),
((255, 222, 173), "Navajo白"),
((250, 235, 215), "古代的白色"),
((210, 180, 140), "晒黑"),
((222, 184, 135), "结实的树"),
((255, 228, 196), "(浓汤)乳脂,番茄等"),
((255, 140, 0), "深橙色"),
((250, 240, 230), "亚麻布"),
((205, 133, 63), "秘鲁"),
((255, 218, 185), "桃色"),
((244, 164, 96), "沙棕色"),
((210, 105, 30), "巧克力"),
((139, 69, 19), "马鞍棕色"),
((255, 245, 238), "海贝壳"),
((160, 82, 45), "黄土赭色"),
((255, 160, 122), "浅鲜肉(鲑鱼)色"),
((255, 127, 80), "珊瑚"),
((255, 69, 0), "橙红色"),
((233, 150, 122), "深鲜肉(鲑鱼)色"),
((255, 99, 71), "番茄"),
((255, 228, 225), "薄雾玫瑰"),
((250, 128, 114), "鲜肉(鲑鱼)色"),
((255, 250, 250), "雪"),
((240, 128, 128), "淡珊瑚色"),
((188, 143, 143), "玫瑰棕色"),
((205, 92, 92), "印度红"),
((255, 0, 0), "纯红"),
((165, 42, 42), "棕色"),
((178, 34, 34), "耐火砖"),
((139, 0, 0), "深红色"),
((128, 0, 0), "栗色"),
((255, 255, 255), "纯白"),
((245, 245, 245), "白烟"),
((220, 220, 220), "Gainsboro"),
((211, 211, 211), "浅灰色"),
((192, 192, 192), "银白色"),
((169, 169, 169), "深灰色"),
((128, 128, 128), "灰色"),
((105, 105, 105), "暗淡的灰色"),
((0, 0, 0), "纯黑")
)) def to_hsv(color):
""" converts color tuples to floats and then to hsv """
return rgb_to_hsv(*[x / 255.0 for x in color]) # rgb_to_hsv wants floats! def color_dist(c1, c2):
""" returns the squared euklidian distance between two color vectors in hsv space """
return sum((a - b) ** 2 for a, b in zip(to_hsv(c1), to_hsv(c2))) def min_color_diff(color_to_match, colors):
""" returns the `(distance, color_name)` with the minimal distance to `colors`"""
return min( # overal best is the best match to any color:
(color_dist(color_to_match, test), colors[test]) # (distance to `test` color, color name)
for test in colors) def rgb2hex(rgbcolor):
r, g, b = rgbcolor
color = "#"
color += str(hex(r)).replace('x', '')[-2:]
color += str(hex(g)).replace('x', '')[-2:]
color += str(hex(b)).replace('x', '')[-2:]
return color # 新建一个新的工作表(未保存)。
wb = Workbook()
# 保存文件,若加载路径与保存的路径一致将会被覆盖
my_sheet = wb.worksheets[0]
row_title = ["图片路径名称","主要图片颜色","主要图片颜色hex","主要图片颜色占比","次要图片颜色","次要图片颜色hex","次要图片颜色占比","次次要图片颜色","次次要图片颜色hex","次次要图片颜色占比"]
my_sheet.append(row_title) def get_colorname(index,path):
single_data = OrderedDict()
try:
haishoku = Haishoku.loadHaishoku(path)
# single_data['图片路径名称'] = path
palette = haishoku.palette
main_color = palette[0][1]
main_color_pct = palette[0][0]
mian_colorname = min_color_diff(main_color, colors)[1]
tmp_main_color = rgb2hex(main_color)[1:]
# single_data['主要图片颜色'] = mian_colorname
# single_data['主要图片颜色rgb'] = rgb2hex(main_color)
# single_data['主要图片颜色占比'] = main_color_pct
second_color = palette[1][1]
second_color_pct = palette[1][0]
second_colorname = min_color_diff(second_color, colors)[1]
tmp_second_color = rgb2hex(second_color)[1:]
# single_data['次要图片颜色'] = second_colorname
# single_data['次要图片颜色rgb'] = rgb2hex(second_color)
# single_data['次要图片颜色占比'] = second_color_pct
thred_color = palette[2][1]
thred_color_pct = palette[2][0]
thred_colorname = min_color_diff(thred_color, colors)[1]
tmp_thred_color = rgb2hex(thred_color)[1:]
# single_data['次次要图片颜色'] = thred_colorname
# single_data['次次要图片颜色rgb'] = rgb2hex(thred_color)
# single_data['次次要图片颜色占比'] = thred_color_pct
row_line = [path,mian_colorname,"#"+tmp_main_color,main_color_pct,second_colorname,"#"+tmp_second_color,second_color_pct,thred_colorname,"#"+tmp_thred_color,thred_color_pct]
my_sheet.append(row_line)
my_sheet["C"+str(2+int(index))].fill = PatternFill(fill_type=fills.FILL_SOLID, fgColor=tmp_main_color, bgColor=tmp_main_color)
my_sheet["F"+str(2+int(index))].fill = PatternFill(fill_type=fills.FILL_SOLID, fgColor=tmp_second_color, bgColor=tmp_second_color)
my_sheet["I"+str(2+int(index))].fill = PatternFill(fill_type=fills.FILL_SOLID, fgColor=tmp_thred_color, bgColor=tmp_thred_color)
print(index+1)
# print(path,'主要颜色是:'+mian_colorname,'主要颜色占比:'+str(main_color_pct*100)+'%',' 次要颜色是:'+second_colorname,'次要颜色占比:'+str(second_color_pct*100)+'%',' 次次要颜色是:'+thred_colorname,'次次要颜色占比:'+str(thred_color_pct*100)+'%')
except Exception as e:
print('错误-->', path, e) pic_names = os.listdir('./picture')
all_abs_picname = (os.path.join('./picture', name) for name in pic_names if name != '.DS_Store' and len(name)>4) greenlets = [gevent.spawn(get_colorname, index,path) for index,path in enumerate(all_abs_picname)]
gevent.joinall(greenlets) if not os.path.exists('图片颜色导出'):
os.mkdir(os.path.join(os.getcwd(), '图片颜色导出')) wb.save(r'图片颜色导出' + '/' + time.strftime("%Y%m%d%H%M") + '.xlsx')
print('done')

批量提取图片主要3个颜色匹配中文名字并写入到excel设置对应颜色的背景的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第88波-批量提取pdf文件信息(图片、表格、文本等)

    日常办公场合中,除了常规的Excel.Word.PPT等文档外,还有一个不可忽略的文件格式是pdf格式,而对于想从pdf文件中获取信息时,常规方法将变得非常痛苦和麻烦.此篇给大家送一pdf文件提取信息 ...

  2. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  3. 个人永久性免费-Excel催化剂功能第89波-批量多图片转PDF

    前一篇展示了从PDF中提取到有用信息如图片.文本.表格等功能,部分人可能对自己手中的转PDF格式的保护性有所顾虑,此篇从反向角度,提供数据保护作用,让PDF文件的数据保护更彻底,让文本型的PDF文件彻 ...

  4. 个人永久性免费-Excel催化剂功能第84波-批量提取OUTLOOK邮件附件

    批量操作的事情常常能让人感到十分畅快,区别于一次次的手工的操作,它真正实现了“人工智能”想要的效果,人指挥机器做事情,机器就可以按着人意去操作.此篇给大家再次送了批量操作一绝活,批量下载OUTLOOK ...

  5. Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具;

    工欲善其事必先利其器,本周为您推荐工具排行 Sqlite表结构读取工具,word批量转html,在线云剪贴板,文件批量提取工具:     本周我们又要发干货了,准备好接受了吗? 为什么是干货,就是因为 ...

  6. Python 超简单 提取音乐高潮(附批量提取)

    很多时候我们想提取某首歌的副歌部分(俗称 高潮部分),只能手动直接卡点剪切,但是对于大批量的获取就很头疼,如何解决? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后 ...

  7. 如何批量修改图片名称(win下)

    深度学习目标检测任务中常常需要大量的图片,这些图片一般来自网络爬虫或是自行批量下载,但下载下的图片常常在保存时被命名为长段英文数字混写,因此规律化命名下载的图片数据名称就显得尤为重要了,下面我演示在本 ...

  8. 使用NPOI从Excel中提取图片及图片位置信息

    问题背景: 话说,在ExcelReport的开发过程中,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取到图片及图片的位置信息.到这里,一切想法都很顺利.但NP ...

  9. Gradify - 提取图片颜色,创建响应式的 CSS渐变

    被请求的HTTP对象之间的延迟会有一个时间段,这个期间网页看起来不完整.Gradify 可以分析出图像中4个最常见的颜色,创建一个梯度(或纯色)作为图片占位符.Gradify 可以在在任何图像发现最突 ...

随机推荐

  1. Rsyslog的三种传输协议简要介绍

    rsyslog的三种传输协议 rsyslog 可以理解为多线程增强版的syslog. rsyslog提供了三种远程传输协议,分别是: 1. UDP 传输协议 基于传统UDP协议进行远程日志传输,也是传 ...

  2. 在.net项目中使用Consul

    1.创建.net core web程序并运行 2.在Consul中注册该服务 Consul支持两种服务注册的方式,一种是通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己 ...

  3. 安装libvirt管理套件(C/S架构模式,用户管理kvm虚拟机)

    # 1:安装程序包 yum install -y libvirt virt-manager virt-viewer virt-install qemu-kvm   # 2:启动libvirtd守护进程 ...

  4. 基于图形学混色问题OpenGl的收获

    void myDisplay(void) {glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_B ...

  5. 各种GIT代码托管工具比较

    bitbucket免费支持5个开发成员的团队创建无限私有代码托管库. GOES是一个由GO语音编写的自组GIT托管服务. gitorious 是一个基于GIT版本控制系统的WEB项目托管平台,基于RU ...

  6. QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开     本文地址:h ...

  7. 微信小程序组件 客服

    <!-- 话务 --> <view class='detail-tel flexca'> <image class='image-full' src='../../img ...

  8. 【bzoj4487】[Jsoi2015]染色问题 容斥原理

    题目描述 棋盘是一个n×m的矩形,分成n行m列共n*m个小方格.现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 1.  棋盘的每一个小方格既可以染色(染成C种颜色中 ...

  9. post方法的数据类型

    form-data.x-www-form-urlencoded.raw.binary的区别 1. form-data 就是http请求中的multipart/form-data,它会将表单的数据处理为 ...

  10. IPv4协议及VLSM可变长子网划分和CIDR无类域间路由

    IPv4协议及VLSM可变长子网划分和CIDR无类域间路由 来源 https://blog.csdn.net/hongse_zxl/article/details/50054817 互联网世界一切通信 ...