package com.fdkankan.common.util; import cn.hutool.core.util.StrUtil; import java.io.InputStream; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; @Slf4j public class LogoConfig { /** * 设置 logo * @param matrixImage 源二维码图片 * @return 返回带有logo的二维码图片 * @throws IOException * @author Administrator sangwenhao */ public BufferedImage LogoMatrix(BufferedImage matrixImage, boolean logo, String logoPath) throws IOException{ /** * 读取二维码图片,并构建绘图对象 */ Graphics2D g2 = matrixImage.createGraphics(); if(logo){ int matrixWidth = matrixImage.getWidth(); int matrixHeigh = matrixImage.getHeight(); File file = null; BufferedImage logoBuffer = null; try { /** * 读取Logo图片 */ if(StrUtil.isEmpty(logoPath)){ ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("static/img/logo.jpg"); Resource resource = resources[0]; //获得文件流,因为在jar文件中,不能直接通过文件资源路径拿到文件,但是可以在jar包中拿到文件流 InputStream inputStream = resource.getInputStream(); logoBuffer = ImageIO.read(inputStream); }else { file = new File(logoPath); logoBuffer = ImageIO.read(file); } }catch (IOException e){ log.info("读取图片流失败,path="+ logoPath, e); } //开始绘制图片 g2.drawImage(logoBuffer,matrixWidth/5*2,matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5, null);//绘制 BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); g2.setStroke(stroke);// 设置笔画对象 44 //指定弧度的圆角矩形 RoundRectangle2D.Float round = new RoundRectangle2D.Float(matrixWidth/5*2, matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5,20,20); g2.setColor(Color.white); g2.draw(round);// 绘制圆弧矩形 //设置logo 有一道灰色边框 BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); g2.setStroke(stroke2);// 设置笔画对象 RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(matrixWidth/5*2+2, matrixHeigh/5*2+2, matrixWidth/5-4, matrixHeigh/5-4,20,20); g2.setColor(new Color(128,128,128)); g2.draw(round2);// 绘制圆弧矩形 } g2.dispose(); matrixImage.flush() ; return matrixImage ; } // public static void main(String[] args) { // LogoConfig config = new LogoConfig() // this.getClass().getResource("/static/img/logo.png").getPath(); // } }