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

时间:2016-05-30 10:30:57

标签: javascript php postgresql canvas base64

我想显示来自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。

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

我的结果是:

The result

我想要的是什么:

The image that I want

(尺寸实际上是相同的)

0 个答案:

没有答案