`

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

    博客分类:
  • java
 
阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 加载TXT文件
 * @author mukeliang
 * 2014年9月15日
 */
public class LoaderTxtFile {
	/**
	 * 功能:Java读取txt文件的内容
	 * 步骤:1:先获得文件句柄
	 * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
	 * 3:读取到输入流后,需要读取生成字节流
	 * 4:一行一行的输出。readline()。
	 * 备注:需要考虑的是异常情况
	 * @param filePath
	 */
	public static List<String> readTxtFile(String filePath){
		List<String> list = new ArrayList<String>();
		
		try {
			
			String encoding="GBK";
			File file=new File(filePath);
			if(file.isFile() && file.exists()){ //判断文件是否存在
				InputStreamReader read = new InputStreamReader(
						new FileInputStream(file),encoding);//考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				String lineTxt = null;
				
				while((lineTxt = bufferedReader.readLine()) != null){
					System.out.println(lineTxt);
					list.add(lineTxt);
				}
				read.close();
			}else{
				System.out.println("找不到指定的文件");
			}
			
			
		} catch (Exception e) {
			System.out.println("读取文件内容出错");
			e.printStackTrace();
		}
		
		return list;

	}

	public static void main(String argv[]){
		String filePath = "d:\\test.txt";
		// "res/";
		readTxtFile(filePath);
	}

}

 

import java.awt.image.BufferedImage; 

import jp.sourceforge.qrcode.data.QRCodeImage; 

public class TwoDimensionCodeImage implements QRCodeImage { 
    BufferedImage bufImg; 

    public TwoDimensionCodeImage(BufferedImage bufImg) { 
        this.bufImg = bufImg; 
    } 

    @Override 
    public int getHeight() { 
        return bufImg.getHeight(); 
    } 

    @Override 
    public int getPixel(int x, int y) { 
        return bufImg.getRGB(x, y); 
    } 

    @Override 
    public int getWidth() { 
        return bufImg.getWidth(); 
    } 

}

 

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.util.List;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;

import com.swetake.util.Qrcode;

public class TwoDimensionCode { 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param imgPath 图片路径 
     */ 
    public void encoderQRCode(String content, String imgPath) { 
        this.encoderQRCode(content, imgPath, "png", 7); 
    } 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param output 输出流 
     */ 
    public void encoderQRCode(String content, OutputStream output) { 
        this.encoderQRCode(content, output, "png", 7); 
    } 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param imgPath 图片路径 
     * @param imgType 图片类型 
     */ 
    public void encoderQRCode(String content, String imgPath, String imgType) { 
        this.encoderQRCode(content, imgPath, imgType, 7); 
    } 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param output 输出流 
     * @param imgType 图片类型 
     */ 
    public void encoderQRCode(String content, OutputStream output, String imgType) { 
        this.encoderQRCode(content, output, imgType, 7); 
    } 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param imgPath 图片路径 
     * @param imgType 图片类型 
     * @param size 二维码尺寸 
     */ 
    public void encoderQRCode(String content, String imgPath, String imgType, int size) { 
        try { 
            BufferedImage bufImg = this.qRCodeCommon(content, imgType, size); 

            File imgFile = new File(imgPath); 
            // 生成二维码QRCode图片  
            ImageIO.write(bufImg, imgType, imgFile); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 

    /** 
     * 生成二维码(QRCode)图片 
     * @param content 存储内容 
     * @param output 输出流 
     * @param imgType 图片类型 
     * @param size 二维码尺寸 
     */ 
    public void encoderQRCode(String content, OutputStream output, String imgType, int size) { 
        try { 
            BufferedImage bufImg = this.qRCodeCommon(content, imgType, size); 
            // 生成二维码QRCode图片  
            ImageIO.write(bufImg, imgType, output); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 

    /** 
     * 生成二维码(QRCode)图片的公共方法 
     * 没有LOGO图片的情况
     * @param content 存储内容 
     * @param imgType 图片类型 
     * @param size 二维码尺寸 
     * @return 
     */ 
    private BufferedImage qRCodeCommonBak(String content, String imgType, int size) { 
        BufferedImage bufImg = null; 
        try { 
            Qrcode qrcodeHandler = new Qrcode(); 
            // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小  
            qrcodeHandler.setQrcodeErrorCorrect('M'); 
            qrcodeHandler.setQrcodeEncodeMode('B'); 
            // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大  
            qrcodeHandler.setQrcodeVersion(size); 
            // 获得内容的字节数组,设置编码格式  
            byte[] contentBytes = content.getBytes("utf-8"); 
            // 图片尺寸  
            int imgSize = 67 + 12 * (size - 1); 
            bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB); 
            Graphics2D gs = bufImg.createGraphics(); 
            // 设置背景颜色  
            gs.setBackground(Color.WHITE); 
            gs.clearRect(0, 0, imgSize, imgSize); 
            String logoPath = "images/logo.png";
            Image img = ImageIO.read(new File(logoPath));// 实例化一个Image对象。
			gs.drawImage(img, 10, 10, null);

            // 设定图像颜色> BLACK  
            gs.setColor(Color.BLACK); 
            // 设置偏移量,不设置可能导致解析出错  
            int pixoff = 2; 
            // 输出内容> 二维码  
            if (contentBytes.length > 0 && contentBytes.length < 800) { 
                boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes); 
                for (int i = 0; i < codeOut.length; i++) { 
                    for (int j = 0; j < codeOut.length; j++) { 
                        if (codeOut[j][i]) { 
                            gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); 
                        } 
                    } 
                } 
            } else { 
                throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800]."); 
            } 
            gs.dispose(); 
            bufImg.flush(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        return bufImg; 
    } 
    
    /**
     * 有LOGO图片的情况
     * @param content
     * @param imgType
     * @param size
     * @return
     */
    private BufferedImage qRCodeCommon(String content, String imgType, int size) { 
        BufferedImage bufImg = null; 
        try { 
        	Qrcode qrcodeHandler = new Qrcode();
			// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
			qrcodeHandler.setQrcodeErrorCorrect('M');
			// N代表数字,A代表字符a-Z,B代表其他字符
			qrcodeHandler.setQrcodeEncodeMode('B');
			// 设置设置二维码版本,取值范围1-40,值越大尺寸越大,可存储的信息越大
			qrcodeHandler.setQrcodeVersion(8);

			byte[] contentBytes = content.getBytes("utf-8");
			bufImg = new BufferedImage(149, 149,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D gs = bufImg.createGraphics();

			gs.setBackground(Color.WHITE);
			gs.clearRect(0, 0, 149, 149);

			// 设定图像颜色 > BLACK
			gs.setColor(Color.BLACK);

			// 设置偏移量 不设置可能导致解析出错
			int pixoff = 2;
			// 输出内容 > 二维码
			if (contentBytes.length > 0 && contentBytes.length < 150) {
				boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
				for (int i = 0; i < codeOut.length; i++) {
					for (int j = 0; j < codeOut.length; j++) {
						if (codeOut[j][i]) {
							gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
						}
					}
				}
			} else {
				System.err.println("QRCode content bytes length = "
						+ contentBytes.length + " not in [ 0,125]. ");
				return null;
			}
			
			String logoPath = "d:\\TwoDimension\\logo.png";
//			String logoPath = "images/logo.png";
			Image img = ImageIO.read(new File(logoPath));// 实例化一个Image对象。
			gs.drawImage(img, 50, 50, null);
			gs.dispose();
			bufImg.flush();
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        return bufImg; 
    } 

    /** 
     * 解析二维码(QRCode) 
     * @param input 输入流 
     * @return 
     */ 
    public String decoderQRCode(InputStream input) { 
        BufferedImage bufImg = null; 
        String content = null; 
        try { 
            bufImg = ImageIO.read(input); 
            QRCodeDecoder decoder = new QRCodeDecoder(); 
            content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8"); 
        } catch (IOException e) { 
            System.out.println("Error: " + e.getMessage()); 
            e.printStackTrace(); 
        } catch (DecodingFailedException dfe) { 
            System.out.println("Error: " + dfe.getMessage()); 
            dfe.printStackTrace(); 
        } 
        return content; 
    }
    
    public static void main(String[] args) throws Exception { 
    	String filePath = "D:\\TwoDimension\\sourcefile\\sourceurl.txt";
    	
    	List sourceFileList = LoaderTxtFile.readTxtFile(filePath);
    	for(int j=0;j<sourceFileList.size();j++){
    		
    		//解析sourceurl.txt文件中的数据,并生成对应的目录,用以存放生成的二维码数据
    		String sourceFile = (String)sourceFileList.get(j);
    		
    		//D:\TwoDimension\sourcefile\126\126.txt
    		String[] tempAarray = sourceFile.split("\\\\");
    		
    		//取出126目录
    		String generateDir = tempAarray[3];
    		
    		//D:\\TwoDimension\\targetfile\\126\\
    		String targetPath = "D:\\TwoDimension\\targetfile\\" + generateDir + "\\";
    		File file = new File(targetPath);
    		if(!file.exists()){
    			file.mkdir();
    		}
    		
    		
    		//解析数据文件中的URL地址,生成二维码
    		List sourceDataList = LoaderTxtFile.readTxtFile(sourceFile);
        	
        	for(int i=0;i<sourceDataList.size();i++){
        		
        		String encodeUrlAddress = (String)sourceDataList.get(i);
        		
        		//从 http://www.51art.com/jingmai/A831001 中,取出拍品编号
        		String auctionNo = encodeUrlAddress.substring(encodeUrlAddress.lastIndexOf("/")+1);
        		
        		//D:\\TwoDimension\\targetfile\\126\\A831001.png
                String imgPath = targetPath + auctionNo+".png";
                
                //生成二维码
                TwoDimensionCode handler = new TwoDimensionCode(); 
                handler.encoderQRCode(encodeUrlAddress, imgPath, "png"); 


                //将二维码解析成对应的数据
                String decoderContent = handler.decoderQRCode(new FileInputStream(imgPath)); 
                System.out.println(decoderContent); 
                
        	}
    	}
    	
    	System.out.println("========================完成=========================");
    	
    } 
  
} 

 

分享到:
评论

相关推荐

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

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

    Python生成带批量生成带自定义文字Logo二维码

    使用Python连接数据库,读取数据,然后循环遍历动态批量生成带不同自定义文字Logo的二维码。分开后主要分为几个主要点:1:生成带LOGO的二维码 2:生成自定义文字的LOGO,3:图片处理为圆角 4 连接数据库 附带连接...

    C#二维码功能代码,支持批量生成二维码图片,支持二维码图片中带描述内容。

    今天用到了zxing,做了一个二维码生成小工具,在这里把全部源码公开,源码使用的是.net 4.6版本,可直接运行。源码中含有二维码带LOGO方法,二维码下方带描述内容,还可以批量的生成多张二维码图片。

    单个或批量导入带LOGO的二维码生成器

    二维码生成器是一款强大的工具,专为用户设计,能够帮助他们快速、便捷地创建带有自定义LOGO的二维码,无论是单个还是批量处理。这个程序的独特之处在于它支持从文件中导入LOGO和其他相关信息,使得二维码的个性化...

    C#生成带LOGO的二维码

    同时,也可以根据需求扩展功能,比如支持动态生成、批量生成二维码,或者添加更多自定义元素,如颜色、边框等。 总之,C#生成带LOGO的二维码是一项实用的技术,结合了编程、图像处理和数据编码等多个领域的知识。...

    利用Qrcode批量生成二维码

    "利用Qrcode批量生成二维码"这个主题聚焦于如何高效地创建大量的二维码,结合了QrCodeNet库的功能,它提供了批量生成、导出和排版打印的便捷服务。以下是关于这一主题的详细知识讲解: 1. **QrCode概念**:二维码是...

    二维码图片批量生成

    6. **设计与美化**:批量生成的二维码可以通过调整颜色、添加logo等方式进行个性化设计,使其更具吸引力,同时也可增强品牌形象。 7. **安全考虑**:虽然二维码方便快捷,但也有安全风险。用户应确保生成和扫描的...

    批量生成二维码

    5. **自定义设计**:除了基本信息外,批量生成的二维码还可以进行个性化设计,如添加公司LOGO、更改颜色方案、设置背景图片等,提升品牌形象。 6. **API接口**:对于程序员来说,可以利用各种二维码生成API,如...

    Python3批量生成带logo的二维码方法

    ### Python3批量生成带logo的二维码方法 在数字化时代,二维码因其便捷性和高效性而被广泛应用,尤其是在商业、营销及日常生活中。对于企业而言,带有自身logo的二维码不仅能够提升品牌形象,还能增加用户识别度。...

    2024在线批量生成二维码网站源码

    《在线批量生成二维码网站源码解析与应用》 在当今数字化时代,二维码作为一种高效的信息载体,广泛应用于广告宣传、移动支付、数据交换等多个领域。为了满足企业和个人对二维码批量生成的需求,出现了各种在线生成...

    二维码批量生成器(原创)

    二维码批量生成器是一款基于ZZY.QR二维码工具的原创软件,专为需要大量生成带有特定文字内容的二维码的用户设计。这款工具简化了二维码制作流程,尤其适合企业、营销人员或者个人在进行大规模宣传活动时使用。它允许...

    二维码批量处理工具

    2. **批量生成二维码图片**:用户可以批量生成二维码,不仅能够输入文本数据,还可以根据需求自定义设置,比如添加企业LOGO,使得生成的二维码更具辨识度和品牌特色。 3. **支持Excel表格导入**:工具支持从Excel...

    批量二维码生成(源码)

    其次,批量生成二维码涉及到文件读取和解析。在本案例中,使用了Excel作为数据源,因此需要熟悉Excel文件格式,如CSV或XLSX。Python中的pandas库是一个非常方便的数据处理工具,它可以轻松读取和操作Excel数据。通过...

    二维码系统 二维码开发工具 可以实现批量生成二维码功能

    输入待编码的数据(如网址、文本、联系方式等),设置好相关参数(如二维码的大小、颜色、纠错级别等),然后点击批量生成按钮,程序就会按照指定数量生成相应的二维码图片。 在生成过程中,你可以选择不同的格式...

    SQ二维码批量生成器V1.0绿色免费版

    SQ二维码批量生成器是由吾爱破解大神制作的便捷的二维码批量生成软件,软件支持批量二维码生成,需要的朋友可以前来本站下载。 软件特征 1、二维码快速批量生成 2、支持内嵌logo 3、支持二维码下方添加相应文本 ...

    php生成二维码

    4. **自定义样式**:除了基本的生成,我们还可以自定义二维码的样式,比如添加logo、改变颜色、使用自定义字体等。例如,`Endroid QR Code`库提供了设置图标、使用SVG渲染、调整边框等功能。 5. **保存到文件**:...

    二维码花式二维码带logo

    总结来说,"二维码花式二维码带logo"涉及的技术和应用包括但不限于:二维码编码技术、图形处理、品牌标识设计、批量生成工具的使用以及数据分析。通过这些技术手段,我们可以创造出既美观又实用的二维码,有效地服务...

    DM二维码生成器

    批量生成和打印功能则是为了提高效率,使得用户可以一次性生成多个二维码并将其布局在A4纸上。这通常涉及到图像处理技术,包括二维码的排版、留白处理、页眉页脚的添加等。生成的A4模板可以方便地导入到打印机进行...

Global site tag (gtag.js) - Google Analytics