rk
8 小时以前 56fcde8c93a1a10bc50fac775e370a2db57f520e
server/dmmall_service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java
@@ -1,6 +1,8 @@
package com.doumee.core.utils;
import com.google.zxing.common.BitMatrix;
import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
@@ -12,12 +14,14 @@
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
@Slf4j
public class GeneratePicUtil {
    static String bg="https://shoeslxkj.oss-cn-beijing.aliyuncs.com/file/20230404/SysBaseBackGround/D56231512C0B4A4C9D06B02F9566B0B0.png";
@@ -268,7 +272,137 @@
        return resMatrix;
    }
    public static BufferedImage getImgIO(String imgurl) {
        try {
            return     ImageIO.read(new URL(imgurl));
        }catch (Exception e){
            log.error("海报==>拉取图片报错:"+e.getMessage());
        }return null;
    }
    private static BufferedImage getImgIO(InputStream is) {
        if(is ==null){
            log.error("=============================qrcode error 小程序码为空");
        }else{
            log.error("=============================qrcode okay 小程序码有有數據");
        }
        try {
            return     ImageIO.read(is);
        }catch (Exception e){
            log.error("=============================qrcode error 小程序码为空11111111111:"+e.getMessage());
        }
        return null;
    }
    public static int th = 30;
    public static InputStream generateShareWithUserImg(BufferedImage imgurl, InputStream mpCode) throws IOException {
        int w = imgurl.getWidth();
        int h = imgurl.getHeight();
        double rate = (double)w/750d;
        //得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) imgurl.getGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        //背景图片
        g2.setColor(Color.white);
        Font font =new Font("黑体", Font.PLAIN, (int)(24 * rate));
        g2.setFont(font);
        FontMetrics fontMetrics = g2.getFontMetrics(font);
        int textWidth = fontMetrics.stringWidth("扫码看更多");
        g2.drawString("扫码看更多", (int)(w -(textWidth+20*rate)),h-(int)(rate*(50-th)));
        BufferedImage img3 = getImgIO(mpCode);
        if(img3!=null){
            g2.setColor(Color.white);
            g2.fillOval((int)(w-130*rate), (int)(h-rate*150), (int)(100*rate) , (int)(100*rate));
            g2.drawImage(img3, (int)(w-130*rate), (int)(h-rate*150), (int)(100*rate) , (int)(100*rate), null);
        }
        InputStream inputStream = bufferedImageToInputStream(imgurl);
        return inputStream;
    }
    /**
     * 图片设置圆角
     * @param srcImage
     * @return
     * @throws
     */
    public static BufferedImage setRadius(BufferedImage srcImage, int radius, int border, int padding){
        int width = srcImage.getWidth();
        int height = srcImage.getHeight();
        int canvasWidth = width + padding * 2;
        int canvasHeight = height + padding * 2;
        BufferedImage image = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gs = image.createGraphics();
        gs.setComposite(AlphaComposite.Src);
        gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gs.setColor(Color.WHITE);
        gs.fill(new RoundRectangle2D.Float(0, 0, canvasWidth, canvasHeight, radius, radius));
        gs.setComposite(AlphaComposite.SrcAtop);
        gs.drawImage(setClip(srcImage, radius), padding, padding, null);
        if(border !=0){
            gs.setColor(Color.white);
            gs.setStroke(new BasicStroke(border));
            gs.drawRoundRect(padding, padding, canvasWidth - 2 * padding, canvasHeight - 2 * padding, radius, radius);
        }
        gs.dispose();
        return image;
    }
    /**
     * 图片切圆角
     * @param srcImage
     * @param radius
     * @return
     */
    public static BufferedImage setClip(BufferedImage srcImage, int radius){
        int width = srcImage.getWidth();
        int height = srcImage.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gs = image.createGraphics();
        gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gs.setClip(new RoundRectangle2D.Double(0, 0, width, height, radius, radius));
        gs.drawImage(srcImage, 0, 0, null);
        gs.dispose();
        return image;
    }
    public static BufferedImage transfromToImage(String imgUrl,String suffix){
        BufferedImage originalImage = null;
        try {
            originalImage = ImageIO.read(new URL(imgUrl));
        } catch (IOException e) {
            log.error("海报==>拉取图片报错:"+e.getMessage());
            return null;
        }
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            Thumbnails.of(originalImage)
                    .scale(1)
                    .outputFormat("png".equals(suffix.toLowerCase())?"PNG":"JPEG")
                    .outputQuality(0.8)
                    .imageType(BufferedImage.TYPE_INT_RGB)
                    .toOutputStream(outputStream);
        } catch (IOException e) {
            log.error("海报==>压缩图片报错:"+e.getMessage());
            return null;
        }
        byte[] data = outputStream.toByteArray();
        // 2. 包装为输入流
        ByteArrayInputStream bis = new ByteArrayInputStream(data);
        // 3. 解码为 BufferedImage
        try {
            return ImageIO.read(bis);
        } catch (IOException e) {
            log.error("海报==>转流报错:"+e.getMessage());
            return null;
        }
    }
}