2011-09-12 33 views
10

Tôi có một trang web được tạo ra từ python mà làm việc như mong muốn, sử dụng:hình ảnh đầu ra để html sử dụng python

print 'Content-type: text/html\n\n' 
print ""         # blank line, end of headers 
print '<link href="default.css" rel="stylesheet" type="text/css" />' 
print "<html><head>" 

Tôi muốn thêm hình ảnh vào trang web này, nhưng khi tôi làm điều này:

sys.stdout.write("Content-type: image/png\n\n" + file("11.png","rb").read()) 
print 'Content-type: text/html\n\n' 
print ""         # blank line, end of headers 
print '<link href="default.css" rel="stylesheet" type="text/css" />' 
... 

Tất cả tôi nhận được là hình ảnh, sau đó nếu tôi đặt mã hình ảnh dưới đây tiêu đề html/text của tôi tất cả tôi nhận được là văn bản từ hình ảnh, ví dụ:

<Ï#·öÐδÝZºm]¾|‰k×®]žòåËÛ¶ÃgžyFK–,ÑôéÓU½zuIÒ}÷ݧ&MšH’V¯^­?üð¼1±±±zýõ×%IñññÚºu«*W®¬wß}W.—K3gÎÔÌ™ÿw‹Ú””I’¹w¤¥hdÒd½q÷X•Šˆ²m¿þfïÞ½*]º´éÈs;¥¤¤Ø¿ILLÔˆ#rÊ 

Ngoài ra, nếu tôi cố gắng:

print "<img src='11.png'>" 

tôi nhận được một hình ảnh bị hỏng trong trình duyệt, và browing trực tiếp đến hình ảnh tạo ra một lỗi 500 máy chủ nội bộ, với log apache của tôi nói:

8)Exec format error: exec of './../../11.png' failed Premature end of script headers: 11.png 
+0

Thay vì hiển thị cho chúng tôi bản in của bạn, hãy hiển thị cho chúng tôi tệp html đã tạo. –

+0

Bố cục tệp/thư mục là gì? Dường như Apache đang cố gắng thực thi lệnh 11.png của bạn dưới dạng tập lệnh CGI. Bạn thường lưu trữ các tập lệnh CGI trong '/ cgi-bin' và các tài nguyên khác ở nơi khác. Bạn có cơ hội trộn chúng không? – Helgi

Trả lời

34

Bạn có thể sử dụng mã này để trực tiếp nhúng các hình ảnh trong HTML của bạn:

data_uri = open('11.png', 'rb').read().encode('base64').replace('\n', '') 
img_tag = '<img src="data:image/png;base64,{0}">'.format(data_uri) 

print(img_tag) 

Ngoài ra cho Python < 2.6:

data_uri = open('11.png', 'rb').read().encode('base64').replace('\n', '') 
img_tag = '<img src="data:image/png;base64,%s">' % data_uri 

print(img_tag) 

Đối với python> 3 thay thế dòng đầu tiên bởi

data_uri = base64.b64encode(open('Graph.png', 'rb').read()).decode('utf-8').replace('\n', '') 
+0

: 'str' đối tượng không có thuộc tính 'định dạng' args = ("'str' đối tượng không có thuộc tính 'định dạng'",) message = "'str' đối tượng không có thuộc tính 'format' " – Kilizo

+0

Bạn đang sử dụng phiên bản python nào? Dường như dưới 2.6 như str.format đã được giới thiệu ở đó (http://docs.python.org/library/stdtypes.html#str.định dạng) Tôi đã thêm một cách khác để định dạng nên hoạt động trên 2,5 – Glider

+0

Tôi đang sử dụng 2.6.4, đề xuất thứ hai của bạn đã hoạt động, đó là giải pháp duy nhất cho đến nay, cảm ơn, tôi sẽ cung cấp cho bạn 'đánh dấu'! Bất kỳ ý tưởng tại sao tôi không thể chỉ đơn giản là sử dụng "in" '"? – Kilizo

2

Bạn không thể kết hợp HTML và hình ảnh trong cùng một tài liệu như vậy. Sử dụng thẻ <img> để nhúng hình ảnh vào HTML của bạn.

+1

Nhỏ nit (mà tôi không nghĩ là những gì OP có trong tâm trí anyway) là việc sử dụng dữ liệu URIs để kết hợp dữ liệu hình ảnh vào dòng HTML trực tiếp; ví dụ từ trang wikipedia là 'Red dot ' – bgporter

+0

Sử dụng tính năng này, tôi nhận được' hình ảnh bị hỏng 'trong trình duyệt của mình, khi tôi duyệt trực tiếp hình ảnh, tôi nhận được 500 lỗi máy chủ nội bộ. Nhật ký apache của tôi nói: 8) Lỗi định dạng Exec: exec của './../../11.png' không thành công Phần cuối của tiêu đề tập lệnh: 11.png – Kilizo

2

Hình ảnh trong trang web thường là yêu cầu thứ hai đối với máy chủ. Bản thân trang HTML không có hình ảnh trong đó, chỉ cần tham chiếu đến các hình ảnh như <img src='the_url_to_the_image'>. Sau đó trình duyệt thực hiện yêu cầu thứ hai đối với máy chủ và nhận dữ liệu hình ảnh.

Tùy chọn duy nhất bạn phải phân phối hình ảnh và HTML cùng nhau là sử dụng địa chỉ data: trong thẻ img.

+0

Xem chỉnh sửa mới nhất của tôi ở trên. Thanks – Kilizo

1

Bạn không thể chỉ đổ dữ liệu hình ảnh vào HTML.

Bạn cần phải có tệp được phân phối và liên kết đến tệp đó hoặc nhúng hình ảnh được mã hóa trong base64.

Các vấn đề liên quan