【发布时间】:2015-11-30 17:49:09
【问题描述】:
我的 Restlet 服务器上有一个 image。我想将其传输到客户端以在 FabricJS 画布中显示。
在服务器上,我首先读取图片:
import org.apache.commons.io.FileUtils;
private byte[] readImage() {
try {
return FileUtils.readFileToByteArray(
new File(Utils.composeMapImagePath([...])));
} catch (final IOException exception) {
getLogger().severe(exception.getMessage());
}
return new byte[0];
}
然后,我读取字节数组并使用 Base64 对其进行编码。
@Get
public String getImage() {
[...]
byte[] data = readImage();
return Base64.encode(data, false);
}
在客户端我收到$xhr.responseText 中的文本,以
iVBORw0KGgoAAAANSUhEUgAADMgAABSACAYAAADX2AyFAACAAElEQVR42uzcXW7cuLYGUA+93jKMnkYm0MAdRCNTqYscJN2xDFtSiaT2zzoL38tBI7GrKIrc5M7b29vzGSpAHtHmD/MZkHV+AsD7wvrY+Kn2eRrznj8AAEjq8Xh8GZ+QepL9n89bRL0FvE/MTwAAkdd/FmiADaT5DMxP5gsA7wvxvss1fnw+
然后,我尝试使用类似的代码将字符串转换为 PNG 图像
var img = document.createElement("IMG");
img.onload = function(){
var fImg = new fabric.Image(img, {options});
canvas.add(fImg);
canvas.renderAll();
canvas.setBackgroundImage(img, function() {
canvas.renderAll();
});
}
img.src = myDataURL;
其中myDataURL 是使用以下方法之一构造的:
var myDataURL = "data:image/png;base64," + btoa($xhr.responseText);var myDataURL = "data:image/png;base64," + btoa(unescape(encodeURIComponent($xhr.responseText)));
出现问题,因为图像没有显示在画布中,Chrome 也没有在预览中显示:
我可以同时更改客户端和服务器。
我应该如何对图像进行编码和解码才能正确显示?
【问题讨论】:
标签: javascript java jquery base64 restlet