2016-11-06 87 views
0

如何打印一個PNG圖像到HTML?Python的CGI打印圖像到HTML

我:

print("Content-Type: image/png\n") 
print(open('image.png', 'rb').read()) 

它打印出:

Content-Type: image/png 
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x0 ... 

That的回答對我沒有幫助。 我有這樣的:

Content-Type: image/png �PNG IHDR�X��%sBIT|d� pHYsaa�?�i IDAT... 

HTTP服務器:

from http.server import HTTPServer, CGIHTTPRequestHandler 
server_address = ("", 8000) 
httpd = HTTPServer(server_address, CGIHTTPRequestHandler) 
httpd.serve_forever() 
+0

你需要的頭部和數據之間的空行 - 所以你需要兩個'\ N'。你可能需要數據大小/長度的標題。 – furas

+0

@furas它沒有改變任何東西。 –

+0

btw:您不打印到HTML,而是打印到HTTP正文。 – furas

回答

0

編輯:在Simple CGI Server with CGI scripts in different languages擴展的源代碼。


我有結構:(所有的代碼是在結束)

project 
├── cgi-bin 
│ └── image.py 
├── image.png 
├── index.html 
└── server.py 

,我跑./server.py(或python3 server.py


CGI服務器可以爲圖像,而不額外的代碼。您可以嘗試

http://localhost:8000/image.png 

或把標籤在HTML(即在index.html

< img src="/image.png" > 

和運行

http://localhost:8000/index.html 

如果您需要動態創建的圖像,然後創建文件夾cgi-bin與腳本即。 image.py
(在Linux上你必須設置執行屬性chmod +x image.py

然後你就可以運行該腳本直接

http://localhost:8000/cgi-bin/image.py 

或HTML

< img src="/cgi-bin/image.py" > 

server.py

#!/usr/bin/env python3 

from http.server import HTTPServer, CGIHTTPRequestHandler 

server_address = ("", 8000) 

httpd = HTTPServer(server_address, CGIHTTPRequestHandler) 
httpd.serve_forever() 

的cgi-bin/image.py

#!/usr/bin/env python3 

import sys 
import os 

src = "image.png" 

sys.stdout.write("Content-Type: image/png\n") 
sys.stdout.write("Content-Length: " + str(os.stat(src).st_size) + "\n") 
sys.stdout.write("\n") 
sys.stdout.flush() 
sys.stdout.buffer.write(open(src, "rb").read()) 

的index.html

<!DOCTYPE html> 

<html> 

<head> 
    <meta charset="utf-8"/> 
    <title>Index</title> 
</head> 

<body> 
    <h1>image.png</h1> 
    <img src="/image.png"> 

    <h1>cgi-bin/image.py</h1> 
    <img src="/cgi-bin/image.py">  
</body> 

</html> 

圖像。PNG

enter image description here