【Delphi + Vue】Web后端动态图片传递给前端

21 篇文章 3 订阅

在用Delphi做Web后台的时,有时需要用到后台动态生成二维码图片,给前端使用,虽然前端可以通过js库生成,目前流行的有 QR码生成器(在线)、QRCode.js(支持本地)、 arale-qrcode(支持本地)等,生成的效果也都满意。但是这些js库都使用的是H5的cavas来画图,在一些早期的Android设备上不支持(例如:Android 5.1)。在这种情况下,就需要后台生成好图片,然后经过base64编码后发送给前端,从而实现图片显示支持部分低版本的设备。如果应用不考虑低版本,当然直接使用js库就是很方便的。

言归正传,delphi 做后台,生成好图片信息,通过base64传递到前端,前端经过解码,实现图片显示。

一、服务端:Delphi 代码示例(需要单元:System.NetEncoding)

// 1. 按照stream 返回数据
  MM := TMemoryStream.Create;
  MM.LoadFromFile('a3650.jpg');  //如果动态生成的图片,就完全不需要文件装载,直接编码输出即可
  MM.Position := 0;     //注意,指针要移到首位
  SetLength(B,MM.Size);
  MM.Read(B[0],MM.Size);
  MM.Free;

  S := TNetEncoding.Base64.EncodeBytesToString(B);
  S := S.Replace(#13,'').Replace(#10,''); //经过delphi Base64后的编码,会中间插入回车换行,主要时便于肉眼观察,js前端实际使用中时不需要的
  B := TEncoding.UTF8.GetBytes(S);   //给前端的是UTF8编码
  C.Response.StatusCode := 200;        //返回状态码
  C.Response.Close(B);                //返回编码后的图片数据到前端


 

<div>
   <img :src="imgSrc" alt="">
</div>
axios.post('http://192.168.1.190/icenter/30001/J',
            {aaa:'123'},
            {headers: 
                {'Content-Type': 'application/x-www-form-urlencoded'}})
   .then(res => {
       this.imgSrc = 'data:image/jpg;base64,' + res.data; //imgSrc 是Vue中 img 标签的src
    });

三、需要注意的地方:

1、delphi进行的Base64编码需要将中间的回车换行(#13#10)去掉;

2、对于前端img标签,src表示的是图片源,格式一定是:data:image/jpg;base64, + 后台返回的信息。

3、在测试中,建议自己做一个10x10的小纯红色图片,这样调试起来数据比较小,简单很多。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值