在 JavaScript 中,当我们知道红色、蓝色、绿色的值时,我如何改变颜色的亮度,就像在 MSPaint 中一样?
问问题
1662 次
1 回答
2
这个问题与 Javascript 无关,我不知道您对 MSPaint 有什么影响。另外,仅仅为了调整亮度而在色彩空间之间进行转换可能过于昂贵。有一种更简单的方法可能对您来说已经足够好了,它是一种快速且易于执行的伽马校正。如果您的红色、绿色和蓝色值在 [0, 255] 范围内,您还可以轻松创建一个查找表 ( lut
),该表将用于快速应用范围 [0, 255]。这个方法的伪代码是:
GAMMA = k
lut = []
for i = 0 to 255
v = i/255.0
lut.push(round(255 * (v ^ GAMMA)))
foreach x, y in image
image[x, y] = lut[image[x, y]]
大于 1的值k
会使图像变亮,小于 1 会使图像变暗。伽马校正应用于每个像素分量(即,单独的红色、绿色和蓝色)。以下是一些k = 1, 2, 3
分别带有 的示例:
执行此操作的完整 Python 代码(可能有助于 Javascript 翻译):
import sys
from PIL import Image
GAMMA = 1/3.0
lut = []
for i in xrange(256):
v = i/255.
lut.append(round(255 * (v ** GAMMA)))
img = Image.open(sys.argv[1])
img = img.point(lambda x: lut[x])
img.save(sys.argv[2])
于 2012-12-30T14:04:50.457 回答