做个互推二维码图片怎么做里面都是图片

如何在二维码中添加
全部答案(共1个回答)
photoshop可以做
在到百度首页,输入二维码,可以看到下面有二维码的生成器,找一个评价高的点击进入。二维码的生成器开始由三大部分组成,开始电机文本,当然也可以按你自己的需求来选择。...
重新再做一个就好了
在公众平台更换头像之后,那里就会自动变成新头像的二维码图像,是自动生成的。
答: 因为用手绘板是靠感压控制的。鼠标没有感压。也不用太用力把,我觉得还好啊。你可以把画笔最小直径调大就好了。
答: 其中家电控制,数据通讯速率一般不大于10Kbps;语音/数据通讯,通讯速率一般为1~2Mbps(有些场合仍可以通过模拟拨号连接Internet);多媒体应用中,...
答: 共享了打印机没有?
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区2011年5月 VB大版内专家分月排行榜第三2011年4月 VB大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|QR二维码生成器源码(中间可插入小图片)
我的图书馆
QR二维码生成器源码(中间可插入小图片)
二维码终于火了,现在大街小巷大小商品广告上的二维码标签都随处可见,而且大都不是简单的纯二维码,而是中间有个性图标的二维码。
我之前做了一个使用google开源项目zxing实现二维码、一维码编码解码的程序并开放了源码(),今天继续在此程序基础上,实现二维码中间加小图片。
QRcode使用里德-所罗门码来进行错误修正。对于我们来说,里德-所罗门编码有两个非常重要的特性。第一,它是一种显式系统码,也就是说,你可以在最终的编码中直接看到原有的信息。就好比我们对”hello world”进行编码,最终看到的是”hello world”以及其后面跟随的几个容错码。第二点,里德-所罗门编码是可以被”异或”的,将两个不同里德-所罗门编码得到的结果异或运算后会得到一个新的里德-所罗门码,并且这个新码的原码即是原来两个原码的异或。如果你想知道为什么这两个特性会成立,请看.
一副QRcode图像会定义一些独特的描述符来帮助人们或者电脑识别出自己是一张QRcode。这种描述符随着QRcode的大小不同而略有区别——越大的QRcode图像拥有越多的描述符。但是对于人的识别来说,特征最明显的还是图片的四个角的符号是固定的,看到这样的四个角人类就本能的反应:这是一个QRcode。
(实际上,我们可以通过读取图像最左上角的两个象素点来判断编码的冗余程度。定义黑色为0,白色为1,那么如果看到00则是L级别的冗余,01是M,10是Q,11则是最高的H级别冗余。
有了上面的这些工作,我们可以非常容易的知道原码信息在图像中的位置。然后通过改变自己的原码信息,就可以改变图像中的像素以至于可以在里面作图了。虽说如此,下面的一些情形可以让事情变得更有趣。
我做的二维码插入图片:
之前我给大家免费提供了使用zxing开源项目改造而成的一二维码编码解码器,但未能插入图片。这次经过一番努力,成功将图片插入二维码,并能编码和解码。
插入图片的关键在于二维码容错系数的调整。
程序界面如下:
其中WinForm项目是我的Demo程序,zxing是Google的一个开源二维码项目。
生成二维码的代码:
//构造二维码写码器
MultiFormatWriter mutiWriter = new com.google.zxing.MultiFormatWriter();
Hashtable hint=new Hashtable();
hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION,com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
//生成二维码
ByteMatrix bm = mutiWriter.encode(txtMsg.Text, com.google.zxing.BarcodeFormat.QR_CODE, 300, 300,hint);
Bitmap img = bm.ToBitmap();
//要插入到二维码中的图片
Image middlImg = QRMiddleImg.I
//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
System.Drawing.Size realSize = mutiWriter.GetEncodeSize(txtMsg.Text, com.google.zxing.BarcodeFormat.QR_CODE, 300, 300);
//计算插入图片的大小和位置
int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
int middleImgH = Math.Min((int)(realSize.Height / 3.5),middlImg.Height);
int middleImgL = (img.Width - middleImgW) / 2;
int middleImgT = (img.Height - middleImgH) / 2;
//将img转换成bmp格式,否则后面无法创建 Graphics对象
Bitmap bmpimg = new Bitmap(img.Width, img.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityB
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQ
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQ
g.DrawImage(img, 0, 0);
//在二维码中插入图片
System.Drawing.Graphics MyGraphic = System.Drawing.Graphics.FromImage(bmpimg);
MyGraphic.FillRectangle(Brushes.White,middleImgL, middleImgT, middleImgW, middleImgH);
MyGraphic.DrawImage(middlImg, middleImgL, middleImgT, middleImgW, middleImgH);
pictureBox1.Image =
//自动保存图片到当前目录
string filename = System.Environment.CurrentDirectory + "\\QR" + DateTime.Now.Ticks.ToString() + ".jpg";
bmpimg.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);
lbshow.Text = "图片已保存到:" +
解析二维码的代码:
//构建解码器
MultiFormatReader mutiReader = new com.google.zxing.MultiFormatReader();
Bitmap img = (Bitmap)Bitmap.FromFile(opFilePath);
if (img == null)
LuminanceSource ls = new RGBLuminanceSource(img, img.Width, img.Height);
BinaryBitmap bb = new BinaryBitmap(new com.google.zxing.common.HybridBinarizer(ls));
必须是Utf-8编码
Hashtable hints = new Hashtable();
hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
Result r = mutiReader.decode(bb, hints);
txtmsg2.Text = r.T
lbshow.Text = "解码成功!";
要在二维码中插入图片且可以正常解码,关键是要注意以下两个地方:
1、必须调整二维码的容错参数ErrorCorrectionLevel
Hashtable hint=new Hashtable();
hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION,com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
hint是生成二维码的方法中最后一个参数,这个参数是一个hashtable,这里可以设置二维码的编码、容错系数等。
容错系数越高,生成的二维码图片越复杂,可以容忍二维码被污垢弄赃,甚至中间可以加一个小图片,识别也不受影响。
2、第二个要注意的地方是图片大小
从二维码的识别原理可以知道,二维码中原始信息被加密在下图黑色部分,而红色部分都是冗余信息,红色部分都是可以被自己的图片替换的。
为了插入图片的完整性,我们选择在最中间插入,而且长宽建议为整个二维码的3/7至1/3
//计算插入图片的大小和位置
int middleImgW = Math.Min((int)(realSize.Width / 3.5), middlImg.Width);
int middleImgH = Math.Min((int)(realSize.Height / 3.5),middlImg.Height);
int middleImgL = (img.Width - middleImgW) / 2;
int middleImgT = (img.Height - middleImgH) / 2;
我们的例子中用的就是2/7的比例。
下载地址:
本文转自:
TA的最新馆藏
喜欢该文的人也喜欢拒绝访问 | www.vipzhuanli.com | 百度云加速
请打开cookies.
此网站 (www.vipzhuanli.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3ff4394-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 图片怎么做二维码 的文章

 

随机推荐