java對二維碼個性修改
最近有一個業務需求,生成微信小程式二維碼,中間的logo變成使用者上傳的logo,下方新增上一行文字
網上有一些圖片覆蓋或者新增文字的程式碼,但是沒有兩種情況都進行的程式碼,對找到的程式碼進行了一些拼湊踩了一些坑最終完成了需求,生成二維碼,中間logo改變為使用者上傳的圖片,二維碼下方新增上一行文字。
/**
* 將酒店二維碼,酒店logo,酒店名合併到一張圖片中。
* @param hotelName 酒店名
* @param codeImg 酒店二維碼
* @param logoPath logo路徑
* @param finallyPath 儲存路徑
* @param width 圖片寬度
* @param height 圖片高度
*/
public static boolean addWordAndLogo(String hotelName, InputStream codeImg, String logoPath, String finallyPath, int width, int height){
try {
//二維碼的寬高
int codeImageWidth = 430;
int codeImageHeight = 430;
//logo的寬高
int logoImageWidth = 140;
int logoImageHeight = 140;
// 水平居中 x軸需要偏移的量
int xPath = (width-codeImageWidth)/2;
Image image = ImageIO.read(codeImg);
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics ();
//構建一個傳入寬高的白色背景
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, width, height);
//將二維碼新增到背景中
g2.drawImage(image, xPath, 0, codeImageWidth, codeImageHeight, null);
//新增的字 字型為黑體20號
Font font = new Font("黑體", Font.BOLD, 20);
g2.setFont(font);
g2.setPaint(Color.BLACK);
FontRenderContext context = g2.getFontRenderContext();
//計算文字的位置 x軸水平居中(圖片寬度-字型長度)/2
Rectangle2D bounds = font.getStringBounds(hotelName, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight());
double ascent = -bounds.getY();
double baseY = y + ascent;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//設定字的位置
g2.drawString(hotelName, (int) x, (int) baseY);
//如果未上傳logo,則不進行覆蓋logo。
if(StringUtils.isNotEmpty(logoPath)){
InputStream logoImg = new FileInputStream(new File(logoPath));
BufferedImage logo = ImageIO.read(logoImg);
// 由於圖片居中,所以x軸需要進行一定的偏移
g2.drawImage(logo.getScaledInstance(logo.getWidth(), logo.getHeight(), Image.SCALE_SMOOTH), (codeImageWidth-logoImageWidth)/2+xPath, (codeImageHeight-logoImageHeight)/2, null);
}
File file = new File(finallyPath);
ImageIO.write(bi, "PNG", file);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
微信生成的二維碼預設為430寬高的,經過測量發現中間的logo大小為140比較合適,所以需要先將使用者上傳的圖片裝換為140大小的圖片。
之前做是先將圖片與logo進行合併覆蓋,然後再將文字新增上去,最終發現不行,於是換了一下順序,先將文字寫在二維碼下方,再將logo覆蓋到二維碼上。
再放上將圖片改完固定大小的程式碼
public static boolean changeImgSize(InputStream inputStream,String imgPath,String imgName,int width,int height){
try {
//位元組流轉圖片物件
Image bi = ImageIO.read(inputStream);
//構建圖片流
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//繪製改變尺寸後的圖
tag.getGraphics().drawImage(bi, 0, 0,width, height, null);
//輸出流
BufferedOutputStream out = null;
out = new BufferedOutputStream(new FileOutputStream(imgPath+"/"+imgName));
ImageIO.write(tag, "PNG",out);
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
原來的二維碼:
最終的效果如下圖:
相關推薦
java對二維碼個性修改
最近有一個業務需求,生成微信小程式二維碼,中間的logo變成使用者上傳的logo,下方新增上一行文字 網上有一些圖片覆蓋或者新增文字的程式碼,但是沒有兩種情況都進行的程式碼,對找到的程式碼進行了一些拼湊踩了一些坑最終完成了需求,生成二維碼,中間lo
java 生成二維碼
qrc exti his stream red rgs develop 是個 public 一步一步用 java 設計生成二維碼 轉至 http://blog.sina.com.cn/s/blog_5a6efa330102v1lb.html 在物聯網的時代,二維碼是個很
java生成二維碼的幾種方式
qrcode ext -s har bold 轉換成 沒有 += correct 1: 使用SwetakeQRCode在Java項目中生成二維碼 http://swetake.com/qr/ 下載地址 或著http://sourceforge.jp/projects
基於java生成二維碼
alt 專家 美國 con 信息 ces 線性 exc rac
一次CTF後對二維碼的認識
inf body 讀取 轉化 ctf比賽 二維碼 png 一段 定位 前一段時間參加一個CTF比賽的時候其中有一個題目就是一張二維碼圖片,然後獲取其中的信息來解題,那個二維碼的特別之處在於,它把3個位置探測區域用幾張美女圖片代替了,然後在做題的時候順便簡單的了解了一下二
Java生成二維碼
二維 one cti eve rgb ont pub har ger 前言: 這周有個項目需要生成二維碼,研究了一下使用Google的zxing生成二維碼,發現效果還可以,在這裏記錄下。如果需要更加定制化的二維碼,也可接通第三方API服務生成二維碼。 二維碼的生成 :
Java實現二維碼新增文字內容
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.
java生成二維碼,在中間附上logo,下方附上文字,img標籤嵌入
package com.audaque.web.action; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import
java生成二維碼/java解析二維碼
text level hang err 定義 image binary port style 二維碼的優缺點 優點:1. 高密度編碼,信息容量大;2.編碼範圍廣;3.容錯能力強;4.譯碼可靠性高;5.可引入加密措施;6.成本低,易制作,持久耐用。 缺點:
Java生成二維碼之 ZXing
前幾天突然有個新的想法,給某個程式設計師送禮物的想法,程式設計師的浪漫(誤)。所以特地去學了一下二維碼生成相關知識,還買了個域名。生成二維碼的方式有好幾種,這次用的是zxing來生成的。 很簡單,接下來就放一下程式碼。有關二維碼相關原理看了一下這位大佬的文章:https://coolshell.cn
Java實現二維碼製作
二維碼概述 二維碼又稱QR Code,QR全稱Quick Response,是用某種特定的幾何圖形按一定規律在平面(二維方向上
java生成二維碼(java工具類可以直接呼叫)
生成二維碼的方法大體分為兩種:1. 展示時候引用Qrcode.js;2.後臺生成二維碼儲存成圖片,前端顯示 1.QRCode.js 是一個用於生成二維碼的 JavaScript 庫。主要是通過獲取 DOM 的標籤,再通過 HTML5 Canvas 繪製而成 <!DO
Java識別二維碼【工具類】
工具類已經實現Base64二維碼圖片識別和路徑圖片識別 所需maven依賴 <!--二維碼生成和解析相關的jar包【生成】【解析】--> <dependency> <groupId>com.google.zxing&
java 生成二維碼圖片
import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.Writ
Java生成二維碼小程式
(原始碼地址:連結: https://pan.baidu.com/s/16SGJ5h9KLjsbwuRgqVl_TA 提取碼: 96mr ,如果失效請在下方留言,我重新分享。) 用Java寫的生成二維碼得桌面小程式: 生成的二維碼如下:
JAVA生成二維碼,圖片合成,圖片新增文字
首先引入zxing用於生成二維碼 <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>c
java生成二維碼以及讀取案例
今天有時間把二維碼這塊看了一下,方法有幾種,我只是簡單的看了一下 google 的 zxing! 很簡單的一個,比較適合剛剛學習java的小夥伴哦!也比較適合以前沒有接觸過和感興趣的的小夥伴,o(* ̄︶ ̄*)o 生成二維碼 ,將二維碼返回頁面展示 ,讀取二維碼 !
Java掃描二維碼進行會議簽到思路
1:簽到頁面都是同一個JSP頁面 2:根據不同的會議ID進行拼接URL跳轉頁面進行簽到 JSP頁面程式碼如下 <%@ page language="java" pageEncoding="UTF-8"%> <% String m_id=request.g
java解析二維碼
package main; import java.awt.image.BufferedImage; import java.io.File; import java.util.HashMap; import java.util.Map; import javax.imageio.Image
微信小程式java生成二維碼-帶引數
/** * 生成小程式二維碼 -並儲存到本地-返回二維碼地址 * * @param request * @param access_token * @param path * @param width * @param scene * @return */public st