gpt4 book ai didi

javascript - 如何使用 ReSTLet 发送(编码)PNG 图像并使用 jQuery 接收(解码)它?

转载 作者:行者123 更新时间:2023-11-29 21:38:38 27 4
gpt4 key购买 nike

我有一个 image在我的 ReSTLet 服务器上。我想将它传输到客户端以在 FabricJS Canvas 中显示它。

首先,我在服务器上读取图像:

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)));

出现问题,因为图像没有显示在 Canvas 中,Chrome 也没有在预览中显示它:

Screenshot

enter image description here

我可以同时更改客户端和服务器。

我应该如何对图像进行编码和解码以使其正确显示?

最佳答案

看来你的问题出在你回复的媒体类型上。

我用 jQuery 进行了测试,我通过如下更新服务器资源使事情正常进行:

@Get
public String getImage() {
[...]
byte[] data = readImage();
return new StringRepresentation(
Base64.encode(data, false),
MediaType.TEXT_PLAIN);
}

在客户端,我使用了这段代码:

<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
function test() {
$.ajax({
url: "/image"
})
.success(function( data ) {
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var img = new Image();

img.onload = function() {
context.drawImage(this, 0, 0, canvas.width, canvas.height);
}

img.src = "data:image/gif;base64," + data;
});
}

$(document).ready(function() {
$('#test').click(function() {
test();
});
});
</script>
</head>
<body>
<div id="test">Test</div>
<canvas id="canvas" width="50" height="50"></canvas>
</body>
</html>

希望对你有帮助,蒂埃里

关于javascript - 如何使用 ReSTLet 发送(编码)PNG 图像并使用 jQuery 接收(解码)它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com