Javascript 使用PostgreSql中的Base64字符串显示图像

Javascript 使用PostgreSql中的Base64字符串显示图像,javascript,php,postgresql,canvas,base64,Javascript,Php,Postgresql,Canvas,Base64,我想显示一个来自PostgreSql数据库的图像。我的图像保存为postgre DB中的bytea 因此,我从php脚本中选择图像: $img = pg_unescape_bytea($row[7]); $bs64 = base64_encode($img); 我看到“pg_unescape_bytea”是bytea类型的必填项,我将结果编码为base64 因此,我的Javascript客户端接收到一个base64字符串,我尝试在画布中显示它 var canvas = docu

我想显示一个来自PostgreSql数据库的图像。我的图像保存为postgre DB中的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);
           }
var canvas=document.getElementById('canvasPrev');
var ctx=canvas.getContext('2d');
var imageData=ctx.createImageData(200200);
var像素=imageData.data;
if(obj[i].image!=null){
var数据=text2ua(obj[i].图像);
var缓冲=数据;
对于(变量j=0;j
和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;
}
功能文本2UA(s){
var ua=新的UINT8阵列(s.长度);
对于(变量i=0;i
我知道我的画布工作正常,因为我实现了以同样的方式显示图像,但这不是来自postgre DB

我的结果图像看起来像原始图像,但颜色不好,图像是半透明的

我得到的结果是:

我想要的是:


(维度实际上是相同的)

明智的做法是不要将图像存储在数据库中。您可以尝试只构建一个图像,并将其用作图像源,而不是使用画布。
“数据:图像/png;base64,“+obj[i].图像
如果您需要它在画布中,请通过
我已经尝试过了,但是图像无效。。。obj[i]。图像等同于:明智的做法是不将图像存储在数据库中。您可以尝试只构建一个图像,并将其用作图像的源,而不是使用画布。
'data:image/png;base64,“+obj[i].图像
如果您需要它在画布中,请通过
我已经尝试过了,但是图像无效。。。obj[i]。图像等于: