生成带logo图像的二维码

首先先处理图像

将图片按自己的要求进行缩放,以便于加载到二维码的中心
 */  
    private static BufferedImage scale(String srcImageFile, int height,  
            int width) throws IOException {  

        File file = new File(srcImageFile);  
        BufferedImage srcImage = ImageIO.read(file);  
        Image destImage = srcImage.getScaledInstance(width, height,  
                BufferedImage.SCALE_SMOOTH);  
        Image smallImg =destImage.getScaledInstance(width, height, Image.SCALE_SMOOTH); 

        BufferedImage newImage = new BufferedImage(height, width, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = newImage.createGraphics();
        g.drawImage(smallImg, 0, 0, null);
        g.dispose();
        ImageIO.write(newImage,  
                "jpg", new File("E:/谷歌下载/354.jpg")); 
        return newImage;  
    }  

srcImageFile:需要处理图片的地址
height:想要得到图片的高度
width:想要得到图片的宽度

开始生成二维码

 private static BufferedImage genBarcode(String content, int width,  
            int height, String fImage) throws WriterException,  
            IOException {  
        // 读取源图像  
        BufferedImage scaleImage = scale(fImage, IMAGE_WIDTH,  
                IMAGE_HEIGHT);  

        int[][] srcPixels = new int[IMAGE_WIDTH][IMAGE_HEIGHT];  
        for (int i = 0; i < scaleImage.getWidth(); i++) {  
            for (int j = 0; j < scaleImage.getHeight(); j++) {  
                srcPixels[i][j] = scaleImage.getRGB(i, j);  
            }  
        }  

        java.util.Hashtable hint = new java.util.Hashtable();  
        hint.put(EncodeHintType.CHARACTER_SET, "utf-8");  
        hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);  
        // 生成二维码  
        BitMatrix matrix = mutiWriter.encode(content, BarcodeFormat.QR_CODE,  
                width, height, hint);  

        // 二维矩阵转为一维像素数组  
        int halfW = matrix.getWidth() / 2;  
        int halfH = matrix.getHeight() / 2;  
        int[] pixels = new int[width * height];   
        for (int y = 0; y < matrix.getHeight(); y++) {  
            for (int x = 0; x < matrix.getWidth(); x++) {  
                // 读取图片  
                if (x > halfW - IMAGE_HALF_WIDTH  
                        && x < halfW + IMAGE_HALF_WIDTH  
                        && y > halfH - IMAGE_HALF_WIDTH  
                        && y < halfH + IMAGE_HALF_WIDTH) {  
                    pixels[y * width + x] = srcPixels[x - halfW  
                            + IMAGE_HALF_WIDTH][y - halfH + IMAGE_HALF_WIDTH];  
                }  
                // 在图片四周形成边框  
                else if ((x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH  
                        && x < halfW - IMAGE_HALF_WIDTH + FRAME_WIDTH  
                        && y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH  
                        + IMAGE_HALF_WIDTH + FRAME_WIDTH)  
                        || (x > halfW + IMAGE_HALF_WIDTH - FRAME_WIDTH  
                                && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH  
                                && y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH  
                                + IMAGE_HALF_WIDTH + FRAME_WIDTH)  
                        || (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH  
                                && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH  
                                && y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH  
                                - IMAGE_HALF_WIDTH + FRAME_WIDTH)  
                        || (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH  
                                && x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH  
                                && y > halfH + IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH  
                                + IMAGE_HALF_WIDTH + FRAME_WIDTH)) {  
                    pixels[y * width + x] = 0xfffffff;  
                } else {  
                    // 此处可以修改二维码的颜色,可以分别制定二维码和背景的颜色;  
                    pixels[y * width + x] = matrix.get(x, y) ? 0x8a2be2//ff000000,黑色
                            : 0xfffffff;  
                }  
            }  
        }  

        BufferedImage image = new BufferedImage(width, height,  
                BufferedImage.TYPE_INT_RGB);  
        image.getRaster().setDataElements(0, 0, width, height, pixels);  

        return image;  
    }  

定义生成的图片格式,存放路径

  public static void encode(String content, int width, int height,  
            String fImage, String sImage) {  
        try {  
            // ImageIO.write 参数 1、BufferedImage 2、输出的格式 3、输出的文件  
            ImageIO.write(genBarcode(content, width, height, fImage),  
                    "jpg", new File(sImage));  

        } catch (IOException e) {  
            e.printStackTrace();  
        } catch (WriterException e) {  
            e.printStackTrace();  
        }  
    }  

测试

public static void main(String[] args) {  
         Logo_Two_Code l = new Logo_Two_Code();

         File fileToUpload = new File("C:/Users/cjyun/Desktop/sql分析.doc");
            try {
                InputStream in = new FileInputStream(fileToUpload);
                l.encode(
                        " 哥下辈子我要做个女人,找个像我这样的男人我岂"
                        + "是一个帅字形容了得。我乃:英俊潇洒、风流倜傥、玉树临风、年少多金、神勇威武、天下无敌、宇内第一、寂寞高手、刀枪不入、唯我独尊、玉面郎君、仁者无敌、勇者无惧、金刚不坏、英明神武、侠义非凡、义薄云天、古往今来、无与伦比、谦虚好学、不耻下问、聪明伶俐、活泼可爱、待友热情、对敌冷酷、头脑精明、仙福永享、有胆有色、举世无双、既酷又帅、单身贵族、至尊至圣、至高无上、华丽绚烂、英勇无比、道德榜样、千杯不醉、坐怀不乱、知识渊博、才高八斗、傲视众生、世外高人、光明磊落、公正无私、震古烁今,第一大英雄大豪杰大侠客大宗师,急如风、静如林、掠如火、不动如山,号称一朵梨花压海棠,人送 绰号上天下地无所不能玉面小飞龙,英俊与智慧的化身,侠义与仁义的糅合,前辈高人巨侠是也。QQ:811861193",
                        800, 800, "E:/谷歌下载/12.jpg", "E:/谷歌下载/234.jpg"); 
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }  

结果

总结

还是图片大的话好看,还清楚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值