Làm cách nào để hiển thị hình ảnh được lưu trữ dưới dạng mảng byte trong HTML / JavaScript? [đóng cửa]


81

Tôi đang viết một trang web bằng HTML / JavaScript. Tôi đang tải xuống một hình ảnh từ chương trình phụ trợ của mình bằng AJAX. Hình ảnh được biểu thị dưới dạng mảng byte thô, không phải URL, vì vậy tôi không thể sử dụng <img src="{url}">phương pháp tiếp cận chuẩn .

Làm cách nào để hiển thị hình ảnh được đề cập cho người dùng?



OutputStream o = resp.getOutputStream (); o.write (imageInBytes);

1
Tôi ngại hỏi, nhưng sự tò mò đã chiến thắng ... Tại sao điều này lại lạc đề?
cubuspl42

Tôi không nghĩ vấn đề này là lạc đề.
metasoarous

Câu trả lời:


136

Hãy thử đặt đoạn mã HTML này vào tài liệu được cung cấp của bạn:

<img id="ItemPreview" src="">

Sau đó, về phía JavaScript, bạn có thể tự động sửa đổi srcthuộc tính của hình ảnh với cái gọi là URL dữ liệu .

document.getElementById("ItemPreview").src = "data:image/png;base64," + yourByteArrayAsBase64;

Ngoài ra, sử dụng jQuery:

$('#ItemPreview').attr('src', `data:image/png;base64,${yourByteArrayAsBase64}`);

Điều này giả định rằng hình ảnh của bạn được lưu trữ ở định dạng PNG, khá phổ biến. Nếu bạn sử dụng một số định dạng hình ảnh khác (ví dụ: JPEG), hãy sửa đổi ( một phần) kiểu MIME"image/..." trong URL cho phù hợp.

Các câu hỏi tương tự:


2
Byte của tôi = dwr / download / k1a3JvBCfU3vLji $ zKkhQObxzck. src = data: image / png; base64, dwr / download / k1a3JvBCfU3vLji $ zKkhQObxzck. Tôi sử dụng DWR

Định dạng Byte Hình ảnh Tải xuống.
Diamond King

2
Đến bữa tiệc muộn nhưng nếu câu trả lời của bạn giống như vậy [137,80,78,71,13,10,26,10,0,...], bạn có thể sử dụng dòng này:document.getElementById("ItemPreview").src = "data:image/png;base64," + btoa(String.fromCharCode.apply(null, new Uint8Array([137,80,78,71,13,10,26,10,0,...])));
Joel'- '

1
Tôi đã chỉnh sửa câu trả lời một chút để làm cho nó rõ ràng hơn, nhưng tôi không hiểu một điều nên tôi đã không thực sự sửa nó. Tại sao câu trả lời này giả định rằng hình ảnh được lưu trữ trong một chuỗi base64? OP đã đề cập (và tôi đã kiểm tra lịch sử chỉnh sửa) một "mảng byte", không phải "chuỗi base64".
cubuspl42

1
@ Joel'- 'Điều đó phù hợp với tôi,
Cảm ơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.