- 浏览: 851963 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
QR码的使用越来越多,可以在很多地方见着,比如火车票、推广产品上等,以下将介绍如何用Java生成QR码以及解码QR码。
1、涉及开源项目:
ZXing :一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。---用来解码QRcode
d-project:Kazuhiko Arase的个人项目(他具体是谁不清楚,日本的),提供丰富的配置参数,非常灵活---用来生成QR code
2、效果图:
3、使用d-project生成QRcdoe
1)将com.d_project.qrcode.jar引入工程
2)QRcodeAction代码:
- public void generate(RequestContext rc)
- throws UnsupportedEncodingException, IOException, ServletException {
- //待转数据
- String data = rc.param("data", "http://osctools.net/qr");
- //输出图片类型
- String output = rc.param("output", "image/jpeg");
- int type = rc.param("type", 4);
- if (type < 0 || 10 < type) {
- return;
- }
- int margin = rc.param("margin", 10);
- if (margin < 0 || 32 < margin) {
- return;
- }
- int cellSize = rc.param("size", 4);
- if (cellSize < 1 || 4 < cellSize) {
- return;
- }
- int errorCorrectLevel = 0;
- try {
- errorCorrectLevel = parseErrorCorrectLevel(rc,
- rc.param("error", "H"));
- } catch (Exception e) {
- return;
- }
- com.d_project.qrcode.QRCode qrcode = null;
- try {
- qrcode = getQRCode(data, type, errorCorrectLevel);
- } catch (Exception e) {
- return;
- }
- if ("image/jpeg".equals(output)) {
- BufferedImage image = qrcode.createImage(cellSize, margin);
- rc.response().setContentType("image/jpeg");
- OutputStream out = new BufferedOutputStream(rc.response()
- .getOutputStream());
- try {
- ImageIO.write(image, "jpeg", out);
- } finally {
- out.close();
- }
- } else if ("image/png".equals(output)) {
- BufferedImage image = qrcode.createImage(cellSize, margin);
- rc.response().setContentType("image/png");
- OutputStream out = new BufferedOutputStream(rc.response()
- .getOutputStream());
- try {
- ImageIO.write(image, "png", out);
- } finally {
- out.close();
- }
- } else if ("image/gif".equals(output)) {
- GIFImage image = createGIFImage(qrcode, cellSize, margin);
- rc.response().setContentType("image/gif");
- OutputStream out = new BufferedOutputStream(rc.response()
- .getOutputStream());
- try {
- image.write(out);
- } finally {
- out.close();
- }
- } else {
- return;
- }
- }
- private static int parseErrorCorrectLevel(RequestContext rc, String ecl) {
- if ("L".equals(ecl)) {
- return ErrorCorrectLevel.L;
- } else if ("Q".equals(ecl)) {
- return ErrorCorrectLevel.Q;
- } else if ("M".equals(ecl)) {
- return ErrorCorrectLevel.M;
- } else if ("H".equals(ecl)) {
- return ErrorCorrectLevel.H;
- } else {
- throw rc.error("qr_error_correct_error");
- }
- }
- private static QRCode getQRCode(String text, int typeNumber,
- int errorCorrectLevel) throws IllegalArgumentException {
- if (typeNumber == 0) {
- return QRCode.getMinimumQRCode(text, errorCorrectLevel);
- } else {
- QRCode qr = new QRCode();
- qr.setTypeNumber(typeNumber);
- qr.setErrorCorrectLevel(errorCorrectLevel);
- qr.addData(text);
- qr.make();
- return qr;
- }
- }
- private static GIFImage createGIFImage(QRCode qrcode, int cellSize,
- int margin) throws IOException {
- int imageSize = qrcode.getModuleCount() * cellSize + margin * 2;
- GIFImage image = new GIFImage(imageSize, imageSize);
- for (int y = 0; y < imageSize; y++) {
- for (int x = 0; x < imageSize; x++) {
- if (margin <= x && x < imageSize - margin && margin <= y
- && y < imageSize - margin) {
- int col = (x - margin) / cellSize;
- int row = (y - margin) / cellSize;
- if (qrcode.isDark(row, col)) {
- image.setPixel(x, y, 0);
- } else {
- image.setPixel(x, y, 1);
- }
- } else {
- image.setPixel(x, y, 1);
- }
- }
- }
- return image;
- }
public void generate(RequestContext rc) throws UnsupportedEncodingException, IOException, ServletException { //待转数据 String data = rc.param("data", "http://osctools.net/qr"); //输出图片类型 String output = rc.param("output", "image/jpeg"); int type = rc.param("type", 4); if (type < 0 || 10 < type) { return; } int margin = rc.param("margin", 10); if (margin < 0 || 32 < margin) { return; } int cellSize = rc.param("size", 4); if (cellSize < 1 || 4 < cellSize) { return; } int errorCorrectLevel = 0; try { errorCorrectLevel = parseErrorCorrectLevel(rc, rc.param("error", "H")); } catch (Exception e) { return; } com.d_project.qrcode.QRCode qrcode = null; try { qrcode = getQRCode(data, type, errorCorrectLevel); } catch (Exception e) { return; } if ("image/jpeg".equals(output)) { BufferedImage image = qrcode.createImage(cellSize, margin); rc.response().setContentType("image/jpeg"); OutputStream out = new BufferedOutputStream(rc.response() .getOutputStream()); try { ImageIO.write(image, "jpeg", out); } finally { out.close(); } } else if ("image/png".equals(output)) { BufferedImage image = qrcode.createImage(cellSize, margin); rc.response().setContentType("image/png"); OutputStream out = new BufferedOutputStream(rc.response() .getOutputStream()); try { ImageIO.write(image, "png", out); } finally { out.close(); } } else if ("image/gif".equals(output)) { GIFImage image = createGIFImage(qrcode, cellSize, margin); rc.response().setContentType("image/gif"); OutputStream out = new BufferedOutputStream(rc.response() .getOutputStream()); try { image.write(out); } finally { out.close(); } } else { return; } } private static int parseErrorCorrectLevel(RequestContext rc, String ecl) { if ("L".equals(ecl)) { return ErrorCorrectLevel.L; } else if ("Q".equals(ecl)) { return ErrorCorrectLevel.Q; } else if ("M".equals(ecl)) { return ErrorCorrectLevel.M; } else if ("H".equals(ecl)) { return ErrorCorrectLevel.H; } else { throw rc.error("qr_error_correct_error"); } } private static QRCode getQRCode(String text, int typeNumber, int errorCorrectLevel) throws IllegalArgumentException { if (typeNumber == 0) { return QRCode.getMinimumQRCode(text, errorCorrectLevel); } else { QRCode qr = new QRCode(); qr.setTypeNumber(typeNumber); qr.setErrorCorrectLevel(errorCorrectLevel); qr.addData(text); qr.make(); return qr; } } private static GIFImage createGIFImage(QRCode qrcode, int cellSize, int margin) throws IOException { int imageSize = qrcode.getModuleCount() * cellSize + margin * 2; GIFImage image = new GIFImage(imageSize, imageSize); for (int y = 0; y < imageSize; y++) { for (int x = 0; x < imageSize; x++) { if (margin <= x && x < imageSize - margin && margin <= y && y < imageSize - margin) { int col = (x - margin) / cellSize; int row = (y - margin) / cellSize; if (qrcode.isDark(row, col)) { image.setPixel(x, y, 0); } else { image.setPixel(x, y, 1); } } else { image.setPixel(x, y, 1); } } } return image; }
3)前端页面:
- <script type="text/javascript" src="/js/jquery/jquery.form-2.82.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- $("#submit").click(function(){
- var url = "/action/qrcode/generate?" + $("#qrcode_form").serialize();
- $(".QRCodeDiv img").attr("src",url+"&"+new Date().getTime());
- $("#gen_url").attr("href",url);
- });
- $("#zxing").popover({
- 'title':'条形码处理类库 ZXing',
- 'content':'ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。',
- 'placement':'bottom'
- });
- });
- </script>
- <div id="mainContent" class="wrapper">
- <div class="toolName">在线生成二维码(QR码)-采用<a id="zxing" href="http://www.oschina.net/p/zxing">ZXing</a>与<a href="http://www.d-project.com/">d-project</a><a data-toggle="modal" href="#advice" style="float:right;text-decoration:none;"><span class="badge badge-important"><i class="icon-envelope icon-white"></i> Feedback</span></a></div>
- <div class="toolUsing clearfix">
- <div class="toolsTab clearfix">
- <ul class="nav nav-tabs">
- <li class="active"><a href="/qr">转QR码</a></li>
- <li ><a href="/qr?type=2">二维码解码</a></li>
- </ul>
- <div class="clear"></div>
- </div>
- <form id="qrcode_form" method="post" >
- <div class="leftBar">
- <div class="title">URL或其他文本:</div>
- <textarea class="input-xlarge" name="data" onfocus="if(this.value=='http://osctools.net/qr'){this.value='';};this.select();" onblur="(this.value=='')?this.value='http://osctools.net/qr':this.value;">http://osctools.net/qr</textarea>
- </div>
- <div class="operateLR">
- <div class="OptDetail span1">
- <label>输出格式:</label>
- <select name="output" class="span1">
- <option value="image/gif" selected>GIF</option>
- <option value="image/jpeg">JPEG</option>
- <option value="image/png">PNG</option>
- </select>
- <label>纠错级别:</label>
- <select name="error" class="span1">
- <option value="L" selected>L 7%</option>
- <option value="M">M 15%</option>
- <option value="Q">Q 25%</option>
- <option value="H">H 30%</option>
- </select>
- <label>类型:</label>
- <select name="type" class="span1">
- <option value="0">自动</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5</option>
- <option value="6">6</option>
- <option value="7">7</option>
- <option value="8">8</option>
- <option value="9">9</option>
- <option value="10">10</option>
- </select>
- <label>边缘留白:</label>
- <select name="margin" class="span1">
- <option value="0">0</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5</option>
- <option value="6">6</option>
- <option value="7">7</option>
- <option value="8">8</option>
- <option value="9">9</option>
- <option value="10">10</option>
- <option value="11">11</option>
- <option value="12">12</option>
- <option value="13">13</option>
- <option value="14">14</option>
- <option value="15">15</option>
- <option value="16">16</option>
- <option value="17">17</option>
- <option value="18">18</option>
- <option value="19">19</option>
- <option value="20">20</option>
- <option value="21">21</option>
- <option value="22">22</option>
- <option value="23">23</option>
- <option value="24">24</option>
- <option value="25">25</option>
- <option value="26">26</option>
- <option value="27">27</option>
- <option value="28">28</option>
- <option value="29">29</option>
- <option value="30">30</option>
- <option value="31">31</option>
- <option value="32">32</option>
- </select>
- <label>原胞大小:</label>
- <select name="size" class="span1">
- <option value="1" >1</option>
- <option value="2" >2</option>
- <option value="3" >3</option>
- <option value="4" selected >4</option>
- </select>
- <button class="btn btn-small btn-primary" id="submit" onclick="return false;">生成QR码</button> </div>
- </div>
- <div class="rightBar">
- <div class="title">QR码:</div>
- <div class="QRCodeDiv">
- <div class="QRWrapper">
- <a id="gen_url" href="/action/qrcode/generate?size=4" target="_blank"><img src="/action/qrcode/generate?size=4"/></a>
- </div>
- </div>
- </div>
- </form>
- </div>
- </div>
<script type="text/javascript" src="/js/jquery/jquery.form-2.82.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#submit").click(function(){ var url = "/action/qrcode/generate?" + $("#qrcode_form").serialize(); $(".QRCodeDiv img").attr("src",url+"&"+new Date().getTime()); $("#gen_url").attr("href",url); }); $("#zxing").popover({ 'title':'条形码处理类库 ZXing', 'content':'ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。', 'placement':'bottom' }); }); </script> <div id="mainContent" class="wrapper"> <div class="toolName">在线生成二维码(QR码)-采用<a id="zxing" href="http://www.oschina.net/p/zxing">ZXing</a>与<a href="http://www.d-project.com/">d-project</a><a data-toggle="modal" href="#advice" style="float:right;text-decoration:none;"><span class="badge badge-important"><i class="icon-envelope icon-white"></i> Feedback</span></a></div> <div class="toolUsing clearfix"> <div class="toolsTab clearfix"> <ul class="nav nav-tabs"> <li class="active"><a href="/qr">转QR码</a></li> <li ><a href="/qr?type=2">二维码解码</a></li> </ul> <div class="clear"></div> </div> <form id="qrcode_form" method="post" > <div class="leftBar"> <div class="title">URL或其他文本:</div> <textarea class="input-xlarge" name="data" onfocus="if(this.value=='http://osctools.net/qr'){this.value='';};this.select();" onblur="(this.value=='')?this.value='http://osctools.net/qr':this.value;">http://osctools.net/qr</textarea> </div> <div class="operateLR"> <div class="OptDetail span1"> <label>输出格式:</label> <select name="output" class="span1"> <option value="image/gif" selected>GIF</option> <option value="image/jpeg">JPEG</option> <option value="image/png">PNG</option> </select> <label>纠错级别:</label> <select name="error" class="span1"> <option value="L" selected>L 7%</option> <option value="M">M 15%</option> <option value="Q">Q 25%</option> <option value="H">H 30%</option> </select> <label>类型:</label> <select name="type" class="span1"> <option value="0">自动</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> <label>边缘留白:</label> <select name="margin" class="span1"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> <option value="32">32</option> </select> <label>原胞大小:</label> <select name="size" class="span1"> <option value="1" >1</option> <option value="2" >2</option> <option value="3" >3</option> <option value="4" selected >4</option> </select> <button class="btn btn-small btn-primary" id="submit" onclick="return false;">生成QR码</button> </div> </div> <div class="rightBar"> <div class="title">QR码:</div> <div class="QRCodeDiv"> <div class="QRWrapper"> <a id="gen_url" href="/action/qrcode/generate?size=4" target="_blank"><img src="/action/qrcode/generate?size=4"/></a> </div> </div> </div> </form> </div> </div>
4、使用ZXing解码QRcode
1)下载Zxing-2.0.zip
2)引入zxing-barcode_core.jar与zxing_barcode_j2se.jar到工程
3)QRcodeAction代码:
- @PostMethod
- @JSONOutputEnabled
- public void decode(RequestContext rc) throws IOException {
- //存在qrcode的网址
- String url = rc.param("url", "");
- //待解码的qrcdoe图像
- File img = rc.file("qrcode");
- if (StringUtils.isBlank(url) && img == null) {
- throw rc.error("qr_upload_or_url_null");
- }
- List<Result> results = new ArrayList<Result>();
- Config config = new Config();
- Inputs inputs = new Inputs();
- config.setHints(buildHints(config));
- if (StringUtils.isNotBlank(url)) {
- addArgumentToInputs(url, config, inputs);
- }
- if (img != null) {
- inputs.addInput(img.getCanonicalPath());
- }
- while (true) {
- String input = inputs.getNextInput();
- if (input == null) {
- break;
- }
- File inputFile = new File(input);
- if (inputFile.exists()) {
- try {
- Result result = decode(inputFile.toURI(), config,rc);
- results.add(result);
- } catch (IOException e) {
- }
- } else {
- try {
- Result result = decode(new URI(input), config,rc);
- results.add(result);
- } catch (Exception e) {
- }
- }
- }
- rc.print(new Gson().toJson(results));
- }
- private Result decode(URI uri,Config config,RequestContext rc)
- throws IOException {
- Map<DecodeHintType, ?> hints = config.getHints();
- BufferedImage image;
- try {
- image = ImageIO.read(uri.toURL());
- } catch (IllegalArgumentException iae) {
- throw rc.error("qr_resource_not_found");
- }
- if (image == null) {
- throw rc.error("qr_could_not_load_image");
- }
- try {
- LuminanceSource source = new BufferedImageLuminanceSource(image);
- BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
- Result result = new MultiFormatReader().decode(bitmap, hints);
- return result;
- } catch (NotFoundException nfe) {
- throw rc.error("qr_no_barcode_found");
- }
- }
- private static Map<DecodeHintType, ?> buildHints(Config config) {
- Map<DecodeHintType, Object> hints = new EnumMap<DecodeHintType, Object>(
- DecodeHintType.class);
- Collection<BarcodeFormat> vector = new ArrayList<BarcodeFormat>(8);
- vector.add(BarcodeFormat.UPC_A);
- vector.add(BarcodeFormat.UPC_E);
- vector.add(BarcodeFormat.EAN_13);
- vector.add(BarcodeFormat.EAN_8);
- vector.add(BarcodeFormat.RSS_14);
- vector.add(BarcodeFormat.RSS_EXPANDED);
- if (!config.isProductsOnly()) {
- vector.add(BarcodeFormat.CODE_39);
- vector.add(BarcodeFormat.CODE_93);
- vector.add(BarcodeFormat.CODE_128);
- vector.add(BarcodeFormat.ITF);
- vector.add(BarcodeFormat.QR_CODE);
- vector.add(BarcodeFormat.DATA_MATRIX);
- vector.add(BarcodeFormat.AZTEC);
- vector.add(BarcodeFormat.PDF_417);
- vector.add(BarcodeFormat.CODABAR);
- vector.add(BarcodeFormat.MAXICODE);
- }
- hints.put(DecodeHintType.POSSIBLE_FORMATS, vector);
- if (config.isTryHarder()) {
- hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
- }
- if (config.isPureBarcode()) {
- hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
- }
- return hints;
- }
- private static void addArgumentToInputs(String argument, Config config,
- Inputs inputs) throws IOException {
- File inputFile = new File(argument);
- if (inputFile.exists()) {
- inputs.addInput(inputFile.getCanonicalPath());
- } else {
- inputs.addInput(argument);
- }
- }
@PostMethod @JSONOutputEnabled public void decode(RequestContext rc) throws IOException { //存在qrcode的网址 String url = rc.param("url", ""); //待解码的qrcdoe图像 File img = rc.file("qrcode"); if (StringUtils.isBlank(url) && img == null) { throw rc.error("qr_upload_or_url_null"); } List<Result> results = new ArrayList<Result>(); Config config = new Config(); Inputs inputs = new Inputs(); config.setHints(buildHints(config)); if (StringUtils.isNotBlank(url)) { addArgumentToInputs(url, config, inputs); } if (img != null) { inputs.addInput(img.getCanonicalPath()); } while (true) { String input = inputs.getNextInput(); if (input == null) { break; } File inputFile = new File(input); if (inputFile.exists()) { try { Result result = decode(inputFile.toURI(), config,rc); results.add(result); } catch (IOException e) { } } else { try { Result result = decode(new URI(input), config,rc); results.add(result); } catch (Exception e) { } } } rc.print(new Gson().toJson(results)); } private Result decode(URI uri,Config config,RequestContext rc) throws IOException { Map<DecodeHintType, ?> hints = config.getHints(); BufferedImage image; try { image = ImageIO.read(uri.toURL()); } catch (IllegalArgumentException iae) { throw rc.error("qr_resource_not_found"); } if (image == null) { throw rc.error("qr_could_not_load_image"); } try { LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result = new MultiFormatReader().decode(bitmap, hints); return result; } catch (NotFoundException nfe) { throw rc.error("qr_no_barcode_found"); } } private static Map<DecodeHintType, ?> buildHints(Config config) { Map<DecodeHintType, Object> hints = new EnumMap<DecodeHintType, Object>( DecodeHintType.class); Collection<BarcodeFormat> vector = new ArrayList<BarcodeFormat>(8); vector.add(BarcodeFormat.UPC_A); vector.add(BarcodeFormat.UPC_E); vector.add(BarcodeFormat.EAN_13); vector.add(BarcodeFormat.EAN_8); vector.add(BarcodeFormat.RSS_14); vector.add(BarcodeFormat.RSS_EXPANDED); if (!config.isProductsOnly()) { vector.add(BarcodeFormat.CODE_39); vector.add(BarcodeFormat.CODE_93); vector.add(BarcodeFormat.CODE_128); vector.add(BarcodeFormat.ITF); vector.add(BarcodeFormat.QR_CODE); vector.add(BarcodeFormat.DATA_MATRIX); vector.add(BarcodeFormat.AZTEC); vector.add(BarcodeFormat.PDF_417); vector.add(BarcodeFormat.CODABAR); vector.add(BarcodeFormat.MAXICODE); } hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); if (config.isTryHarder()) { hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); } if (config.isPureBarcode()) { hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); } return hints; } private static void addArgumentToInputs(String argument, Config config, Inputs inputs) throws IOException { File inputFile = new File(argument); if (inputFile.exists()) { inputs.addInput(inputFile.getCanonicalPath()); } else { inputs.addInput(argument); } }
4)前端页面:
- <script type="text/javascript" src="/js/jquery/jquery.form-2.82.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- $("#qrcode_form").ajaxForm({
- success:function(json){
- if(json==null)
- return;
- json = eval("("+json+")");
- if(json.msg){
- alert(json.msg);
- return;
- }
- if(json[0])
- $("#result").val(json[0].text);
- else
- $("#result").val("解码失败");
- }
- });
- $("#zxing").popover({
- 'title':'条形码处理类库 ZXing',
- 'content':'ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。',
- 'placement':'bottom'
- });
- });
- </script>
- <div id="mainContent" class="wrapper">
- <div class="toolName">在线生成二维码(QR码)-采用<a id="zxing" href="http://www.oschina.net/p/zxing">ZXing</a>与<a href="http://www.d-project.com/">d-project</a><a data-toggle="modal" href="#advice" style="float:right;text-decoration:none;"><span class="badge badge-important"><i class="icon-envelope icon-white"></i> Feedback</span></a></div>
- <div class="toolUsing clearfix">
- <div class="toolsTab clearfix">
- <ul class="nav nav-tabs">
- <li ><a href="/qr">转QR码</a></li>
- <li class="active"><a href="/qr?type=2">二维码解码</a></li>
- </ul>
- <div class="clear"></div>
- </div>
- <form id="qrcode_form" method="post" action="/action/qrcode/decode">
- <div class="topBar">
- <div class="title">
- <label class="radio" for="upload_url">图片URL:
- <input checked="checked" name="upload_ctn" id="upload_url" style="margin-right:5px;" type="radio" onchange="if(this.checked){$('input[name=\'url\']').removeAttr('disabled');$('input[name=\'qrcode\']').attr('disabled','disabled')}"/>
- </label>
- </div>
- <input name="url" id="url" style="width:100%;height:40px;margin:0 0 10px 0;" onfocus="if(this.value=='http://www.osctools.net/img/qr.gif'){this.value='';};this.select();" onblur="(this.value=='')?this.value='http://www.osctools.net/img/qr.gif':this.value;" value="http://www.osctools.net/img/qr.gif"/>
- <div class="title">
- <label class="radio" for="upload_img">上传图片:
- <input style="margin-right:5px;" name="upload_ctn" id="upload_img" type="radio" onchange="if(this.checked){$('input[name=\'qrcode\']').removeAttr('disabled');$('input[name=\'url\']').attr('disabled','disabled')}"/>
- </label>
- </div>
- <input disabled="disabled" name="qrcode" type="file" class="input-file"/>
- <input class="btn btn-primary" value="解码" type="submit"/>
- </div>
- <div class="bottomBar">
- <div class="title">解码结果:</div>
- <textarea id="result"></textarea>
- </div>
- </form>
- </div>
- </div>
<script type="text/javascript" src="/js/jquery/jquery.form-2.82.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#qrcode_form").ajaxForm({ success:function(json){ if(json==null) return; json = eval("("+json+")"); if(json.msg){ alert(json.msg); return; } if(json[0]) $("#result").val(json[0].text); else $("#result").val("解码失败"); } }); $("#zxing").popover({ 'title':'条形码处理类库 ZXing', 'content':'ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。', 'placement':'bottom' }); }); </script> <div id="mainContent" class="wrapper"> <div class="toolName">在线生成二维码(QR码)-采用<a id="zxing" href="http://www.oschina.net/p/zxing">ZXing</a>与<a href="http://www.d-project.com/">d-project</a><a data-toggle="modal" href="#advice" style="float:right;text-decoration:none;"><span class="badge badge-important"><i class="icon-envelope icon-white"></i> Feedback</span></a></div> <div class="toolUsing clearfix"> <div class="toolsTab clearfix"> <ul class="nav nav-tabs"> <li ><a href="/qr">转QR码</a></li> <li class="active"><a href="/qr?type=2">二维码解码</a></li> </ul> <div class="clear"></div> </div> <form id="qrcode_form" method="post" action="/action/qrcode/decode"> <div class="topBar"> <div class="title"> <label class="radio" for="upload_url">图片URL: <input checked="checked" name="upload_ctn" id="upload_url" style="margin-right:5px;" type="radio" onchange="if(this.checked){$('input[name=\'url\']').removeAttr('disabled');$('input[name=\'qrcode\']').attr('disabled','disabled')}"/> </label> </div> <input name="url" id="url" style="width:100%;height:40px;margin:0 0 10px 0;" onfocus="if(this.value=='http://www.osctools.net/img/qr.gif'){this.value='';};this.select();" onblur="(this.value=='')?this.value='http://www.osctools.net/img/qr.gif':this.value;" value="http://www.osctools.net/img/qr.gif"/> <div class="title"> <label class="radio" for="upload_img">上传图片: <input style="margin-right:5px;" name="upload_ctn" id="upload_img" type="radio" onchange="if(this.checked){$('input[name=\'qrcode\']').removeAttr('disabled');$('input[name=\'url\']').attr('disabled','disabled')}"/> </label> </div> <input disabled="disabled" name="qrcode" type="file" class="input-file"/> <input class="btn btn-primary" value="解码" type="submit"/> </div> <div class="bottomBar"> <div class="title">解码结果:</div> <textarea id="result"></textarea> </div> </form> </div> </div>
注意:其中牵涉到的RequestContext类,请点击查看
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 834在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4050单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2947通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1490分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 738通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 871按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 700import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 761Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2253首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 835Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 874今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 677在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 878在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 887本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 971ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1053接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 865接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1089接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 952除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 715接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
QR码,全称为Quick Response Code,是二维码的一种,由日本Denso Wave公司在1994年发明,主要用于存储和传递信息。它通过二维空间的黑白矩阵来编码数据,具有容量大、读取速度快、错误纠正能力强等优点,广泛应用于...
QR码,全称为Quick Response Code,是日本Denso Wave公司于1994年发明的一种二维条形码,因其快速可读性和大信息容量而被广泛应用于各种领域,如产品标识、广告链接、电子支付等。QR码由黑色和白色的模块组成,可以...
QR码,全称为Quick Response Code,即快速响应码,是一种二维条形码,由日本Denso Wave公司在1994年发明。QR码在日常生活中的应用广泛,包括网址链接、电子名片、产品信息、二维码支付等多种场景。本软件专注于QR码...
二维码(Quick Response, QR码)是一种二维条形码,广泛应用于信息传递、追踪管理等领域,由于其容量大、错误纠正能力强等特点而受到青睐。在实际应用中,由于环境光照不均、采集设备的位置偏差等因素,采集到的QR码...
在IT行业中,二维码(Quick Response Code,简称QR码)是一种二维条形码,广泛应用于数据交换、信息存储等领域。在C#编程环境下,生成QR码是一项常见的任务,尤其在移动应用开发、网页设计以及物联网应用中。本资源...
QR码,全称为Quick Response Code,是日本Denso Wave公司在1994年发明的一种二维条形码。这种编码方式可以存储大量的数据,包括文字、数字、URL、电子邮件地址、电话号码等多种信息,并且能够快速被手机或专门的读取...
### QR码标准附录知识点详解 #### 一、QR码标准附录概述 QR码(Quick Response Code)是一种矩阵式二维码,能够在较小的空间内存储大量的信息,并且具有较强的纠错能力。QR码的标准附录是对主标准文档的一个补充,...
### QR码图像处理及识别算法的研究 #### 一、引言 随着信息技术的快速发展,二维条码技术的应用范围越来越广泛。其中,QR码作为一种优秀的二维条码,在我国有着独特的发展优势。本文首先对QR码的基本概念及其优势...
QR码,全称为Quick Response Code,是日本Denso Wave公司在1994年推出的一种二维条形码技术,主要用于快速读取信息。QR码解码是将二维码图像转换为可理解的数据过程,广泛应用于产品追踪、广告推广、移动支付等领域...
QR码,全称为Quick Response Code,是二维码的一种,由日本Denso Wave公司在1994年发明,设计目的是为了在有限的空间内存储更多的信息。它不仅包含文本信息,还可以存储网址、联系信息、电子邮件地址、产品代码等。...
标题中的"C++支持PC和WinCE的QR码生成源码"指的是一个C++编程的库,专门用于在个人计算机(PC)以及Windows CE操作系统上生成二维码(QR码)。QR码是一种二维条形码,能够存储大量的信息,如网址、文本、联系人信息...
关于QR码的国家标准,对编码和解码都有详细的介绍 QR 码是二维条码的一种,QR来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码比普通条码可储存更多资料,亦...
1.领域:matlab,QR码检测算法 2.内容:基于HOG特征提取和SVM识别的QR码检测matlab仿真+代码仿真操作视频 3.用处:用于QR码检测编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a...
在IT行业中,二维码(Quick Response Code,简称QR码)是一种二维条形码,它能够存储大量的数据,并且可以通过智能手机或专用设备快速读取。QR码最初由日本的电装公司(Denso Wave)开发,如今已被广泛应用于各种...
QR码,全称为Quick Response Code,即快速响应码,是一种二维条形码,由日本Denso Wave公司在1994年发明。QR码在信息存储和传递方面具有高效、便捷的特点,广泛应用于名片、网址链接、商品信息、支付场景等多种领域...
在本文中,我们将深入探讨如何使用Qt、OpenCV、libdmtx库以及海康相机来构建一个QR码和DM码(Data Matrix码)识别软件。这个软件的主要目标是通过海康相机捕获图像,然后利用计算机视觉技术进行解码。 首先,让我们...
在C#中使用ZXing生成QR码,主要是通过ZXing.Net库,它为.NET Framework提供了ZXing的功能。以下是对配置和使用ZXing.Net生成QR码的详细步骤: 1. **获取ZXing.Net**:首先,你需要从官方网站或NuGet包管理器下载...
二维码(Quick Response Code,简称QR码)是一种二维条形码技术,由日本Denso Wave公司于1994年开发,旨在快速读取信息。它包含了大量的数据,如网址、文本、联系信息、电子邮件地址等,并且在各种场景中得到了广泛...
QR码,全称为Quick Response Code,是二维码的一种,由日本Denso Wave公司于1994年发明。这种二维条形码技术在信息存储、识别和传递方面具有高速、大容量的特点,尤其适用于中文信息的处理。本压缩包提供的“可生成...