Java生成二维码

**第一步**

导入依赖包

\[AppleScript\]_纯文本查看__复制代码_

[?](http://bbs.itheima.com/#)


`<``font` `style``=``"color:rgb(77, 77, 77)"``>``<``font` `face``=``"&quot"``>``<``font` `style``=``"font-size:16px"``>``<``dependency``>`

`<``groupId``>``com.google.zxing``<``/``groupId``>`

`<``artifactId``>``core``<``/``artifactId``>`

`<``version``>``3.1``.``0``<``/``version``>`

`<``/``dependency``>`

`<``dependency``>`

`<``groupId``>``com.google.zxing``<``/``groupId``>`

`<``artifactId``>``javase``<``/``artifactId``>`

`<``version``>``3.1``.``0``<``/``version``>`

`<``/``dependency``>``<``/``font``>``<``/``font``>``<``/``font``>`

**第二步,创建class文件(QRCodeUtils )**

\[AppleScript\]_纯文本查看__复制代码_

[?](http://bbs.itheima.com/#)


`import java.awt.BasicStroke;`

`import java.awt.Graphics;`

`import java.awt.Graphics``2``D;`

`import java.awt.Image;`

`import java.awt.Shape;`

`import java.awt.geom.RoundRectangle``2``D;`

`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.client.j``2``se.BufferedImageLuminanceSource;`

`import com.google.zxing.common.BitMatrix;`

`import com.google.zxing.common.HybridBinarizer;`

`import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;`

`public` `class` `QRCodeUtils` `{`

`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``)` `?` `0``xFF``000000`

`:` `0``xFFFFFFFF``)``;`

`}`

`}`

`if` `(``imgPath` `=``=` `null ||` `""``.``equals``(``imgPath``)``)` `{`

`return` `image``;`

`}`

`/``/` `插入图片   `

`QRCodeUtils.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   `

`Graphics``2``D 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` `RoundRectangle``2``D.Float``(``x``,` `y``,` `width``,` `width``,` `6``,` `6``)``;`

`graph.setStroke``(``new` `BasicStroke``(``3``f``)``)``;`

`graph.draw``(``shape``)``;`

`graph.dispose``(``)``;`

`}`

`/``*``*`

`*` `生成二维码``(``内嵌LOGO``)` 

`*`

`*` `@param` `content`

`*`            `内容 `

`*` `@param imgPath`

`*`            `LOGO地址 `

`*` `@param destPath`

`*`            `存放目录 `

`*` `@param needCompress`

`*`            `是否压缩LOGO `

`*` `@throws Exception`

`*``/`

`public static String encode``(``String` `content``,` `String imgPath``,` `String destPath``,`

`boolean` `needCompress``)` `throws Exception` `{`

`BufferedImage` `image` `=` `QRCodeUtils.createImage``(``content``,` `imgPath``,`

`needCompress``)``;`

`mkdirs``(``destPath``)``;`

`String` `file` `=` `new` `Random``(``)``.nextInt``(``99999999``)``+``".jpg"``;`

`ImageIO.``write``(``image``,` `FORMAT_NAME``,` `new` `File``(``destPath``+``"/"``+``file``)``)``;`

`return` `file``;`

`}`

`/``*``*`

`*` `当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.``(``mkdir如果父目录不存在则会抛出异常``)` 

`*` `@``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` `{`

`QRCodeUtils.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` `{`

`QRCodeUtils.encode``(``content``,` `null``,` `destPath``,` `needCompress``)``;`

`}`

`/``*``*`

`*` `生成二维码 `

`*`

`*` `@param` `content`

`*`            `内容 `

`*` `@param destPath`

`*`            `存储地址 `

`*` `@throws Exception`

`*``/`

`public static void encode``(``String` `content``,` `String destPath``)` `throws Exception` `{`

`QRCodeUtils.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` `=` `QRCodeUtils.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` `{`

`QRCodeUtils.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` `QRCodeUtils.decode``(``new` `File``(``path``)``)``;`

`}`

`}`

  
**第三步,Controller层**  

\[AppleScript\]_纯文本查看__复制代码_

[?](http://bbs.itheima.com/#)


`@AuthIgnore`

`@GetMapping``(``"QRCode"``)`

`public R QRCode``(``)` `{`

`String` `text` `=` `"I love you"``;` `/``/``生成二维码的内容`

`String logoPath` `=` `"D:\\img\\1575892281966maxresdefault.jpg"``;` `/``/``二维码的logo图片`

`String destPath` `=` `"D:\\img"``;` `/``/``生成的二维码存储本地的地址`

`try` `{`

`System.out.println``(``QRCodeUtils.encode``(``text``,` `logoPath``,` `destPath``,` `true``)``)``;`

`}` `catch` `(``Exception e``)` `{`

`/``/` `TODO Auto``-``generated catch block`

`e.printStackTrace``(``)``;`

`}`

`return` `R.ok``(``)``.put``(``"msg"``,` `"成功"``)``;`

`}`

  
**第四步 使用Postman访问接口**  
![](https://img-blog.csdnimg.cn/20200304125538189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTczNjkyNw==,size_16,color_FFFFFF,t_70)  
生成成功  
![](https://img-blog.csdnimg.cn/20200304125657411.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTczNjkyNw==,size_16,color_FFFFFF,t_70)  
![](https://img-blog.csdnimg.cn/20200304125735110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cH6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTczNjkyNw==,size_16,color_FFFFFF,t_70)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值