电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java 實現圖片合成,并添加文字

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

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

java 實現圖片合成,并添加文字

下面我就直接貼代碼,首先是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; } /** * 生成條形碼并已字節碼形式返回,生成的圖片格式為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; /** * 導入本地圖片到緩沖區 * * @param imgName * @return */ public BufferedImage loadImageLocal(String imgName) { try { return ImageIO.read(new File(imgName)); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 導入網絡圖片到緩沖區 * * @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 {// 目錄不存在則創建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(); } } } /** * 設定文字的字體等 * * @param fontStyle * @param fontSize */ public void setFont(String name, int style, int fontSize) { this.font = new Font(name, style, fontSize); } /** * 修改圖片,返回修改后的圖片緩沖區(只輸出一行文本),圖片居中顯示 * * @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);// 設置字體顏色 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);// 設置字體顏色 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 標題 * @param reservePrice 現價 * @param zkFinalPrice 折扣價 * @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()) {// 準備換行 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('現價¥'+reservePrice, 0, startY + 30); startY += 30; graphics.drawString('卷后價¥'+zkFinalPrice, 0, startY + 30); return newImage; }}

兩個幫助類里面有很多方法沒用到,大家只要看幾個關鍵的方法就可以了,TaoBaoQRCode 對象里面的屬性我就沒列出來了,大家自己根據自己的需求而定

以上就是java 實現圖片合成,并添加文字的詳細內容,更多關于Java 圖片合成的資料請關注好吧啦網其它相關文章!

標簽: Java
主站蜘蛛池模板: 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 小型单室真空包装机,食品单室真空包装机-百科 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 上海APP开发-APP制作-APP定制开发-上海APP开发制作公司-咏熠科技 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 河南凯邦机械制造有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 广东教师资格网-广东教师资格证考试网 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 |