请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 1481|回复: 5

HTMLayout窗口程序,如何动态生成二维码图片并加载

[复制链接]

1

主题

3

帖子

3

积分
交易币
0

新手入门

Rank: 1

发表于 2017-4-7 15:06:51 | 显示全部楼层 |阅读模式
需求:在htmlayout的窗口程序中,我动态输入一个字符串,通过aardio自带的二维码生成库来将字符串生成为二维码,然后将这个二维码在div或者img标签中加载显示出来。
说明:
我个人根据群友幻月的指导,我进行了尝试,但是并没有成功。(我是新手)下面是我尝试的代码。可能我本来的方法就是错误的。还请大神指导一下。

[aardio] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=822;bottom=567;border="none")
mainForm.add()
/*}}*/
import web.layout;
import web.layout.behavior.windowCommand;
wb = web.layout(mainForm);

import io;
io.open();

import qrencode;
var qr = qrencode.string("www.baidu.com");

import crypt.bin;
var strImg = crypt.bin.encodeBase64(qr.data);

import fsys.mime;
var mime = fsys.mime.fromFile( strImg )

var strUrl = string.format('url(data:%s;base64,\r\n%s)',mime,strImg  ) ;


wb.onDocumentComplete = function() 
{
	var eleQr = wb.getEle("QRcode");
	eleQr.style["background-image"]=strUrl;
}


wb.html=/**
<!doctype html>
<html lang="en" style="background-color:#808080;margin:0px;width:100%;height:100%;">
	<div id="QRcode">
	</div>
</html>
**/;

wb.css=/**
#QRcode{
	border:1px solid red;
	width:400px;
	height:400px;
}
**/
mainForm.show();
return win.loopMessage();


回复

使用道具 举报

0

主题

46

帖子

42

积分
交易币
0

新手入门

Rank: 1

发表于 2017-4-7 17:00:23 | 显示全部楼层
注意看范例,
qrencode.string("www.baidu.com") 只是得到二维码数据,并不是图像。qrencode.bitmap("www.baidu.com").copyBitmapString(100,"*.jpg") 才是得到图像的数据。




回复 支持 反对

使用道具 举报

0

主题

3

帖子

3

积分
交易币
0

新手入门

Rank: 1

发表于 2017-4-7 17:03:00 | 显示全部楼层
[aardio] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=822;bottom=567;border="none")
mainForm.add()
/*}}*/
import web.layout;
import web.layout.behavior.windowCommand;
wb = web.layout(mainForm);

io.open();

var path = "\1.jpg";
import qrencode.bitmap;
var qrBmp = qrencode.bitmap("www.baidu.com",0,0);
qrBmp.copyBitmap(500).save(path, 100);

import fsys.mime;
var mime = fsys.mime.fromFile( path )

import crypt.bin;
var strUrl = string.format('url(data:%s;base64,\r\n%s)',mime,crypt.bin.encodeBase64( string.load(path) ) ) 
strUrl = string.replace(strUrl,'\r\n',"");

wb.html=/**
<!doctype html>
<html lang="en" style="background-color:#808080;margin:0px;width:100%;height:100%;">
    <div id="QRcode">
    </div>
</html>
**/;
 
wb.css=/**
#QRcode{
    border:1px solid red;
    width:400px;
    height:400px;
    background-image:none;
}
**/

wb.$1("#QRcode").style["background-image"]=strUrl;
mainForm.show();
return win.loopMessage();
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2017-4-7 17:11:24 | 显示全部楼层
感谢楼上二位的指导。
回复 支持 反对

使用道具 举报

0

主题

51

帖子

184

积分
交易币
0

编程一段

Rank: 2

发表于 2017-4-8 13:37:42 | 显示全部楼层
好东西。收下了
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2017-4-15 15:50:24 | 显示全部楼层
根据幻月大神的指导,我重新整理了一下。移除了保存到本地文件的步骤,本地不生成任何文件。直接展示,代码如下。
[aardio] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=400;bottom=400;border="none")
mainForm.add()
/*}}*/
import web.layout;
import web.layout.behavior.windowCommand;
wb = web.layout(mainForm);

import qrencode.bitmap;
import crypt.bin;
import fsys.stream;

var qrBmp = qrencode.bitmap("www.baidu.com",0,0);
var streamImg = fsys.stream();
qrBmp.copyBitmap(300).saveToStream(streamImg);	//宽度300

var strImgData = crypt.bin.encodeBase64( streamImg.readAll() );

var strUrl = string.format('url(data:image/jpeg;base64,\r\n%s)',strImgData ) 
strUrl = string.replace(strUrl,'\r\n',"");

wb.html=/**
<!doctype html>
<html lang="en" style="position:absolute;left:0px;top:0px;background-color:#808080;margin:0px;width:100%;height:100%;">
	<div id="QRcode">
	</div>
</html>
**/;

wb.css=/**
#QRcode{
	position:absolute;
	left:50px;
	top:50px;
	border:1px solid red;
	width:300px;
	height:300px;
	background-image:none;
}
**/

wb.$1("#QRcode").style["background-image"]=strUrl;
mainForm.show();
return win.loopMessage();
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2019-11-15 20:31 , Processed in 0.078125 second(s), 25 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表