Java生成二维码并用FastDFS上传到文件服务器返回图片地址

1. maven依赖

 <dependency>
   <groupId>com.google.zxing</groupId>
   <artifactId>core</artifactId>
   <version>3.1.0</version>
</dependency>
 <dependency>
   <groupId>commons-codec</groupId>
   <artifactId>commons-codec</artifactId>
   <version>1.9</version>
</dependency>
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>javase</artifactId>
   <version>3.2.1</version>
</dependency>

2. 生成二维码工具类

package com.eongb0.common.utils;

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

//二维码工具类(使用ZXingjar包)
public class QRCodeUtils {
    // 默认宽为300
    private Integer width = 600;
    // 默认高为300
    private Integer height = 600;
    // 默认二维码图片格式
    private String imageFormat = "png";
    // 默认二维码字符编码
    private String charType = "utf-8";
    // 默认二维码的容错级别  

    // 容错等级 L、M、Q、H 其中 L 为最低, H 为最高
    private ErrorCorrectionLevel corretionLevel = ErrorCorrectionLevel.M;
    // 二维码与图片的边缘
    private Integer margin = 0;
    // 二维码参数
    private Map<EncodeHintType, Object> encodeHits = new HashMap<EncodeHintType, Object>();  

    public QRCodeUtils(Integer width, Integer height, String imageFormat, String charType,
            ErrorCorrectionLevel corretionLevel, Integer margin) {
        if (width != null) {
            this.width = width;
        }
        if (height != null) {
            this.height = height;
        }
        if (imageFormat != null) {
            this.imageFormat = imageFormat;
        }
        if (charType != null) {
            this.charType = charType;
        }
        if (corretionLevel != null) {
            this.corretionLevel = corretionLevel;
        }
        if (margin != null) {
            this.margin = margin;
        }
    }  

    public QRCodeUtils(Integer width, Integer height, String imageFormat, String charType,
            ErrorCorrectionLevel corretionLevel) {
        this(width, height, imageFormat, charType, corretionLevel, null);
    }  

    public QRCodeUtils(Integer width, Integer height, String imageFormat, String charType, Integer margin) {
        this(width, height, imageFormat, charType, null, margin);
    }  

    public QRCodeUtils(Integer width, Integer height, String imageFormat, String charType) {
        this(width, height, imageFormat, charType, null, null);
    }  

    public QRCodeUtils(Integer width, Integer height, String imageFormat) {
        this(width, height, imageFormat, null, null, null);
    }  

    public QRCodeUtils(Integer width, Integer height) {
        this(width, height, null, null, null, null);
    }  

    public QRCodeUtils() {
    }  

    // 初始化二维码的参数
    private void initialParamers() {
        // 字符编码
        encodeHits.put(EncodeHintType.CHARACTER_SET, this.charType);
        // 容错等级 L、M、Q、H 其中 L 为最低, H 为最高
        encodeHits.put(EncodeHintType.ERROR_CORRECTION, this.corretionLevel);
        // 二维码与图片边距
        encodeHits.put(EncodeHintType.MARGIN, margin);
    }  

    // 得到二维码图片
    public BufferedImage getBufferedImage(String content) {
        initialParamers();
        BufferedImage bufferedImage = null;
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, this.width,
                    this.height, this.encodeHits);  

            //去掉白边
            int[] rec = bitMatrix.getEnclosingRectangle();
            int resWidth = rec[2] + 1;
            int resHeight = rec[3] + 1;
            BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
            resMatrix.clear();
            for (int i = 0; i < resWidth; i++) {
                for (int j = 0; j < resHeight; j++) {
                    if (bitMatrix.get(i + rec[0], j + rec[1])) {
                         resMatrix.set(i, j);
                    }
                }
            }
            //2
            int width = resMatrix.getWidth();
            int height = resMatrix.getHeight();
            bufferedImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB);
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                	bufferedImage.setRGB(x, y, resMatrix.get(x, y) == true ?
                    Color.BLACK.getRGB():Color.WHITE.getRGB());
                }
            }
        } catch (WriterException e) {
            e.printStackTrace();
            return null;
        }
        return bufferedImage;
    }  

    // 将二维码保存到输出流中
    public void writeToStream(String content, OutputStream os) {
        initialParamers();
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, this.width, this.height,
                    this.encodeHits);
            MatrixToImageWriter.writeToStream(matrix, this.imageFormat, os);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }  

    // 将二维码图片保存为文件
    public void createQrImage(String content, File file) {
        initialParamers();
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, this.width, this.height,this.encodeHits);
            MatrixToImageWriter.writeToFile(matrix, this.imageFormat, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }  

    // 将二维码图片保存到指定路径
    public void createQrImage(String content, String path) {
        initialParamers();
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, this.width, this.height,this.encodeHits);
            MatrixToImageWriter.writeToPath(matrix, this.imageFormat, new File(path).toPath());
            //MatrixToImageWriter.

        } catch (Exception e) {
            e.printStackTrace();
        }
    }  

    public void newcreateQrImage(String content, String path) {
        initialParamers();
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, this.width, this.height,this.encodeHits);
           // MatrixToImageWriter.writeToPath(matrix, this.imageFormat, new File(path).toPath());
            //MatrixToImageWriter.w

        } catch (Exception e) {
            e.printStackTrace();
        }
    }   

    //识别图片二维码
    public String decodeQrImage(File file){
        String content=null;
        try {
            BufferedImage bufferedImage=ImageIO.read(new FileInputStream(file));
            LuminanceSource source=new BufferedImageLuminanceSource(bufferedImage);
            Binarizer binarizer=new HybridBinarizer(source);
            BinaryBitmap image=new BinaryBitmap(binarizer);
            Map<DecodeHintType,Object> decodeHits=new HashMap<DecodeHintType, Object>();
            decodeHits.put(DecodeHintType.CHARACTER_SET, this.charType);
            Result result=new MultiFormatReader().decode(image, decodeHits);
            content=result.getText();
        }catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }  

    public Integer getWidth() {
        return width;
    }  

    public void setWidth(Integer width) {
        this.width = width;
    }  

    public Integer getHeight() {
        return height;
    }  

    public void setHeight(Integer height) {
        this.height = height;
    }  

    public String getImageFormat() {
        return imageFormat;
    }  

    public void setImageFormat(String imageFormat) {
        this.imageFormat = imageFormat;
    }  

    public String getCharType() {
        return charType;
    }  

    public void setCharType(String charType) {
        this.charType = charType;
    }  

    public ErrorCorrectionLevel getCorretionLevel() {
        return corretionLevel;
    }  

    public void setCorretionLevel(ErrorCorrectionLevel corretionLevel) {
        this.corretionLevel = corretionLevel;
    }  

    public Integer getMargin() {
        return margin;
    }  

    public void setMargin(Integer margin) {
        this.margin = margin;
    }  

    public Map<EncodeHintType, Object> getHits() {
        return encodeHits;
    }  

    public void setHits(Map<EncodeHintType, Object> hits) {
        this.encodeHits = hits;
    }  

}

3.  将生成的二维码上传到FastDFS接口

   @ApiOperation("获取二维码URL")
    @GetMapping("getCodeUrl")
    public Result packageUrlForLink(@LoginUser(isFull = true) SysUser user){
        String link="";
        QRCodeUtils qrCode=new QRCodeUtils(100,100);
        qrCode.setMargin(1);
        String deptId = user.getDeptId();
        SysDept dept = userService.findDeptById(deptId);
        String content = "部门名称:"+dept.getDeptName()+"\r\n打印人:"+user.getUsername() + "\r\n打印时间:" + GTime.getLogTime();
        BufferedImage image=qrCode.getBufferedImage(content);
        try {
            //以流的方式将图片上传到fastdfs上:
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            ImageIO.write(image, "png", outputStream);
            InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());       // 调用FastDFS中的接口将数据流保存到服务器返回图片地址
            StorePath storePath = storageClient.uploadImageAndCrtThumbImage(inputStream,inputStream.available(),"png",null);
            link = "http://" + fileServerProperties.getFdfs().getWebUrl() + "/" + storePath.getFullPath();
        }catch (IOException ex){
            ex.printStackTrace();
        }
        Map<String,Object> model = new HashMap<>();
        model.put("imgStr",link);
        return Result.succeed(model);
    }

4. FastDFS配置文件 要对缩略图的大小进行设置

fdfs:
  soTimeout: 1500
  connectTimeout: 1000
  tracker-list: ip:端口
  thumb-image:
    width: 100
    height: 100

  

原文地址:https://www.cnblogs.com/petrolero/p/12539763.html

时间: 2024-10-07 00:31:02

Java生成二维码并用FastDFS上传到文件服务器返回图片地址的相关文章

Java生成二维码实现扫描次数统计并转发到某个地址

需求:近几天某个项目需要用户录入个自己的网址,然后系统需要根据用户的的网址生成二维码,然后用户可以拿着它给别人扫描,访问到他录入的网址,在这个过程中.我需要知道用户的二维码被扫描的次数,也就是后面根据其可以做一些扫描排名之类的. 思路: 先生成二维码,csdn已经有前辈写了,那么我就直接拿过来用了. 将用户的id,和用户录入的网址处理之后作为http get参数封装到二维码中,然后用户扫描会自动跳转到我们系统的某个接口 在接口中根据用户id将用户查询出来,扫描次数加1后重定向到用户录入页面 代码

java 生成 二维码 和jquery 生成二维码

生成二维码 Java 生成二维码: 思路为拿到jar 包知道里面的方法使用 Step one : 在https://github.com/zxing中下载(点击网页中名为 zxing 的a标签,跳转到源码页面,点击release 查看所有发布的源码,下载zip压缩文件 Step two:  解压文件后打开文件夹,将core包和javase包 中的com包拷贝到一java项目src目录下.右键导出 jar file  得到一个二维码开发的jar包 Step three: 进行二维码制作 impor

java生成二维码(带logo)

之前写过一篇不带logo的二维码实现方式,采用QRCode和ZXing两种方式 http://blog.csdn.net/xiaokui_wingfly/article/details/39476185 这里介绍一下ZXing的带logo实现方式,具体实现参考一下代码,测试使用ZXingCodeUtil的main方法. 视频链接地址稍后更新,视频地址中包含图片二维码流输出方式 LogoConfig logo背景配置类 ZXingConfig 二维码配置信息 BufferedImageLumina

java生成二维码的几种方式

1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.NET/projects/barcode

java生成二维码使用QRCode和ZXing两种方式

QRCode是日本人开发的ZXing是google开发的 QRCode开发需要包http://download.csdn.net/detail/xiaokui_wingfly/7957815 ZXing开发需要包http://download.csdn.net/detail/u010457960/5301392 QRCode方式: package cn.utils; import java.awt.Color; import java.awt.Graphics2D; import java.aw

为自己的网站用 java 生成二维码 的例子

在物联网的时代,二维码是个很重要的东西了,现在无论什么东西都要搞个二维码标志,唯恐落伍,就差人没有用二维码识别了.也许有一天生分证或者户口本都会用二维码识别了.今天心血来潮,看见别人都为自己的博客添加了二维码,我也想搞一个测试一下. 主要用来实现两点:1. 生成任意文字的二维码.2. 在二维码的中间加入图像. 首先得下载 zxing.jar 包, 我这里用的是 3.0 版本的core包 下载地址: 现在已经迁移到了github: https://github.com/zxing/zxing/wi

java生成二维码扫码网页自动登录功能

找了很多资料,七七八八都试了一遍,最终写出来了这个功能. 菜鸟一枚,此文只为做笔记. 简单的一个生成二维码,通过网页确认登录,实现二维码页面跳转到主页面. 有三个servlet: CodeServlet.java 干2件事 a:生成随机的uuid,是一个唯一标识,该标识贯穿整个流程 b:生成二维码图片,二维码信息:http://xx.xx.xx.xx:8080/xxxx/login.jsp?uuid= xxxx LongConnectionCheckServlet.java 进行长连接轮询操作,

java生成二维码

具体代码如下,作为一个新手,期待与你一起交流: 1 import java.awt.Color; 2 import java.awt.Graphics2D; 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 6 import javax.imageio.ImageIO; 7 8 import com.swetake.util.Qrcode; 9 public class QRCodeEncoderHandler { 1

java生成二维码的三个工具

1.  使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj  有朋友问我要这个图片生成的代码,我就在网上搜索然后整理了一个类,首先要把SwetakeQRCode的jar包qrcode.jar放在工程的编译路径