2013-02-24 44 views
1

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

回答

1

在你的循環中,你總是寫着255, 0, 0。這是紅,綠,藍三色。在循環上方寫入255指定最大值爲255.圖像的寬度爲256像素。在[0,255]範圍內有256個值。因此,推斷紅色分量應該是X值是相當簡單的。你可以修改你的代碼看起來像這樣:

f.write("%d, 0, 0 \n" % x) 
+0

此制定出優秀的,謝謝 – user2105564 2013-02-25 04:01:55

+1

說紅色成分應該是因爲圖像正好是256個像素寬X值僅在特定的情況下,正確的。一般來說,對於其他寬度的任意大小的圖像,這將是不真實的,並且顏色會有所不同。 – martineau 2013-03-04 04:22:35

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格式爲這個網站):

black to red image created by modified code

+0

謝謝你,這個結果非常好 – user2105564 2013-02-25 04:01:26

+0

@ user2105564:請注意,計算每個像素的紅色量時,會考慮圖像的「寬度」。其他答案不這樣做,所以雖然它們可能適用於您的示例中使用的256像素寬的圖像,但它們不能解決更普遍的問題。 – martineau 2013-03-04 04:26:07

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() 
+0

這工作出色,謝謝。 – user2105564 2013-02-25 04:02:29