利用Base64在代码中嵌入图片文件

做一些小工具的时候,偶尔会用到一些LOGO、图标、光标之类的小图片,把资源放在外面又显得不够简洁。

这时候,把图片文件转成代码嵌入到源文件中,也不失为一个不错的解决方案。

在aardio中,通过加密解密库crypt中的encodeBase64函数,可以把文件编码成可见的文本,把这段文本保存到源代码中。在需要用到图片资源的时候,再用decodeBase64解码还原。

这里的例子,演示了怎么编码、解码的过程,也顺便演示了怎么在树形视图treeview中,不同节点使用不用图标的方法。

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=959;bottom=759)
winform.add(
button={cls="button";text="加载图片并转码  =>";left=96;top=272;right=232;bottom=312;z=4};
button2={cls="button";text="=>  解码并显示图片";left=720;top=272;right=856;bottom=312;z=5};
button3={cls="button";text="解码图标并预览";left=552;top=680;right=704;bottom=712;z=11};
editBase64={cls="edit";left=248;top=56;right=704;bottom=312;edge=1;hscroll=1;multiline=1;vscroll=1;z=3};
editIcon={cls="edit";left=32;top=400;right=704;bottom=658;edge=1;hscroll=1;multiline=1;vscroll=1;z=10};
groupbox={cls="groupbox";text="图片和Base64互转";left=16;top=24;right=936;bottom=336;edge=1;z=2};
groupbox2={cls="groupbox";text="演示解码为图标";left=16;top=368;right=936;bottom=736;edge=1;z=1};
plusIcon={cls="plus";left=32;top=680;right=536;bottom=712;edge=1;repeat="center";z=13};
plusImage={cls="plus";left=32;top=56;right=232;bottom=256;edge=1;repeat="scale";z=8};
plusImgBase64={cls="plus";left=720;top=56;right=920;bottom=256;edge=1;repeat="scale";z=9};
static6={cls="static";left=16;top=944;right=80;bottom=968;transparent=1;z=7};
staticHexLen={cls="static";left=200;top=488;right=264;bottom=512;transparent=1;z=6};
treeview={cls="treeview";left=720;top=400;right=920;bottom=704;asel=false;bgcolor=16777215;edge=1;z=12}
)
/*}}*/

import crypt.bin;
winform.button.oncommand = function(id,event){
	import fsys.dlg;
    var path = fsys.dlg.open("图像文件|*.jpg;*.jpeg;*.bmp;*.gif;*.png;", , , winform)
    if (path) {
        winform.plusImage.background = path; //预览图片        
        var stream = ..string.load(path); //加载图片到数据流        
        var strBase64 = crypt.bin.encodeBase64( stream ); //base64编码
        winform.editBase64.text = strBase64;
    }
}

winform.button2.oncommand = function(id,event){
	if (#winform.editBase64.text){		
		var bmpBase64 = crypt.bin.decodeBase64( winform.editBase64.text ); //base64编码解码为图片
		winform.plusImgBase64.background = bmpBase64;
	}
}

// 一个图标组图像
var base64Str = "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
D/wgxQbYWX/MG5zjW
BghbUBq06gCuDOAGCGnQCCFXRQlVQgYq6oAIuyGgN9FQTIFLUohjVKEcXqhA/rkoGt4SYH6mC0hv88gcrNYAbi2nMCewunm3UHzGNqUahLE1hFqDB/lgiVP5xzgfdDMAFOAACw4xTBW4hiw5EFwJ1KuQ8OzJWspLFSGg+6wNBSsAk57lC4dkTnzmIIQ8yoIHJlTWOQqKKFKWoUIUCsSFynWtdSeoyVn1QijXhq0D82irM8TWmtCIALlPlg10qxgQXm2AwC5BGphi0MWOdwUyLKQGbGqkHuFOAVtBIAzVWZLTO3KZLZWAAm0RgsTAlpzlnuwOr/36EaEajXVdLKrtW6Uis/mShWVFAXOL+LAE82CcGKim8gE7QAmsb29oE6wHoHnG6dy3pB6M70uzCdLvc7ehaVnqs16rUNAqTAVFgG1tW4cAmNGAKPhUC3LcK4AXx7WxBJXK5mgiVs8e0yH+NGeBtovdYiu2jXC1QE8EQwLbE0kjRZqfbNyUFtK2cUGMuwOEe2MAGIAixiEPcGBa0wAEoRjEK7HnPiYxtroFtsA6Q82LAxpgAM15IjQ0rYxrPlceZy3FsK7iY857oMIo5gJEjgJgXvOBcC0kAhy/gYRCD4AWWJXGSYnZfLDvZtBTp8jGdfNQjyy+yJR2xmkNcA5V00H+vIeQvCQmwuZU4Zsoc+LCVtTzBBnRkASRoiw7cghwP+DnQgR4LoVN1aEALetElbXSi3QJpTTno0irFNKYlYulLX+ADCFTJk19g05V4mSWn1qamL70XiyALRTDqkiND3WqWrFrTC7n1phWia1bzutebqrWwh12RL6OazMS2SEAAADs=";

winform.editIcon.text = base64Str;

winform.button3.oncommand = function(id,event){
	if (#winform.editIcon.text){		
		var bmpBase64 = crypt.bin.decodeBase64( winform.editIcon.text ); //base64编码解码为图片
		winform.plusIcon.background = bmpBase64; //预览图片
		
		import win.imageList;
		var imageList = win.imageList(16,16).add(bmpBase64); //创建图像列表
		winform.treeview.setImageList( imageList,0/*_TVSIL_NORMAL*/ ); //给treeview指定图像列表
		
        //创建treeview的项目
		var t = {};
		for(i=1;16;1){
			table.push(t, {text="node" ++ i;iImage=i});		
		}		
		winform.treeview.insertItem(t); 
	}	
}

winform.show();
win.loopMessage();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值