axe*_*axe 2 python image colors image-processing colormap
大多数图像编辑软件都具有渐变图功能。渐变贴图采用给定像素的亮度并根据亮度应用颜色渐变。Photoshop 和其他软件有办法自动执行此操作,但它们不能完全满足我的要求,所以我认为 Python 可能可以解决这个问题。不幸的是,当我使用 Python 搜索渐变图或颜色图时,我很难理解或应用出现的任何结果。

我发现的所有潜在解决方案线程都使用了 numpy 或 matplotlib,其中有很多数学线超出了我的想象......我希望得到一些帮助。最初我对处理有一些了解,但我发现使用处理导出大量图像的任务很奇怪而且很棘手。另外,我喜欢 Python,并且想学习如何用它编辑和生成艺术作品。
这就是我现在正在做的事情。
from PIL import Image
myPalette = ['#1A1423', '#684756', '#AB8476']
def colorMap(pixel, palette):
# Calculate the brightness of pixel
R, G, B = pixel
brightness = sum([R, G, B])/3
# Map gradient of colors to brightness
# ???...
return mappedColor
img = Image.open('image_input.png')
pixels = img.load()
for x in range(img.size[0]):
for y in range(img.size[1]):
pixel = img.getpixel((x, y))
pixels[x, y] = colorMap(pixel, myPalette)
img.save('image_output.png')
Run Code Online (Sandbox Code Playgroud)
加载、计算亮度和保存都很容易。我只是不知道如何将调色板的渐变应用于像素。
您可以使用ImageMagick或 PIL/Numpy/OpenCV轻松完成此操作。
第一件事是获取颜色图 - 图像右侧下方的垂直条。我没有也不知道Clip Studio,所以也许它可以让您导出颜色图,或者创建灰度渐变并将颜色图应用到它,然后将结果保存为 PNG。就我而言,我将图像加载到 Photoshop 中,剪出渐变并旋转它,以生成256像素宽 x 1 像素高的图像。放大后,看起来像这样:
色彩图.png
我还从图像的左侧裁剪了你的漩涡状物体 - 请将来单独发布图像。
漩涡.png
现在应用它。首先,只需在终端中使用ImageMagick。我加载了您的漩涡图像并将其分成其组成的 RGB 通道,然后对通道进行平均并应用颜色图,也称为CLUT或“颜色查找表”:
magick swirl.png -channel RGB -separate -evaluate-sequence mean colourmap.png -clut result.png
Run Code Online (Sandbox Code Playgroud)
接下来,PIL/Numpy 也是如此:
#!/usr/bin/env python3
import numpy as np
from PIL import Image
# Load image, make into Numpy array and average RGB channels
im = Image.open('swirl.png').convert('RGB')
na = np.array(im)
grey = np.mean(na, axis=2).astype(np.uint8)
Image.fromarray(grey).save('DEBUG-grey.png') # DEBUG only
# Load colourmap
cmap = Image.open('colourmap.png').convert('RGB')
# Make output image, same height and width as grey image, but 3-channel RGB
result = np.zeros((*grey.shape,3), dtype=np.uint8)
# Take entries from RGB colourmap according to greyscale values in image
np.take(cmap.getdata(), grey, axis=0, out=result)
# Save result
Image.fromarray(result).save('result.png')
Run Code Online (Sandbox Code Playgroud)
您还可以生成分段线性颜色图,如下所示:
magick -size 160x1 gradient:navy-"rgb(220,110,110)" \
-size 60x1 gradient:"rgb(220,110,110)"-yellow \
-size 35x1 gradient:yellow-white \
+append colourmap.png
Run Code Online (Sandbox Code Playgroud)
这使得三个段各具有线性渐变:
然后将它们附加在一起。
如果将颜色图的所有段设置为相同的长度,您将得到不同的解释:
magick -size 85x1 \
gradient:navy-"rgb(220,110,110)" \
gradient:"rgb(220,110,110)"-yellow \
gradient:yellow-white +append -resize 256x1\! colourmap.png
Run Code Online (Sandbox Code Playgroud)
这导致了这样的情况: