使用Python将ppm颜色从黑色渐变为红色
Python
我该如何修改这段代码,让它生成一张从左到右渐变的图片,左边是黑色,右边是红色。
def main():
f = open("testImage.ppm","w")
f.write("P3 \n")
width=256
height=256
f.write("%d %d \n"%(width,height))
f.write("255 \n")
for i in range(width*height):
x=i%256
y=i/256
f.write("255, 0, 0 \n")
f.close()
main()
3 个回答
0
你快到了,但你需要把你的红色计算放到一个循环里,这个循环会遍历每一个像素。你现在一直在写(255,0,0),但你其实想写的是(x,0,0)。
def main():
f = open("testImage.ppm","w")
f.write("P3 \n")
width=256
height=256
f.write("%d %d \n"%(width,height))
f.write("255 \n")
for i in range(width*height):
x=i%256
y=i/256
f.write("%s, 0, 0 \n" % x) #SEE THIS LINE
f.close()
main()
1
因为你想要从左到右的渐变效果是从黑色变成红色,所以图像的每一行都是一样的,只需要创建一次,然后重复使用就可以了。PPM图像文件中的每一行数据看起来会像下面这样,每组三个值对应一个RGB颜色值:
0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 . . . 251 0 0 252 0 0 253 0 0 254 0 0 255 0 0
这里有一个修改过的代码版本,可以实现这个效果:
def main():
with open("testImage.ppm", "wb") as f:
f.write("P3\n")
width = 256
height = 256
f.write("%d %d\n"%(width,height))
f.write("255\n")
delta_red = 256./width
row = ' '.join('{} {} {}'.format(int(i*delta_red), 0, 0)
for i in xrange(width)) + '\n'
for _ in xrange(height):
f.write(row)
main()
这是实际的结果(为了这个网站的需要,已经转换成了.png格式):
1
在你的循环里,你总是写着 255, 0, 0
。这其实是红、绿、蓝三种颜色的组合。上面循环中的 255
表示最大值是255。你的图片宽度是256个像素,所以在0到255的范围内有256个值。因此,我们可以很简单地推断出红色的部分应该是X值。你可以把你的代码改成这样:
f.write("%d, 0, 0 \n" % x)