最终还是在条码制作器中加入了摄像头扫描条码的功能,只是作为一个补充,功能重点还是在制作条码方面。采用zxing 2.3.0版的库实现编解码功能,摄像头扫描部分大部分是从zxing舶来的代码,并做了一些优化,比如竖屏支持。感觉制作好条形码比较麻烦,因为有些类型的条形码对输入字符有要求,优化了一下输入框,使之可以提示那些字符可以接受。对于EAN8,EAN13和UPC-A的条形码来说,最后一位是不能随便输的,不然制作好了之后解码不了,这是校验位,好吧,还是把这工作留给条码制作器了,请参见《EAN8,EAN13和UPC-A的校验位计算》

条码制作器6.2版的变化
1. 改进架构,条码制作后可以随意更改颜色等
2. 增加通过摄像头扫描条码功能,支持前置摄像头、闪光灯
3. 支持在条码底部添加信息
4. 支持修改背景颜色
5. 修复部分生成的条码码无法解码
6. 图像生成算法优化,内存优化
7. 修复制作后不能立即在图库显示
8. 新的APP图标
9. 二维码错误修正等级默认为L
10.自动为EAN8,EAN13,UPC-A条码增加校验位,防止生成的条码无法解码
11.新增Aztec、DataMatrix格式的条码编解码
12.优化条形码输入框,更加易于使用
13.支持通过摄像头扫描PDF 417格式二维码

下载

Google Play  从应用汇下载

条码制作器

条码制作器

最近在条码制作器新版中加入了EAN8,EAN13和UPC-A的校验位自动计算功能,实现的算法如下:

/* 不含校验位的EAN8,EAN13编码 */
public static int getEANCheckSUM(String EAN8orEAN13) {
	if(EAN8orEAN13.length() != 12) {
		EAN8orEAN13 = "00000" + EAN8orEAN13; //如果是EAN8条码,自动在前面补足5个0凑成EAN13来计算
	}
	if(EAN8orEAN13.length() != 12) {
		return 0;
	}
 
	int c1 = 0;
	int c2 = 0;
	for(int i = 0; i<EAN8orEAN13.length(); i++) {
		int c = EAN8orEAN13.charAt(EAN8orEAN13.length() - i - 1) - '0';
		if(i % 2 == 0)
			c1+=c;
		else
			c2+=c;
	}
	int cc = 10 - (c1 * 3 + c2)%10;
	if(cc==10)
		return 0;
	else
		return cc;
}
 
public static int getUPCACheckSUM(String UPCA) {
	if(UPCA.length() != 11) {
		return 0;
	}
 
	int c1 = 0;
	int c2 = 0;
	for(int i = 0; i<UPCA.length(); i++) {
		int c = UPCA.charAt(UPCA.length() - i - 1) - '0';
		if(i % 2 == 0)
			c1+=c;
		else
			c2+=c;
	}
	int cc = 10 - (c1 * 3 + c2)%10;
	if(cc==10)
		return 0;
	else
		return cc;
}

《支持扫描条码,条码制作器6.2版》

很不习惯荣耀3C私自给图标加个边框并私自替换图标,个人比较喜欢Android原生的图标。恢复方法很简单,由于替换的图标都来自于主题文件,自己从在线主题里找一个比较接近Android原生风格的,下载下来,不要应用!然后把主题文件(.hwt结尾的,一般在HWTheme目录下)传到电脑,用WinRAR打开,删除其中的icons文件,这个文件里面存放的就是要私自替换的图标!然后再把修改后的hwt文件传回去覆盖HWTheme文件夹下原先那个文件即可,然后再选择刚刚修改那个主题,应用即可!原生图标就回来了!

荣耀3C上的Android原生图标

想给一张PNG图标用Android代码描边,找不到思路,Google也搜不到方法,只有给文字描边的那种。无奈,网上找到用C#实现的,自己修改了一下,发现工作很完美!

// 这是我的条码制作器的一段函数
public static Bitmap addCenterImage(Bitmap SrcBmp, Bitmap bitmap) {
 
	int width = SrcBmp.getWidth() / 5;
 
	int offsetX = (SrcBmp.getWidth() - bitmap.getWidth()) / 2;
	int offsetY = (SrcBmp.getHeight() - bitmap.getHeight()) / 2;
 
	int bmpW = bitmap.getWidth();
	int bmpH = bitmap.getHeight();
 
	Canvas ca = new Canvas(bitmap);
	Path path = new Path();
 
	for (int i = 0; i &lt; bmpW; i++)
		for (int j = 0; j &lt; bmpH; j++) 			// 这点不透明而且左右上下四点至少有一点是透明的,那这点就是边缘 			if (bitmap.getPixel(i, j) != Color.TRANSPARENT 					&amp;&amp; (i &gt; 0 &amp;&amp; bitmap.getPixel(i - 1, j) == Color.TRANSPARENT
					|| i &lt; bmpW - 1 &amp;&amp; bitmap.getPixel(i + 1, j) == Color.TRANSPARENT 					|| j &gt; 0 &amp;&amp; bitmap.getPixel(i, j - 1) == Color.TRANSPARENT
					|| j &lt; bmpH - 1 &amp;&amp; bitmap.getPixel(i, j + 1) == Color.TRANSPARENT))
				path.addRect(i - 1, j - 1, i, j, Path.Direction.CCW); // 搜集边缘
	Paint paint = new Paint();
	paint.setAntiAlias(true);
	paint.setColor(Color.WHITE);
	paint.setStyle(Paint.Style.FILL_AND_STROKE);
	paint.setStrokeWidth(4.0f);
 
	ca.drawPath(path, paint); // 画出边缘
	Canvas canvas = new Canvas(SrcBmp);
 
	canvas.drawBitmap(bitmap, offsetX, offsetY, null);
 
	return SrcBmp;
}

以上代码的效果如下!

条码制作器的描边函数演示

条码制作器的描边函数演示

下一版本的《条码制作器》将提供此功能,并修复PNG小图片添加后造成背景变黑的问题!

Android给PNG描边

在C# WebBrowser控件插入JS代码,并执行!亲测可用!

	HtmlElement script = webBrowser.Document.CreateElement("script");
	script.SetAttribute("type", "text/javascript");
	script.SetAttribute("text", "function _func(){alert('OK')}");
	HtmlElement head = webBrowser.Document.Body.AppendChild(script);
	webBrowser.Document.InvokeScript("_func");

附赠一段javascript清除当前站点cookies的代码:

function _cleancookies() {
	var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
	if (keys) {
		for (var i = keys.length; i--;) document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString()
	}
}