2013-04-15 41 views
1

我試圖輸入圖像(image1)並水平翻轉,然後保存到文件(image2)。這個工程,但不是我想要的方式鏡像圖像大小錯誤

目前這段代碼給了我一個翻轉的圖像,但它只是顯示圖像的右下角四分之一,所以它是錯誤的大小。我是否在某處覆蓋某些東西?我只想讓代碼水平翻轉圖像並顯示翻轉的整個圖片。我哪裏做錯了?

,我不能只使用鏡子功能或反轉功能,我需要寫一個算法

我得到正確的窗口大小,但圖片大小不正確

def Flip(image1, image2): 
    img = graphics.Image(graphics.Point(0, 0), image1) 
    X, Y = img.getWidth(), img.getHeight() 
    for y in range(Y): 
     for x in range(X): 
      r, g, b = img.getPixel(x,y) 
      color = graphics.color_rgb(r, g, b) 
      img.setPixel(X-x, y, color) 
    win = graphics.GraphWin(img, img.getWidth(), img.getHeight()) 
    img.draw(win) 
    img.save(image2) 
+0

您使用哪個圖像處理庫? – Aya

+0

我正在使用圖形圖像庫 – chh

+0

從來沒有聽說過它。你能提供一個URL嗎? – Aya

回答

2

我覺得你的問題是在這條線:

win = graphics.GraphWin(img, img.getWidth(), img.getHeight()) 

到GraphWin構造函數的第一個參數應該是標題,但你是不是給它的Image對象。這讓我相信,你提供的寬度和高度可能會被忽略。 GraphWin的默認寬度和高度是200 x 200,所以根據圖像的大小,這可能是爲什麼只有一部分被繪製。

嘗試這樣:

win = graphics.GraphWin("Flipping an Image", img.getWidth(), img.getHeight()) 

的另一個問題是,對於圖像的定位點是錯誤的。根據文檔,定位點是圖像中心的渲染位置(因此在0,0時只能看到圖片的右下象限)。這裏是一個可能的解決方案,如果你不知道圖像的大小是在創建的時候是什麼:

img = graphics.Image(graphics.Point(0, 0), image1) 
img.move(img.getWidth()/2, img.getHeight()/2) 
+0

寫出一個算法,所以我應該將img更改爲另一個變量名稱? – chh

+0

是的,嘗試給它一個GraphWin創建窗口標題的字符串。 – Haz

+0

我試過了,它一直給我錯誤,我給它的名字是沒有定義的,唯一一個我可以看到工作的是'img',那麼你建議我把'img'改成什麼? – chh

0

如果您'不反對使用外部庫,我建議Python Imaging Library。特別是,ImageOps模塊有一個mirror函數,它應該完全按照您的要求進行。

+0

好主意,但我不能只是使用這樣的功能,我想但我必須爲此 – chh

2

您正在編輯的源圖像。這將是 最好創建映像副本,並設置這些像素代替:

創建用於編輯的新形象:

img_new = img 

指定的像素值是:

img_new.setPixel(X-x, y, color) 

共繪代之以:

win = graphics.GraphWin(img_new, img_new.getWidth(), img_new.getHeight()) 
img_new.draw(win) 
img_new.save(image2) 

這也會檢查你的跑ges是正確的。如果不是,則會在最終圖像中看到翻轉部分和未翻動部分,顯示哪些部分超出了您的範圍。

+0

我會在'img = graphics.Image(graphics.Point(0,0),image1)'後面加上'img_new = img'嗎?或者別的地方? – chh

+0

是的。緊隨着img的定義之後。 – stanri

+0

cah,新圖像行應該在@haz提示的移動命令之後執行。他們提出了一些好的觀點。 – stanri