Java之—hutool工具类二维码生成跟背景图合并输出
生活随笔
收集整理的這篇文章主要介紹了
Java之—hutool工具类二维码生成跟背景图合并输出
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要是集合hutool工具的使用,簡單方便。
獲取二維碼
/*** 根據內容 獲取二維碼* @param content 內容* @return*/@Overridepublic BufferedImage getQrCode(String content,int width, int height) {//二維碼設置QrConfig config = QrCodeUtils.getConfig(width, height);//生成指定url對應的二維碼到文件,寬和高都是300像素BufferedImage bufferedImage = QrCodeUtil.generate(content,config);// 插入圖片return bufferedImage;}?我為了公用都會單獨拿出來定義一個設置方法
/*** 二維碼基礎設置* @param width 寬 300 * @param height 長 300* @return*/public static QrConfig getConfig(int width, int height){//300,300QrConfig config = new QrConfig(width, height);// 設置邊距,既二維碼和背景之間的邊距config.setMargin(2);// 設置前景色,既二維碼顏色(青色)config.setForeColor(Color.BLACK);// 設置背景色(灰色)config.setBackColor(Color.WHITE);/**高糾錯級別 :像素塊小,允許遮擋一定范圍,但是像素塊更密集*/config.setErrorCorrection(ErrorCorrectionLevel.H);return config;}一,該方式為文件格式,主要用于自測和獲取本地文件(不適用pass平臺和服務器)
/*** 兩個圖片合并(加文字) 文件格式* @param sourceUrl 底部背景圖* @param config 二維碼基礎配置* @param qrContent 二維碼內容* @param qrX 二維碼橫坐標* @param qrY 二維碼縱坐標* @param textContent 文字(一般為標題)* @param textFontSize 文字大小* @param textFontX 文字的橫坐標* @param textFontY 文字的縱坐標* @return*/@Overridepublic ByteArrayInputStream getQrCodeUrl(String sourceUrl,QrConfig config,String qrContent,int qrX,int qrY,String textContent,int textFontSize,int textFontX,int textFontY) {//二維碼設置 // QrConfig config = QrCodeUtils.getConfig();//1,生成二維碼BufferedImage qrImage = QrCodeUtil.generate(qrContent, config);// 2,將圖片合成在一起Image image = ImgUtil.pressImage(//底圖ImgUtil.read(sourceUrl),//二維碼圖(水印圖)qrImage, // ImgUtil.read(codeFile),qrX,//y坐標修正值。 默認在中間,偏移量相對于中間偏移qrY,//透明度1.0f);//3,加文字Image pressTextImage = ImgUtil.pressText(image,//titletextContent,//顏色Color.WHITE,//字體 42new Font("黑體", Font.BOLD, textFontSize),//x坐標修正值。 默認在中間,偏移量相對于中間偏移textFontX,//y坐標修正值。 默認在中間,偏移量相對于中間偏移textFontY,//透明度:alpha 必須是范圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字1.0f);//轉為流ByteArrayInputStream inputStream = ImgUtil.toStream(pressTextImage, QrCodeUtils.FORMAT_NAME);return inputStream;}?二,輸入輸出流格式(重點,常用)
1,將網圖或者本地的圖片轉為輸入流。
2,然后再創建臨時的輸出流文件,將生成的圖片放到流中,因為在pass平臺,或者服務器上讀不到file的文件的,要轉成流格式。
3,輸出生成的圖片流,用流的方式進行上傳阿里云華為云都行。
/*** 網絡底圖轉為流,返回流格式,兩個圖片合并(加文字) * @param sourceUrl 底部背景圖* @param config 二維碼基礎配置* @param qrContent 二維碼內容* @param qrX 二維碼橫坐標* @param qrY 二維碼縱坐標* @param textContent 文字(一般為標題)* @param textFontSize 文字大小* @param textFontX 文字的橫坐標* @param textFontY 文字的縱坐標* @return*/@Overridepublic ByteArrayInputStream getQrCodeUrl(String sourceUrl,QrConfig config,String qrContent,int qrX,int qrY,String textContent,int textFontSize,int textFontX,int textFontY) {//二維碼設置 // QrConfig config = QrCodeUtils.getConfig();//1,生成二維碼BufferedImage qrImage = QrCodeUtil.generate(qrContent, config);//將網絡圖轉換成流BufferedImage image = QrCodeUtils.stringTobufferedImage(sourceUrl);InputStream inputStream = ImgUtil.toStream(image, QrCodeEnum.CodeEnum.PNG.getDesc());//定義臨時輸出流ByteArrayOutputStream outputStream = new ByteArrayOutputStream();// 2,將圖片合成在一起ImgUtil.pressImage(inputStream,outputStream,qrImage,qrX,//y坐標修正值。 默認在中間,偏移量相對于中間偏移qrY,//透明度QrCodeUtils.ALPHA);//3,加文字ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray());ByteArrayOutputStream resultOut = new ByteArrayOutputStream();ImgUtil.pressText(input,resultOut,//titletextContent,//顏色Color.WHITE,//字體 42new Font(QrCodeEnum.CodeEnum.FONT_NAME.name(), Font.BOLD, textFontSize),//x坐標修正值。 默認在中間,偏移量相對于中間偏移textFontX,//y坐標修正值。 默認在中間,偏移量相對于中間偏移textFontY,//透明度:alpha 必須是范圍 [0.0, 1.0] 之內(包含邊界值)的一個浮點數字QrCodeUtils.ALPHA);ByteArrayInputStream result = new ByteArrayInputStream(resultOut.toByteArray());return result;}?
總結
以上是生活随笔為你收集整理的Java之—hutool工具类二维码生成跟背景图合并输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]Installing Memcac
- 下一篇: 《深入理解Java虚拟机》读书笔记