Python 基于图像算法的调色板
我正在尝试写一个简短的脚本,它将从一幅图像和最终的一系列图像中生成并优化调色板 我发现了这段很棒的动作脚本代码,它正是我所需要的 并着手制作一个pythonic版本,但很难启动并运行它,部分原因可能是pythonforloops是如何工作的 任何关于我可能出错的想法,我都很感激 从手机发帖(还不值得github发帖),这里是Dropbox中文件的链接Python 基于图像算法的调色板,python,colors,actionscript,Python,Colors,Actionscript,我正在尝试写一个简短的脚本,它将从一幅图像和最终的一系列图像中生成并优化调色板 我发现了这段很棒的动作脚本代码,它正是我所需要的 并着手制作一个pythonic版本,但很难启动并运行它,部分原因可能是pythonforloops是如何工作的 任何关于我可能出错的想法,我都很感激 从手机发帖(还不值得github发帖),这里是Dropbox中文件的链接 导入json 输入数学 将urllib2导入为urllib 导入颜色数学 从cStringIO导入StringIO 从PIL导入图像,图像调色
导入json
输入数学
将urllib2导入为urllib
导入颜色数学
从cStringIO导入StringIO
从PIL导入图像,图像调色板
req=urllib.urlopen('http://media-cache-ec0.pinimg.com/237x/27/6f/07/276f07de404a4c9e16bcb3898bbe574a.jpg')
res=StringIO(req.read())
image=image.open(res)
image\u colors=image.getcolors(256*256)
#调色板=图像。转换(“P”,调色板=图像。自适应,颜色=256)
#palette\u colors=palette.getpalette()
颜色\u排序=排序(图像\u颜色,反向=真)
仅def颜色(已排序的颜色):
仅颜色=[]
对于已排序的每个颜色:
仅适用于颜色。附加(每个[1])
仅限返回颜色
def类似(颜色1,颜色2,公差=0.01):
距离=0
公差=公差*(255.00*255.00*3.00)
距离+=数学功率(color1[0]-color2[0],2)
距离+=数学功率(color1[1]-color2[1],2)
距离+=数学功率(color1[2]-color2[2],2)
打印距离
印刷公差
如果距离我也在手机上,所以不能把它发展成一个完整的答案,但我建议看一下PIL,而不是试图自己直接做太多。这里有一个使用调色板的例子:@Neil谢谢你的回复。我一直在玩PIL&使用另一个链接中建议的convert函数。它对于减小调色板大小很有用,但我想从图像中提取有趣的颜色,而不是减小调色板(并失去真实颜色),如我链接到的示例中所示。也许有一种方法可以用PIL实现这一点?
import json
import math
import urllib2 as urllib
import colormath
from cStringIO import StringIO
from PIL import Image, ImagePalette
req = urllib.urlopen('http://media-cache-ec0.pinimg.com/237x/27/6f/07/276f07de404a4c9e16bcb3898bbe574a.jpg')
res = StringIO(req.read())
image = Image.open(res)
image_colours = image.getcolors(256*256)
# palette = image.convert("P", palette=Image.ADAPTIVE, colors=256)
# palette_colours = palette.getpalette()
colours_sorted = sorted(image_colours,reverse=True)
def colours_only(colours_sorted):
colour_only = []
for each in colours_sorted:
colour_only.append(each[1])
return colour_only
def similar(colour1, colour2, tolerance = 0.01):
distance = 0
tolerance = tolerance * (255.00 * 255.00 *3.00)
distance += math.pow(colour1[0] - colour2[0], 2)
distance += math.pow(colour1[1] - colour2[1], 2)
distance += math.pow(colour1[2] - colour2[2], 2)
print distance
print tolerance
if distance <= tolerance:
return True
def different(colour, colours, tolerance = 0.01):
for col in colours:
if similar(colour,col,tolerance) == True:
return False
return True
def unique_colours(colours,tolerance = 0.01):
unique = []
x = 0
for each in colours:
while x < len(unique)
if different(each, unique, tolerance) and :
unique.append(item)
return unique
print different((255,0,0),colours_only(colours_sorted))
print unique_colours(colours_only(colours_sorted))