`
raymond.chen
  • 浏览: 1436893 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

生成带logo的二维码图片

    博客分类:
  • Java
 
阅读更多

源码如下:

private static final int IMG_WIDTH = 160;
private static final int IMG_HEIGHT = 160;
private static final String IMG_FORMAT = "JPEG";

/**
 * 生成二维码
 * @param filepath 图标输出路径
 * @param logoPath logo图片全路径
 * @param content 二维码内容
 * @return 文件名
 */
public static String genQrCode(String filepath, String logoPath, String content, int cutWidth) throws Exception {
	File file = new File(filepath);
	if (!file.exists()) {
		file.mkdirs();
	}

	if (!filepath.endsWith("/") && !filepath.endsWith("\\")) {
		filepath += File.separator;
	}

	String filename = "qrcode_tmp.jpeg";
	String tmpFilePath = filepath + filename;

	//生成二维码图片
	Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
	hints.put(EncodeHintType.CHARACTER_SET, "GBK");
	hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

	MultiFormatWriter writer = new MultiFormatWriter();
	BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, IMG_WIDTH, IMG_HEIGHT, hints);
	
	FileOutputStream fos = null;
	try{
		fos = new FileOutputStream(new File(tmpFilePath));
		MatrixToImageWriter.writeToStream(matrix, IMG_FORMAT, fos);
		fos.flush();
	}finally{
		if(fos != null){
			fos.close();
		}
	}
	
	//裁剪二维码图片
	String destFileName = "qrcode.jpeg";
	String destFilepath = filepath + destFileName;
	
	cut(tmpFilePath, destFilepath, logoPath, cutWidth, cutWidth, IMG_WIDTH-cutWidth*2, IMG_HEIGHT-cutWidth*2);
	
	return destFileName;
}

/**
 * 切割图片
 * @param sourPath 原图片全路径
 * @param destPath 目标图片全路径
 * @param logoPath logo图片全路径
 * @param x x坐标
 * @param y y坐标
 * @param width 宽度
 * @param height 高度
 */
private static void cut(String sourPath, String destPath, String logoPath, 
		int x, int y, int width, int height) throws IOException {  
	FileInputStream is = null;  
	ImageInputStream iis = null;  
	
	try {   
		is = new FileInputStream(sourPath); 
		iis = ImageIO.createImageInputStream(is);   

		Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(IMG_FORMAT); 
		ImageReader reader = it.next();
		reader.setInput(iis, true);  

		ImageReadParam param = reader.getDefaultReadParam();
		param.setSourceRegion(new Rectangle(x, y, width, height));  

		BufferedImage bi = reader.read(0, param); 
		
		if(StringUtils.isNotEmpty(logoPath)){
			BufferedImage logoImg = ImageIO.read(new File(logoPath));
			createQRCodeBitmap(bi, logoImg, destPath);
		}else{
			ImageIO.write(bi, IMG_FORMAT, new File(destPath));
		}
		
	} finally {  
		if (is != null){
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}  
		}
		
		if (iis != null){
			try {
				iis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}  
		}
	} 
}  

/**
 * 为二维码图片添加logo图片
 * @param qrcodeImg 二维码图片
 * @param logoImg logo图片
 * @param destFilePath 目标图片路径
 */
private static void createQRCodeBitmap(BufferedImage qrcodeImg, BufferedImage logoImg, String destFilePath) throws IOException { 
	BufferedImage image = new BufferedImage(qrcodeImg.getWidth(), qrcodeImg.getHeight(), BufferedImage.TYPE_INT_RGB);
	Graphics2D g = (Graphics2D)image.getGraphics(); 
	
	//画二维码图片
	g.drawImage(qrcodeImg, 0, 0, null);
	
	int x = (qrcodeImg.getWidth() - logoImg.getWidth()) / 2;
	int y = (qrcodeImg.getHeight() - logoImg.getHeight()) / 2;
	
	//在中间画logo图片
	g.drawImage(logoImg, x, y, null);
	
	//生成目标图片
	ImageIO.write(image, IMG_FORMAT, new File(destFilePath));
}  

public static void main(String[] args) {
	try {
		String content = "http://www.163.com";
		String filename = genQrCode("D:\\", "D:\\logo.jpg", content, 25);
		System.out.println(filename);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

 

分享到:
评论

相关推荐

    android 带LOGO二维码生成

    直接生成带LOGO二维码,不用先生成二维码,再将LOGO画上去

    java生成带logo二维码,图片嵌套工具类

    java生成二维码工具类,包括生成二维码,生成带logo二维码,图片嵌套图片,二维码嵌套到大图中等等功能。

    phpqrcode生成带logo二维码,logo图标缩放不失真不变形源代码

    `QQ截图20210615105054.png`很可能是一个示例的logo图片,或者是一个生成的带有logo的二维码的示例结果。用户可能需要将这个logo图片的路径传递给`qrcode.php`,然后脚本会将logo插入到生成的二维码中心或指定位置,...

    QRCODE生成带LOGO二维码,自动调整LOGO图片大小

    经过测试,通过QRcode.jar里的生成二维码方法生成带LOGO二维码,代码中会将LOGO调整为固定大小。

    java生成带Logo二维码

    以上就是使用Java生成带Logo二维码以及解密二维码的基本操作。在实际应用中,我们还需要考虑错误处理、二维码格式转换、容错级别调整等因素,以满足不同场景的需求。在进行这些操作时,确保遵循最佳实践,比如合理...

    ios-一个方法生成带logo的二维码和一个方法读取二维码中的信息..zip

    在iOS开发中,生成带有logo的二维码以及读取二维码中的信息是常见的功能需求。这个压缩包文件"ios-一个方法生成带logo的二维码和一个方法读取二维码中的信息..zip"提供了解决这一问题的解决方案,主要包含了一个名为...

    java zing识别、生成带logo二维码

    本项目聚焦于“java zing识别、生成带logo二维码”,这涉及到Java二维码库的使用,特别是如何在二维码中嵌入自定义logo,提升二维码的视觉效果和品牌辨识度。 首先,`QRCodeUtil.java`文件很可能是实现二维码生成的...

    android 带Logo二维码生成源码

    这个“android带Logo二维码生成源码”项目提供了一种解决方案,允许用户从手机图库选择图片作为Logo,并自定义输入信息,生成个性化二维码,最后将其保存到手机图库中。 首先,我们要理解二维码的生成原理。二维码...

    VB.NET实现生成带logo二维码功能程序源码

    资源名:VB.NET实现生成带logo二维码功能程序源码 资源类型:程序源代码 源码说明: 基于vb.net写的生成带logo二维码功能程序源码 包含完整代码和注释 很适合借鉴学习 适合人群:新手及有一定经验的开发人员

    Android生成带LOGO的二维码,包括扫描、读取和识别.rar

    Android使用QRCode类库生成带LOGO的二维码,包括扫描、读取和识别,原工程从Github上获得,在此基础上经过优化和完善,相信对研究Android二维码相关操作会有不小的帮助。代码里包括了比较多的二维码操作的封装类库,...

    C#.NET生成普通二维码方法及生成带图片二维码方法源码Demo

    本文将详细介绍如何使用C#.NET实现这两种功能:生成普通二维码以及生成带有图片的二维码。 首先,生成普通二维码的基础步骤涉及使用第三方库,如ZXing.Net(Zebra Crossing的.NET版本)。ZXing是一个流行的开源库,...

    jquery.qrcode.js生成带logo的二维码

    这里有两个`&lt;div&gt;`元素,第一个用于生成二维码,第二个用于展示生成后的二维码图片。 ##### 3. 初始化插件 接下来使用jQuery选择器初始化`qrcode`插件,并传入相应的配置参数: ```javascript var url = ...

    中间带logo图片的二维码生成

    "中间带logo图片的二维码生成"这个主题就是关于如何在生成的二维码中间插入logo图片,以实现个性化和专业化的展示。 首先,我们要了解如何使用qrCode库来生成二维码。qrCode库通常提供了API接口,允许开发者自定义...

    批量生成带LOGO的二维码图片

    批量生成带LOGO的二维码图片是一项常见的需求,例如在品牌宣传、活动推广等场景中。本文将详细解析如何实现这一功能,主要涉及的技术点包括二维码生成、图像处理以及可能用到的编程语言,如Python。 首先,我们要...

    生成带logo的二维码

    基于winfrom开发生成带logo的二维码,其中包括要求输入二维码链接地址和logo图,生成二维码和导出二维码

    生成带logo的二维码 超简单

    # 保存生成的带logo的二维码图片 img.save('带logo的二维码.png') ``` 这段代码会生成一个包含指定URL的二维码,并在其中心位置嵌入logo图片。你可以根据需要调整logo的位置和大小,以及二维码的样式。 为了将此...

    Java用qrcode生成带logo二维码包含QRCode.jar

    本教程将详细讲解如何使用`QRCode.jar`库在Java中生成带有Logo的二维码,以及所需的基本步骤和关键知识点。 首先,我们需要了解`QRCode.jar`库。这是一个专门用于生成二维码的Java库,它提供了方便的API接口,使得...

    JavaScript生成带logo的二维码

    要添加logo,我们需要将生成的二维码图片与logo图片合并。这通常通过HTML5的`canvas`元素实现,先绘制二维码,再在其上叠加logo图像。 2. **代码实现**: 首先,你需要引入`qrcode-generator`库。然后,创建一个...

    unigui_生成带logo二维码.rar

    本压缩包"unigui_生成带logo二维码.rar"显然与使用Unigui在Delphi环境下生成带有Logo的二维码相关。下面将详细讲解如何在Delphi中利用Unigui实现这一功能,以及可能涉及到的相关技术。 1. **Unigui框架**:Unigui是...

    WIndow下使用QT C++开发生成带Logo的二维码的程序

    现在二维码很流行,大街小巷大小商品广告上的二维码标签都随处可见,而且...网上比较少介绍基于windows下的C++二维码编码信息,最近正好在windows平台下使用QT开发了一个简单的生成带LOGO的二维码小程序,特记录一下。

Global site tag (gtag.js) - Google Analytics