日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java 實(shí)現(xiàn)圖片合成,并添加文字

瀏覽:35日期:2022-08-19 14:16:29

最近公司一個(gè)需要,需要把商品的優(yōu)惠卷分享鏈接,生成一個(gè)二維碼然后和商品主圖合成一張,并且在新合成的主圖增加商品信息的描述,好了直接看合成后圖片的樣式

java 實(shí)現(xiàn)圖片合成,并添加文字

下面我就直接貼代碼,首先是Contorller層

/** * 淘寶二維碼,商品主圖,合成一張圖 * * @param pictUrl * @param request * @param response * @throws IOException */ @RequestMapping('/getTaoBaoqQRCode') public void getTaoBaoqQRCode(TaoBaoQRCode taoBaoQRCode, HttpServletRequest request, HttpServletResponse response) throws IOException { ServletOutputStream os = null; InputStream buffin = null; try { // 二維碼 String couponUlr = 'https:' + taoBaoQRCode.getCouponShareUrl();// 高額卷分享鏈接 byte[] imgByte = QrCodeUtil.createQrCode2Bytes(250, 250, couponUlr); buffin = new ByteArrayInputStream(imgByte); BufferedImage couponImage = ImageIO.read(buffin); // 商品主圖 String imageUrl = 'https:' + taoBaoQRCode.getPictUrl(); URL url = new URL(imageUrl); BufferedImage picImage = ImageIO.read(url); BufferedImage modifyImage = imageHandleUtil.mergeImage(picImage, couponImage, taoBaoQRCode.getTitle(), taoBaoQRCode.getReservePrice(), taoBaoQRCode.getZkFinalPrice()); response.setContentType('image/jpg'); os = response.getOutputStream(); ImageIO.write(modifyImage, 'jpg', os); os.flush(); } catch (Exception e) { LOGGER.error('getTaoBaoqQRCode error'); e.printStackTrace(); } finally { buffin.close(); os.close(); } }

二維碼QrCodeUtil 生成幫助類

public class QrCodeUtil { private static final int DAFAULT_WIDTH = 360; private static final int DAFAULT_HEIGHT = 360; private static final Logger LOGGER = LoggerFactory.getLogger(QrCodeUtil.class); public static String createQrCode(String text) { return createQrCode(DAFAULT_WIDTH, DAFAULT_HEIGHT, text); } public static String createQrCode(int widht, int height, String text) { HashMap<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); try { byte[] bytes = createQrCode2Bytes(widht, height, text); String fileName = UUID.randomUUID().toString().replaceAll('-', '') + '.png'; return UpYunClient.upload(fileName, bytes); } catch (Exception e) { LOGGER.error('create qrcode error', e); } return null; } public static byte[] createQrCode2Bytes(String text) { return createQrCode2Bytes(DAFAULT_WIDTH, DAFAULT_HEIGHT, text); } public static byte[] createQrCode2Bytes(int widht, int height, String text) { HashMap<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, 'UTF-8'); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, widht, height, hints); ByteArrayOutputStream out = new ByteArrayOutputStream(); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); ImageIO.write(image, 'png', out); return out.toByteArray(); } catch (Exception e) { LOGGER.error('create qrcode error', e); } return null; } /** * 生成條形碼并已字節(jié)碼形式返回,生成的圖片格式為png * * @param contents * @param width * @param height * @return */ public static byte[] createBarcode2Byte(String contents, int width, int height) { int codeWidth = 3 + // start guard(7 * 6) + // left bars5 + // middle guard(7 * 6) + // right bars3; // end guard codeWidth = Math.max(codeWidth, width); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.CODE_128, codeWidth, height, null); BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(image, 'png', out); return out.toByteArray(); } catch (Exception e) { e.printStackTrace(); } return null; }}

二維碼生成我這里用的是谷歌的看下面maven pom.xml 文件

<!-- 條形碼、二維碼生成 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>2.2</version> </dependency>

合成圖片方法如何

package com.qft.campuscircle.common.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.net.URL;import javax.imageio.ImageIO;import org.springframework.stereotype.Component;@Componentpublic class ImageHandleUtil { private Font font = null; private Graphics2D g = null; /** * 導(dǎo)入本地圖片到緩沖區(qū) * * @param imgName * @return */ public BufferedImage loadImageLocal(String imgName) { try { return ImageIO.read(new File(imgName)); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 導(dǎo)入網(wǎng)絡(luò)圖片到緩沖區(qū) * * @param imgName * @return */ public BufferedImage loadImageUrl(String imgName) { try { URL url = new URL(imgName); return ImageIO.read(url); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 生成新圖片到本地 * * @param newImage * @param img */ public void writeImageLocal(String newImage, BufferedImage img) { if (newImage != null && img != null) { try {// 目錄不存在則創(chuàng)建String dirUrl = newImage.substring(0, newImage.lastIndexOf(File.separator));File dir = new File(dirUrl);if (!dir.exists()) { dir.mkdirs();}File outputfile = new File(newImage);ImageIO.write(img, 'png', outputfile); } catch (IOException e) {e.printStackTrace(); } } } /** * 設(shè)定文字的字體等 * * @param fontStyle * @param fontSize */ public void setFont(String name, int style, int fontSize) { this.font = new Font(name, style, fontSize); } /** * 修改圖片,返回修改后的圖片緩沖區(qū)(只輸出一行文本),圖片居中顯示 * * @param img * @param content * @param y * @param color * @return */ public BufferedImage modifyImage(BufferedImage img, Object content, int y, Color color) { try { g = img.createGraphics(); g.setBackground(Color.WHITE); g.setColor(color);// 設(shè)置字體顏色 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗鋸齒 if (this.font != null)g.setFont(this.font); int width = img.getWidth();// 圖片寬度 if (content != null) {String str = content.toString();int strWidth = g.getFontMetrics().stringWidth(str);// 字體寬度g.drawString(str, (width - strWidth) / 2, y); } g.dispose(); } catch (Exception e) { e.printStackTrace(); } return img; } public BufferedImage modifyImage(BufferedImage img, Object content, int x, int y, Color color) { try { g = img.createGraphics(); g.setBackground(Color.WHITE); g.setColor(color);// 設(shè)置字體顏色 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗鋸齒 if (this.font != null)g.setFont(this.font); if (content != null) {String str = content.toString();g.drawString(str, x, y); } g.dispose(); } catch (Exception e) { e.printStackTrace(); } return img; } /** * 將一張圖片畫在另一張圖片上 * * @param addImage 被添加的圖片 * @param sourceImg 源圖 * @param x * @param y * @param width * @param height * @return */ public BufferedImage modifyImagetogeter(BufferedImage addImage, BufferedImage sourceImg, int x, int y) { int width = addImage.getWidth(); int height = addImage.getHeight(); try { g = sourceImg.createGraphics(); g.drawImage(addImage, x, y, width, height, null); g.dispose(); } catch (Exception e) { e.printStackTrace(); } return sourceImg; } /** * * @param img1 * @param img2 * @param title 標(biāo)題 * @param reservePrice 現(xiàn)價(jià) * @param zkFinalPrice 折扣價(jià) * @return BufferedImage * @throws IOException */ public BufferedImage mergeImage(BufferedImage img1, BufferedImage img2,String title,String reservePrice,String zkFinalPrice) throws IOException { Font font = new Font('微軟雅黑', Font.BOLD, 20); int w1 = img1.getWidth(); int h1 = img1.getHeight(); int w2 = img2.getWidth(); int h2 = img2.getHeight(); BufferedImage newImage = new BufferedImage(w1, h2 + h1 + h2/2, BufferedImage.TYPE_INT_RGB);// 新的圖 Graphics2D graphics = (Graphics2D) newImage.getGraphics(); graphics.setBackground(Color.WHITE); graphics.fillRect(0, 0, newImage.getWidth(), newImage.getHeight()); graphics.drawImage(img1, 0, 0, null); graphics.drawImage(img2, (newImage.getWidth()) / 2 - (w2 / 2), newImage.getHeight() - h2,null); graphics.setFont(font); graphics.setColor(Color.BLACK); int width = graphics.getFontMetrics(font).stringWidth(title); int startY = h1 + 30; if (width > newImage.getWidth()) { char[] array = title.toCharArray(); StringBuilder sb = new StringBuilder(array[0]); for (char c : array) {sb.append(c);int newWidth = graphics.getFontMetrics(font).stringWidth(sb.toString());if ((newWidth + 19) >= newImage.getWidth()) {// 準(zhǔn)備換行 graphics.drawString(sb.toString(), 0, startY); startY += 30; sb.delete(0, sb.length());} } graphics.drawString(sb.toString(), 0, startY); } else { graphics.drawString(title, 0, startY); } graphics.drawString('現(xiàn)價(jià)¥'+reservePrice, 0, startY + 30); startY += 30; graphics.drawString('卷后價(jià)¥'+zkFinalPrice, 0, startY + 30); return newImage; }}

兩個(gè)幫助類里面有很多方法沒(méi)用到,大家只要看幾個(gè)關(guān)鍵的方法就可以了,TaoBaoQRCode 對(duì)象里面的屬性我就沒(méi)列出來(lái)了,大家自己根據(jù)自己的需求而定

以上就是java 實(shí)現(xiàn)圖片合成,并添加文字的詳細(xì)內(nèi)容,更多關(guān)于Java 圖片合成的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久国产电影| 久久精品国产99久久| 在线国产一区| 欧美特黄一级大片| 一区二区三区四区在线看| 136国产福利精品导航网址| 久久精品青草| 午夜欧美在线| 石原莉奈一区二区三区在线观看| 日韩一区精品字幕| 日本成人一区二区| 国产精品一区二区美女视频免费看 | 国产精品任我爽爆在线播放| 日韩美女精品| 国产精品中文字幕制服诱惑| 久久成人高清| 日韩精品dvd| av一区二区高清| 人人精品人人爱| 欧美天堂一区| 麻豆视频在线观看免费网站黄| 久久精品亚洲人成影院| 亚洲在线电影| 欧美日韩一视频区二区| 国产一区2区| 欧美日韩激情| 亚洲日本在线观看视频| 久久爱www.| www.com.cn成人| 夜夜嗨一区二区| 国产精选久久| 色爱av综合网| 亚洲综合中文| 精品国内亚洲2022精品成人| 久久人人99| 亚洲ww精品| 久久久久久色| 黑森林国产精品av| 亚洲视频播放| 国产欧美高清| 国产精品99免费看| 国产欧美日韩综合一区在线播放| 91看片一区| 亚洲伊人影院| 精品国产亚洲一区二区三区大结局 | 蜜桃视频一区二区三区| 日韩欧美在线精品| 国产成人精品亚洲线观看| 精品一区免费| 国产乱人伦丫前精品视频| 午夜精品久久久久久久久久蜜桃| 麻豆久久精品| 国产一区二区三区久久 | 午夜久久福利| 欧美日韩激情| 久久久国产亚洲精品| 激情黄产视频在线免费观看| 97精品一区| 久久国产中文字幕| 亚洲欧美日韩国产一区二区| 在线成人直播| 亚洲综合小说| 国产精品久久久久久久久免费高清| 老牛国内精品亚洲成av人片| 久久av一区二区三区| 日韩成人精品一区二区三区| 日本va欧美va精品发布| 三级在线看中文字幕完整版| 99精品小视频| 欧美一区二区三区久久| 高清精品久久| 亚洲大片在线| 免费亚洲一区| 亚洲色图网站| 欧美日韩一区二区综合| 精品在线网站观看| 日韩美女国产精品| 欧美午夜不卡| 日韩中文首页| 麻豆成人91精品二区三区| 综合亚洲自拍| 欧美在线网站| 国产专区精品| 日韩精品导航| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲成人不卡| 久久影院一区二区三区| 婷婷亚洲精品| 视频一区欧美日韩| 精品一区在线| 日韩精品电影| 国产一区福利| 久久超碰99| 欧美久久香蕉| 日韩在线观看一区二区三区| 99久久精品费精品国产| 国产一区2区| 久久99蜜桃| 亚洲不卡视频| 夜夜精品视频| 九九综合在线| 国产91一区| www.com.cn成人| 成人精品高清在线视频| 国产极品一区| 国产精品网在线观看| 久久精品99国产精品| 日韩精品一区二区三区av| 三级一区在线视频先锋| 亚洲一区亚洲| 在线综合亚洲| 一本色道精品久久一区二区三区| 久久久久久久久久久9不雅视频| 久久久亚洲欧洲日产| 日韩精品一区二区三区免费视频| 亚洲一区二区小说| 亚洲精品三级| 日韩精彩视频在线观看| 日产欧产美韩系列久久99| 一区二区精品| 日韩欧美三区| 日韩二区三区四区| 国产私拍福利精品视频二区| 欧美日韩一区二区三区不卡视频 | 久久精品凹凸全集| 欧美一级二级视频| 国产精品午夜一区二区三区| 久久丁香四色| 日韩1区在线| 久久久夜夜夜| 一本色道久久精品| 亚洲日韩视频| 欧美一区在线观看视频| 欧美日一区二区三区在线观看国产免| 欧美日韩一区二区国产| 国产极品模特精品一二| 精品一区二区三区亚洲| 成人精品高清在线视频| 中文字幕在线免费观看视频| 精品日本视频| 正在播放日韩精品| 国产伊人精品| 男女男精品视频网| 国产精品色在线网站| 香蕉国产精品| 欧美片网站免费| 久久国产毛片| 另类综合日韩欧美亚洲| 欧美专区18| 日韩欧美三级| 久久精品欧洲| 亚洲精选成人| 日韩午夜黄色| 欧美日韩中文一区二区| 国产高清日韩| 伊人成人在线视频| 久久成人亚洲| 伊人网在线播放| 国产日韩欧美| 久久xxxx| 蜜桃传媒麻豆第一区在线观看 | 日韩中文字幕一区二区三区| 免费一级欧美在线观看视频| 亚洲精品国产日韩| 伊人国产精品| 日韩超碰人人爽人人做人人添| 欧美视频久久| 日本综合字幕| 99re国产精品| 91亚洲精品在看在线观看高清| 久久精品国产免费| 激情婷婷亚洲| 午夜a一级毛片亚洲欧洲| 嫩草伊人久久精品少妇av杨幂 | 久久不卡日韩美女| 欧美肉体xxxx裸体137大胆| 免费的成人av| 九九99久久精品在免费线bt| 偷拍欧美精品| 国产精品99久久免费观看| 久久国产主播| 亚洲精品女人| 国产拍在线视频| 在线一区二区三区视频| 成人日韩av| 天堂成人免费av电影一区| 久久麻豆视频| 热久久久久久久| 国产欧洲在线| 亚洲精品人人| 欧美aa在线观看| 欧美一区激情| 91成人网在线观看| 国产伦精品一区二区三区千人斩| 在线日韩中文| 欧美激情视频一区二区三区在线播放| 欧美1级日本1级| 国产精品a久久久久| 亚洲专区欧美专区| 一区二区精品伦理...|