1

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()
4

3 回答 3

1

在你的循环中,你总是在写255, 0, 0. 那是红色,绿色,蓝色的三重奏。上述循环的写入255指定最大值为 255。图像的宽度为 256 像素。[0, 255] 范围内有 256 个值。因此,很容易推断出红色分量应该是 X 值。您可以将代码修改为如下所示:

f.write("%d, 0, 0 \n" % x)
于 2013-02-24T23:09:53.513 回答
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 格式):

由修改代码创建的黑色到红色图像

于 2013-02-25T00:14:39.173 回答
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()
于 2013-02-25T00:47:43.657 回答