前景概要:闲来无事想写点啥(主要为了就业…)
制作简历时突发奇想,能不能把项目链接做成二维码形式,扫二维码就可以直接进入我的项目,说干就干,直接上代码
1.文字生成二维码
第一步:管理NuGet包,添加ThoughtWorks.QRCode(这个包主要负责二维码的生成)
2.前台代码`
<fieldset>
<legend>文字转换为二维码</legend>
<div>
<p>要生成的文字(支持中文):<input id="strData" type="text" value="dingdaxia" /></p>
<p>
Encoding:<select id="encoding">
<option value="Byte">Byte</option>
<option value="AlphaNumeric">AlphaNumeric</option>
<option value="Numeric">Numeric</option>
</select>
</p>
<p>
Correction Level:<select id="level">
<option value="M">M</option>
<option value="L">L</option>
<option value="Q">Q</option>
<option value="H">H</option>
</select>
</p>
<p>Version:<input id="version" type="text" value="8" /></p>
<p>scale:<input id="scale" type="text" value="4" /></p>
<img id="one" src="" alt="" />
<input id="createCode" type="button" value="生成" />
</div>
</fieldset>
js代码如下
<script src="~/Scripts/jquery-3.4.1.js"></script>
<script type="text/javascript">
$(function () {
$("#createCode").click(function () {
var strData = $("#strData").val();
var level = $("#level").val();
var encoding = $("#encoding").val();
var version = $("#version").val();
var scale = $("#scale").val();
$.post("@Url.Action("Erwei")", { strData: strData, level: level, qrEncoding: encoding, version: version, scale: scale }, function (data) {
$("#one").attr("src", data);
});
});
});
</script>
这部分有问题的基本上都是没有引入jquery包
3.后台代码
/// 生成二维码
/// </summary>
/// <param name="strData">要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444</param>
/// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
/// <param name="level">大小:L M Q H</param>
/// <param name="version">版本:如 8</param>
/// <param name="scale">比例:如 4</param>
/// <returns></returns>
public ActionResult Erwei(string strData, string qrEncoding, string level, int version, int scale)
{
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
string encoding = qrEncoding;
switch (encoding)
{
case "Byte":
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
break;
case "AlphaNumeric":
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
break;
case "Numeric":
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
break;
default:
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
break;
}
qrCodeEncoder.QRCodeScale = scale;
qrCodeEncoder.QRCodeVersion = version;
switch (level)
{
case "L":
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
break;
case "M":
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
break;
case "Q":
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
break;
default:
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
break;
}
//文字生成图片
Image image = qrCodeEncoder.Encode(strData);
string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
//如果文件夹不存在,则创建
//if (!Directory.Exists(filepath))
// Directory.CreateDirectory(filepath);
System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
fs.Close();
image.Dispose();
return Content(@"/Upload/" + filename);
}
然后运行就发现可以了。。。也没啥好说的,记得添加Upload文件夹用来保存生成的二维码。但其实用JS来完成不要添加文件夹的,所以后面的链接跳转的例子用纯JS实现
链接跳转生成二维码
1.首先我们得准备一个JS包
(如果不知道怎么搞到这个包,嗯。。。)
第一步:
第二步:
2.上代码
<fieldset>
<legend>链接转换为二维码</legend>
<input id="text" type="text" value="http://baidu.com" style="width:80%" /><button class="btn btn-group" onclick="makeCode()">生成</button><br />
<div id="qrcode" style="width:100px; height:100px; margin-top:15px;"></div>
</fieldset>
js代码如下
<script src="~/Scripts/qrcode.js"></script>
<script type="text/javascript">
var qrcode = new QRCode(document.getElementById("qrcode"), {
width: 100,
height: 100
});
function makeCode() {
var elText = document.getElementById("text");
if (!elText.value) {
alert("Input a text");
elText.focus();
return;
}
qrcode.makeCode(elText.value);
}
makeCode();
$("#text").
on("blur", function () {
makeCode();
}).
on("keydown", function (e) {
if (e.keyCode == 13) {
makeCode();
}
});
</script>
然后就OK了。。。
效果图
同样可以访问我的服务器去玩玩这个小效果
http://120.25.249.30:8181/