2010-05-21 92 views
4

我在Windows上運行Python 3.1,我試圖通過cx_Freeze將我的Pygame腳本作爲可執行文件分發。現在看來只是EXE構建不能加載任何圖像進行工作:SDL/Pygame無法使用cx_Freeze加載PNG圖像

Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png 
File is not a Windows BMP file 

谷歌搜索顯示,發生這種情況時,SDL成像庫不能正確包括在內。然而,SDL_image.dlllibpng12-0.dll都被cx_Freeze放到我的build目錄中,所以在我看來,一切都應該沒問題。爲什麼它不能加載PNG圖像?

編輯:我通過將我的腳本移植到Python 2.6並使用py2exe來「解決」了這個問題,因爲它有一些我需要的功能。

+0

凍結之前它可以工作嗎?如果將文件轉換爲.bmp,會發生什麼情況? – joaquin 2010-05-21 15:12:11

+0

是的,凍結前它工作得很好。如果我將圖像轉換爲.bmp,它們會加載正常,但我寧願有可能使用.png的選項。 – tankadillo 2010-05-21 15:18:48

回答

1

通過插入一些python代碼來顯示一條消息,指示這些庫已經加載,另一條消息指示它們的加載導致錯誤,從而進行測試。

try: 
    import SDL_image 
    print "Loaded SDL_image" 
except: 
    print "Failed to import SDL_image" 

try: 
    import libpng 
    print "Loaded libpng" 
except: 
    print "Failed to import libpng" 
+0

我不再使用cx_freeze(請參閱上面的編輯),但我會接受這個答案。 – tankadillo 2010-05-28 15:41:40

2

我多次遇到同樣的問題,但我發現如何處理它。

問題 似乎兩個可能的依賴關係之間存在衝突。文件jpeg.dll包含在JRE中(在Windows上,類似C:\Program Files\Java\jre6\bin\),但它是錯誤的。它應該包含在您的Python安裝中的Pygame目錄中,位於C:\Python31\lib\site-packages\pygame\。不知道爲什麼cx_Freeze更喜歡JRE的那個,但...

如何解決它? 這很容易。只需將正確的文件(Pygame中的文件)複製到您執行cx_Freeze腳本的目錄。當您啓動它時,腳本將首先查看當前目錄,並將找到正確的jpeg.dll。您的可執行文件現在應該能夠導入PNG圖像。