- 浏览: 75016 次
- 性别:
- 来自: 富安
最新评论
-
simpledev:
...
10步让你成为更优秀的程序员 -
bavnnsym:
像三楼说的那样,,是可以的,,我之前也碰到这个问题,,也是在d ...
IE6层不能遮挡住下拉框问题解决 -
suko:
yukaizhao 写道一句话的事情,就是创建一个和层一样大小 ...
IE6层不能遮挡住下拉框问题解决 -
yukaizhao:
一句话的事情,就是创建一个和层一样大小,一样位置的iframe ...
IE6层不能遮挡住下拉框问题解决 -
kaipingk:
andyyehoo 写道可以参考一下Struts2的日历控件的 ...
IE6层不能遮挡住下拉框问题解决
本例我是应用google的二维码工具包来做的,附近提供jar包下载。下面是完整代码,经过测试的。
package test; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.OutputStream; import java.util.Hashtable; import java.util.Random; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Result; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; public class QRCodeUtil { private static final String CHARSET = "utf-8"; private static final String FORMAT_NAME = "JPG"; // 二维码尺寸 private static final int QRCODE_SIZE = 300; // LOGO宽度 private static final int WIDTH = 60; // LOGO高度 private static final int HEIGHT = 60; private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception { Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>(); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.CHARACTER_SET, CHARSET); hints.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } if (imgPath == null || "".equals(imgPath)) { return image; } // 插入图片 QRCodeUtil.insertImage(image, imgPath, needCompress); return image; } /** * 插入LOGO * * @param source * 二维码图片 * @param imgPath * LOGO图片地址 * @param needCompress * 是否压缩 * @throws Exception */ private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception { File file = new File(imgPath); if (!file.exists()) { System.err.println(""+imgPath+" 该文件不存在!"); return; } Image src = ImageIO.read(new File(imgPath)); int width = src.getWidth(null); int height = src.getHeight(null); if (needCompress) { // 压缩LOGO if (width > WIDTH) { width = WIDTH; } if (height > HEIGHT) { height = HEIGHT; } Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose(); src = image; } // 插入LOGO Graphics2D graph = source.createGraphics(); int x = (QRCODE_SIZE - width) / 2; int y = (QRCODE_SIZE - height) / 2; graph.drawImage(src, x, y, width, height, null); Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); graph.setStroke(new BasicStroke(3f)); graph.draw(shape); graph.dispose(); } /** * 生成二维码(内嵌LOGO) * * @param content * 内容 * @param imgPath * LOGO地址 * @param destPath * 存放目录 * @param needCompress * 是否压缩LOGO * @throws Exception */ public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); mkdirs(destPath); String file = new Random().nextInt(99999999)+".jpg"; ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file)); } /** * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) * @author lanyuan * Email: mmm333zzz520@163.com * @date 2013-12-11 上午10:16:36 * @param destPath 存放目录 */ public static void mkdirs(String destPath) { File file =new File(destPath); //当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } } /** * 生成二维码(内嵌LOGO) * * @param content * 内容 * @param imgPath * LOGO地址 * @param destPath * 存储地址 * @throws Exception */ public static void encode(String content, String imgPath, String destPath) throws Exception { QRCodeUtil.encode(content, imgPath, destPath, false); } /** * 生成二维码 * * @param content * 内容 * @param destPath * 存储地址 * @param needCompress * 是否压缩LOGO * @throws Exception */ public static void encode(String content, String destPath, boolean needCompress) throws Exception { QRCodeUtil.encode(content, null, destPath, needCompress); } /** * 生成二维码 * * @param content * 内容 * @param destPath * 存储地址 * @throws Exception */ public static void encode(String content, String destPath) throws Exception { QRCodeUtil.encode(content, null, destPath, false); } /** * 生成二维码(内嵌LOGO) * * @param content * 内容 * @param imgPath * LOGO地址 * @param output * 输出流 * @param needCompress * 是否压缩LOGO * @throws Exception */ public static void encode(String content, String imgPath, OutputStream output, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); ImageIO.write(image, FORMAT_NAME, output); } /** * 生成二维码 * * @param content * 内容 * @param output * 输出流 * @throws Exception */ public static void encode(String content, OutputStream output) throws Exception { QRCodeUtil.encode(content, null, output, false); } /** * 解析二维码 * * @param file * 二维码图片 * @return * @throws Exception */ public static String decode(File file) throws Exception { BufferedImage image; image = ImageIO.read(file); if (image == null) { return null; } BufferedImageLuminanceSource source = new BufferedImageLuminanceSource( image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.CHARACTER_SET, CHARSET); result = new MultiFormatReader().decode(bitmap, hints); String resultStr = result.getText(); return resultStr; } /** * 解析二维码 * * @param path * 二维码图片地址 * @return * @throws Exception */ public static String decode(String path) throws Exception { return QRCodeUtil.decode(new File(path)); } public static void main(String[] args) throws Exception { String text = "http://www.iteye.com"; //这里设置自定义网站url String logoPath = "d:\\zilv.jpg"; String destPath = "d:\\"; QRCodeUtil.encode(text, logoPath, destPath, true); } }
- core-3.1.0.jar (525.8 KB)
- 下载次数: 70
发表评论
-
Zookeeper+SolrCloud+Tomcat搭建分布式搜索应用
2016-03-10 15:39 1054一.简介 SolrCloud是Solr4.0版本以后基于Sol ... -
ZooKeeper之java客户端访问-入门介绍
2016-03-04 10:47 799时间 2014-03-22 22:42:48 CS ... -
Solr 4.7.0部署及java调用solr
2016-02-25 15:19 546参考了以下2个网站 1.Solr在tomcat中的部署 htt ... -
HTTP请求如何带参
2015-11-10 22:21 766HTTP请求如何带参 转载自:http://www.cnbl ... -
MyBatis 配置sql语句输出
2015-09-29 15:37 13181.首先将ibatis log4j运行级别调到DEBUG可以在 ... -
自定义alert提示框
2015-09-23 16:48 674js和css写的自定义弹出框,可以自己修改颜色和布局,使得弹出 ... -
js判断手机系统类型
2015-09-21 13:52 604function checkOSType(){ ... -
net.sf.json.JSONObject 依赖的包
2015-03-01 20:55 6450依赖的包如下图: 主包为json-lib-2.3-jdk13. ... -
通过阻塞队列实现文件关键字检索功能
2015-01-26 13:57 660package com.queue; import ... -
Tomcat热部署
2014-11-25 09:50 544\conf\Catalina\localhost目录下新建xm ... -
合并多个excel文件到一个文件
2014-11-16 19:41 1261package com.ben.utils; imp ... -
Java实现FTP上传和下载
2014-08-14 15:04 879import java.io.ByteArrayInput ... -
使用正则表达式替换数字
2014-06-19 16:38 1235public static void main(Strin ... -
Java Webservice例子
2014-06-17 12:38 5201.webservice服务端代码,发布一个webservic ... -
Java基础知识汇总
2014-05-08 08:28 595一、关于main方法 1.main方法被定义为private, ... -
查看JDK源码
2014-05-07 22:54 533查看JDK源码: step1:打开MyEclipse选择Wi ... -
Java中取两个集合的并集、交集和差集
2014-04-23 16:58 112711.并集 也叫合集,即把两个集合的所有元素加在一起。 pu ... -
JXPathContext支持迷糊匹配
2014-03-12 15:40 1081看完例子就会了 public ... -
统计英文单词的数量
2014-03-12 10:18 772使用正则表达式来统计一段文字中的英文单词的数量 publi ... -
使用序列化方法实现list集合的深拷贝
2014-03-05 14:28 3016对于可序列化(实现Serializable接口)的对象,封装它 ...
相关推荐
总结来说,无论是使用ZXing还是Hutools,Java都可以方便地生成二维码并验证其内容,实现手机扫描后跳转到指定网页的功能。开发者可以根据项目需求和对库的熟悉程度选择合适的方法。在实际应用中,为了增强用户体验,...
【基于Java开发的二维码生成小程序】是一个利用Java编程语言实现的实用工具,它能够帮助用户快速生成可扫描的二维码,这些二维码在扫描后能够跳转到预设的网站。这个小程序集成了二维码编码技术,使得非技术人员也能...
Java 扫二维码自动跳转是一种常见的技术,通过扫描二维码,实现自动跳转到指定页面或执行特定操作。本文将详细介绍 Java 扫二维码自动跳转的实现过程,包括生成 UUID、生成二维码、自动请求服务器查询二维码是否被...
demo中含有jar包对应的maven地址,直接引入到pom中就可以使用了
在实现扫描二维码下载功能时,我们首先需要集成二维码扫描库。对于JAVA环境,我们可以选择Zxing库,它提供了一套完整的二维码生成和识别API。在Android项目中,我们可以使用ZXing的Android端组件,如BarcodeScanner...
移动端用户扫描这个二维码后,可以触发预览或跳转到相关页面。这通常需要一个能够解析二维码并处理相应数据的应用,如微信、支付宝或专门的二维码扫描APP。它们会根据扫描到的信息类型,执行相应的操作,比如打开...
使用Java生成带有Logo的二维码并能够实现扫描二维码跳转到指定地址的功能,源码打的jar包,直接导入就可使用,仅需改几个地址就可使用,零基础的福音!
2. **生成矩阵**:将编码后的二进制数据映射到一个二维的黑白矩阵上。 3. **添加定位和校验信息**:在矩阵的四个角落添加定位图案,以及根据需要添加校验信息,以确保二维码的可识别性。 4. **图像渲染**:将矩阵...
对于微信朋友圈分享,你可以将生成的二维码图片上传至服务器,然后通过微信的分享接口生成带有二维码图片的分享卡片,用户扫描后可以直接跳转到对应的网页。同时,二维码可以携带参数,比如通过URL参数的方式,这样...
二维码扫描** 要实现在Android应用中扫描二维码,首先需要集成ZXing库。这可以通过添加ZXing的AAR依赖到项目的build.gradle文件中,或者将ZXing的源码导入项目。依赖添加后,可以创建一个扫描界面,通常是一个...
本教程将详细介绍如何利用Java代码生成二维码并将其转化为图片,以便用户扫描查看内容或跳转到指定的超链接地址。 首先,我们需要一个Java的二维码生成库,例如`qrcode-generator`或`com.google.zxing`。这里我们...
通过学习和理解这个Java二维码生成的示例,开发者不仅可以掌握如何生成二维码,还可以了解到如何在自己的应用中整合这一功能,提高用户体验。在实际场景中,二维码常用于网址跳转、电子票务、数据交换等方面。
本资源包含了一个使用Java生成二维码的源码案例以及必要的jar包,这对于理解和实践Java二维码生成非常有帮助。 首先,我们需要了解什么是二维码。二维码(Quick Response Code)是二维条形码的一种,它能在有限的...
2. 网站跳转:二维码内嵌网址,用户扫描后可以直接打开网页,方便快捷。 3. 电子名片:通过二维码存储个人联系方式,扫描即可导入到手机通讯录。 4. 商品溯源:商品包装上的二维码可以追溯产品信息,保障消费者权益...
Java实现的生成二维码统计扫描次数并转发到某个地址功能详解 本文主要介绍了Java实现的生成二维码统计扫描次数并转发到某个地址功能的详细实现过程。该功能可以生成带统计功能的二维码,涉及Java二维码的生成、参数...
本工具类专为这个目的设计,能够帮助开发者方便地在JSP页面中生成二维码并实现扫描后自动跳转到指定的URL。 首先,我们需要了解二维码(Quick Response Code)的基本概念。二维码是一种二维条码,可以存储比传统一...
Java生成二维码是一个常见的任务,尤其在移动互联网应用中,用于数据传输、链接跳转或作为电子凭证。这个压缩包文件“java生成二维码共2页.pdf.zip”似乎包含了一个关于如何在Java环境中创建二维码的教程,可能包括...
总结,Zxing是一个强大而灵活的二维码处理库,无论是简单的生成二维码用于分享信息,还是复杂的扫描功能集成到移动应用中,它都能提供高效且可靠的解决方案。通过深入理解和实践,开发者可以轻松地利用Zxing实现一键...
在实际项目中,你可能还需要处理扫描结果的解析,如跳转到特定网页、存储扫描记录、处理不同类型的扫码事件等。 总之,这个"Android扫描二维码及生成二维码Demo"涵盖了Android应用中与二维码交互的核心技术,对于...
手机端的ZXing二维码扫描功能常用于移动应用中,比如扫描商品条码获取价格信息,或者扫描网页上的二维码快速跳转到相应页面。而Web端的JS二维码生成则广泛应用于网站,用户可以生成二维码分享网址、电子名片或者下载...