我想显示来自PostgreSql数据库的图像。我的图像在postgre数据库中保存为bytea。
所以我从php脚本中选择我的图像:
$img = pg_unescape_bytea($row[7]);
$bs64 = base64_encode($img);
我看到“pg_unescape_bytea”对于bytea类型是强制性的,我将结果编码为base64。
因此,我的Javascript客户端收到一个base64字符串,我尝试在画布中显示它。
var canvas = document.getElementById('canvasPrev');
var ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(200, 200);
var pixels = imageData.data;
if (obj[i].image != null) {
var data = text2ua(obj[i].image);
var buffer = data;
for (var j = 0; j < buffer.length; j += 4) {
pixels[j] = buffer[j];
pixels[j + 1] = buffer[j + 1];
pixels[j + 2] = buffer[j + 2];
pixels[j + 3] = buffer[j + 3];
}
console.log(pixels);
ctx.putImageData(imageData, 0, 0);
}
和text2ua功能:
function text2ua(s) {
var ua = new Uint8Array(s.length);
for (var i = 0; i < s.length; i++) {
ua[i] = s.charCodeAt(i);
}
return ua;
}
我知道我的画布正在工作,因为我实现了以相同的方式显示图像,但这不是来自postgre DB。
我的结果图像看起来像原始图像,但颜色不好,图像是半透明的。
我的结果是:
我想要的是什么:
(尺寸实际上是相同的)