Java实现海报+二维码+二维码中间log+文字合并高清图片
生活随笔
收集整理的這篇文章主要介紹了
Java实现海报+二维码+二维码中间log+文字合并高清图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
公司最近要實現一個功能,就是標題,但是還要高清的圖片打印出來,高清的圖片必須設計師那邊給的圖片高清,最后實現的時候高清跟設計師給的圖片是一樣的 不過我們是水印加在海報上面的
附上代碼
1.導入jar包
工具類 加 一個簡單的實現類
package com.jiankangyun.business.util;import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import org.apache.commons.io.IOUtils; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader;import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*;public class ImageUtil {/*** @author Uncle* @Description TODO 在一張背景圖上添加二維碼* @Date 2020-09-28 23:59* @param content 二維碼內容* @param written 文字內容* @param fielPath 保存文件 例: d:/1.png* @param hbPath 海報圖片地址 例: d:/1.png* @param logoPath 二維碼logo* @return*/public static void drawString(String content, String written, String fielPath, String hbPath, String logoPath) throws Exception {BufferedImage image = addWater(content, hbPath, logoPath);Graphics2D gd = image.createGraphics();// 3、設置對線段的鋸齒狀邊緣處理gd.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);// 5、設置水印文字顏色gd.setColor(Color.black);Font font=new Font("宋體",Font.PLAIN,64);//6.設置文本Fontgd.setFont(font);FontMetrics fm = gd.getFontMetrics(font);//獲取文本長度int textWidth = fm.stringWidth(written);//計算文本居中位置int widthX = (2479 - textWidth) / 2;// 8、第一參數->設置的內容,后面兩個參數->文字在圖片上的坐標位置(x,y)gd.drawString(written,widthX,370);gd.dispose();ByteArrayOutputStream bs = new ByteArrayOutputStream();ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);ImageIO.write(image, "jpg", imOut);InputStream inputStream = new ByteArrayInputStream(bs.toByteArray());OutputStream outStream = new FileOutputStream(fielPath);IOUtils.copy(inputStream, outStream);inputStream.close();outStream.close();}/**** 在一張背景圖上添加二維碼*/public static BufferedImage addWater(String content, String hbPath, String logoPath) throws Exception {// 讀取原圖片信息//得到文件File file = new File(hbPath);//文件轉化為圖片Image srcImg = ImageIO.read(file);//獲取圖片的寬int srcImgWidth = srcImg.getWidth(null);//獲取圖片的高int srcImgHeight = srcImg.getHeight(null);// 加水印BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);//使用工具類生成二維碼Image image = createQrCode(content, 520, 520, logoPath);//將小圖片繪到大圖片上,500,300 .表示你的小圖片在大圖片上的位置。g.drawImage(image, 1530, 1072, null);//設置顏色。g.setColor(Color.WHITE);g.dispose();return bufImg;}private static BufferedImage createQrCode(String content, int width, int height, String logoPath) throws IOException {QrConfig config = new QrConfig(width, height);if(logoPath!=null){Image image = ImageIO.read(new FileInputStream(new File(logoPath)));config.setImg(image);}config.setErrorCorrection(ErrorCorrectionLevel.H);return QrCodeUtil.generate(content,config);}public static InputStream resourceLoader(String fileFullPath) throws IOException {ResourceLoader resourceLoader = new DefaultResourceLoader();return resourceLoader.getResource(fileFullPath).getInputStream();}//測試類public static void main(String[] args) throws Exception {ImageUtil.drawString("www.baidu.com","水站地址","d:\\1.png","D:\\hb.jpg","D:\\logo.jpg");}}直接更改調用方法即可 不過有文字展示的要更改文字展示位置xy坐標位置 要設計給就ok了
上面的方法合并不是高清的圖片,原因就是我們使用的圖片輸出問題,換成下面這種方法即可
這個是要更改的地方
畫圈圈的地方替換成下面這段內容
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg");if (iter.hasNext()) {ImageWriter writer = iter.next();ImageWriteParam param = writer.getDefaultWriteParam();param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);param.setCompressionQuality(1.0f); //最高質量File filee=new File(fielPath);FileImageOutputStream out = new FileImageOutputStream(filee);writer.setOutput(out);// writer.write(bi);writer.write(null, new IIOImage((BufferedImage) image, null, null), param);out.close();writer.dispose();}總結
以上是生活随笔為你收集整理的Java实现海报+二维码+二维码中间log+文字合并高清图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JIRA-6.3.6安装与破解
- 下一篇: 整理最全的Java笔试题库之问答题篇-国