1. 程式人生 > >java對二維碼個性修改

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