2013-02-19 48 views
0

我需要有一個Python文件,就像它是一個圖像一樣。即Python文件的路徑將在網頁的標籤內使用。 Python文件將使用PIL動態創建一個圖像(無中間保存到文件)。在Python/Web.Py中使用PIL提供動態圖像的正確方法

我使用Python 2.7,Web.Py,& PIL,並在32位Windows XP上開發,使用WAMPSS Web服務器並使用最新的Chrome。

我是差不多那裏。我認爲。

這裏是我的Python圖像文件的砍伐例如:

#!/home/bin/python 
# ############################################################################# 
import web, sys 
from PIL import Image, ImageDraw, ImageFont 
# ############################################################################# 
class debug: 
    def GET(self): 
     # drawing with PIL (Python Image Library) 
     # create a new 256x256 pixel image surface (default is black bg) 
     img = Image.new("RGB", (256, 256)) 
     # set up the new image surface for drawing 
     draw = ImageDraw.Draw (img) 
     # REMOVED - Image manipulation 
     # Output the image to the browser 
     sys.stdout.write('Status: 200 OK\r\n') 
     sys.stdout.write('Content-type: image/png\r\n') 
     sys.stdout.write('\r\n') 
     img.save(sys.stdout, "PNG") 
# ############################################################################# 
urls = ('/debug.py', 'debug') 
app = web.application(urls, globals()) 
if __name__ == "__main__": 
    app.run() 
# ############################################################################# 

現在,這個工程...有點兒。

如果我直接在瀏覽器(本地AMPSS服務器)中查看此文件,它會顯示圖像。但是,與類似的1k PNG圖像相比,顯示/服務器需要很長時間(5+秒)。和Chrome控制檯說,它失敗了(雖然我可以看到圖像)

我認爲瀏覽器正在期待別的東西,我沒有發送?

當我在JQuery和OnLoad事件中使用此圖像時,出現了實際問題。事情變得......奇怪......因爲缺乏一個更好的詞彙。我似乎有事件(不是我的),它在顯示加載&許多秒後清除圖像。

的鉻控制檯說,檢索圖像時,GET失敗(雖然它不顯示圖像,至少直到JS什麼使得它再次消失!)

有趣的是,這個問題似乎並沒有出現在最新的Firefox中。 在最新的Opera中加載時間被誇大了,但JS不會影響圖像。在IE8中也是一樣

爲了讓事情更混亂,我有兩臺Windows XP(32位)開發機器。他們之中沒有發生JS故障。 Chrome控制檯不會列出任何錯誤!

我已經穿上了圖像文件的在線演示在這裏:LINKY 和使用這個文件我在這裏的發展頁:LINKY 如果你點擊周圍的白色圖像執行人了jQuery/JS會激活。

我不知道這是否適用於您的設置。我只是爲了完整而鏈接到這裏。

關於我失蹤的任何想法?

回答

1

在web.py中,您應該返回必須發送到瀏覽器的內容。還使用web.header來設置HTTP標頭。

保存圖像StringIO,並返回其內容:

import StringIO 

# in GET(self): 
web.header('Content-type', 'image/png') 
buf = StringIO.StringIO() 
img.save(buf, "PNG") 
contents = buf.getvalue() 
return contents 
+0

我接受你的建議是正確的方法來輸出數據,但它會出現我的方式(但編碼錯誤的)創建的輸出,其中相同瀏覽器感到擔憂。我最終發現,我的問題是由Chrome和卡巴斯基之間的一個奇怪的不兼容性錯誤引起的,數據字節丟失。不幸的是,在我的代碼中不可修復,儘管至少我現在正在爲Web.Py提供正確方法中的數據。 – Dave 2013-02-21 11:37:12

相關問題