以下是步骤:
ImageOps.colorize(..., white='red')
使图像从黑到红,而不是从黑到白Image.new()
创建背景图像paste(..., mask=originalImage)
粘贴到背景上-面膜确保您仅粘贴到原始图像不透明的背景上,而不是透明的地方像这样:
from PIL import Image, ImageOps
# Load image
im = Image.open('cross.png')
# Colorize
red = ImageOps.colorize(im.convert('L'), black='black', white='red')
red.save('DEBUG-red.png')
# Make solid white background, same size as cross
bg = Image.new('RGB', size=im.size, color='white')
# Paste
bg.paste(red, mask=im)
这是一种利用HSV个色彩空间的略有不同的方法:
from PIL import Image, ImageOps
im = Image.open('cross.png')
brightness = im.convert('L')
# Set Hue angle to 0 degrees, i.e. red
Hue = Image.new('L', size=im.size, color=0)
# Set Saturation to 50%, not too vivid
Sat = Image.new('L', size=im.size, color=128)
coloured = Image.merge('HSV', (Hue, Sat, brightness)).convert('RGB')
coloured.save('DEBUG-coloured.png')
bg = Image.new('RGB', size=im.size, color='white')
bg.paste(coloured, mask =im)
bg.save('result.png')
或者制作go 饱和的蓝色-将128更改为255以变得生动和饱和:
from PIL import Image, ImageOps
im = Image.open('cross.png')
brightness = im.convert('L')
# Set Hue angle to 240 degrees scaled to unsigned char range
Hue = Image.new('L', size=im.size, color=int(240*255/360))
# Set Saturation to 50%, not too vivid
Sat = Image.new('L', size=im.size, color=128)
coloured = Image.merge('HSV', (Hue, Sat, brightness)).convert('RGB')
coloured.save('DEBUG-coloured.png')
bg = Image.new('RGB', size=im.size, color='white')
bg.paste(coloured, mask =im)
bg.save('result.png')