package com.doumee.core.utils; 
 | 
  
 | 
import com.google.zxing.common.BitMatrix; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.fileupload.FileItem; 
 | 
import org.apache.commons.fileupload.FileItemFactory; 
 | 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.checkerframework.checker.units.qual.C; 
 | 
import org.springframework.http.MediaType; 
 | 
import org.springframework.web.multipart.MultipartFile; 
 | 
import org.springframework.web.multipart.commons.CommonsMultipartFile; 
 | 
  
 | 
import javax.imageio.ImageIO; 
 | 
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"; 
 | 
  
 | 
    static String headUrl = "https://shoeslxkj.oss-cn-beijing.aliyuncs.com/file/20230404/SysBaseBackGround/B802B64FE31447DCB030F13ECC7CA9F9.png"; 
 | 
  
 | 
    private static float jPEGcompression = 0.75f;// 图片清晰比率 
 | 
    /** 
 | 
     * test 
 | 
     * 
 | 
     * @param args 
 | 
     * @throws 
 | 
     */ 
 | 
    public static void main(String[] args) { 
 | 
        long starttime = System.currentTimeMillis(); 
 | 
        System.out.println("开始:" + starttime); 
 | 
        try { 
 | 
//            String a="https://shoeslxkj.oss-cn-beijing.aliyuncs.com/file/20230403/SysBaseBackGround/883D63E108F44FC68ED856B42B9AB063.png"; 
 | 
//            generateImg(a,"D:/","baidu.com","清澄白河马克杯-节日版定制日版定制", BigDecimal.valueOf(129.88) ); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        System.out.println("结束:" + (System.currentTimeMillis() - starttime) / 1000); 
 | 
    } 
 | 
  
 | 
    private static final int width = 750; 
 | 
    private static final int height = 1194; 
 | 
  
 | 
    /** 
 | 
     * 生成分享图片 
 | 
     * @param headImg 头部图片 
 | 
     * @param wxQrCodeImg 微信小程序二维码 
 | 
     * @param goodsName 商品名称 
 | 
     * @param price  商品价格 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static InputStream generateImg(String headImg,String wxQrCodeImg, String goodsName, BigDecimal price) throws Exception { 
 | 
        BufferedImage bi =  new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
 | 
        //得到它的绘制环境(这张图片的笔) 
 | 
        Graphics2D g2 = (Graphics2D) bi.getGraphics(); 
 | 
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
 | 
        g2.fillRect(0, 0, width, height); 
 | 
        //背景图片 
 | 
        BufferedImage titles = ImageIO.read(new URL(bg)); 
 | 
        g2.drawImage(titles, 1, 1, 894, 1305, null); 
 | 
        g2.drawRect(0, 0, width - 1, height - 1); 
 | 
        //头部图片 
 | 
        BufferedImage headBg = ImageIO.read(new URL(headImg)); 
 | 
        g2.drawImage(headBg, 1, 1, 894, 900, null); 
 | 
        g2.drawRect(0, 0, width - 1, height - 1); 
 | 
  
 | 
        //商品名称 
 | 
        if(goodsName.length()>13){ 
 | 
            g2.setColor(Color.black); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(goodsName.substring(0,13), 46, 1000); 
 | 
            g2.setColor(Color.black); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(goodsName.substring(13), 46, 1054); 
 | 
        }else{ 
 | 
            g2.setColor(Color.black); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(goodsName, 46, 1020); 
 | 
        } 
 | 
  
 | 
        //商品价格 
 | 
        g2.setColor(Color.red); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
        g2.drawString("¥", 620, 1020); 
 | 
        BigDecimal integerPart = price.setScale(0, RoundingMode.DOWN); 
 | 
        BigDecimal fractionalPart  = price.subtract(integerPart); 
 | 
        if(price.compareTo(new BigDecimal(1000))>=0){ 
 | 
            //整数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(price.setScale(0, RoundingMode.DOWN).toString(), 660, 1020); 
 | 
            //小数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
            g2.drawString(fractionalPart.toString().substring(1), 740, 1020); 
 | 
        }else if(price.compareTo(new BigDecimal(100))>=0){ 
 | 
            //整数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(price.setScale(0, RoundingMode.DOWN).toString(), 660, 1020); 
 | 
            //小数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
            g2.drawString(fractionalPart.toString().substring(1), 720, 1020); 
 | 
        }else if(price.compareTo(new BigDecimal(10))>=0){ 
 | 
            //整数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(price.setScale(0, RoundingMode.DOWN).toString(), 660, 1020); 
 | 
            //小数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
            g2.drawString(fractionalPart.toString().substring(1), 700, 1020); 
 | 
        }else{ 
 | 
            //整数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
            g2.drawString(price.setScale(0, RoundingMode.DOWN).toString(), 660, 1020); 
 | 
            //小数部分 
 | 
            g2.setColor(Color.red); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
            g2.drawString(fractionalPart.toString().substring(1), 680, 1020); 
 | 
        } 
 | 
        //设置二维码图片 
 | 
        BufferedImage barcodeCode = ImageIO.read(new URL(wxQrCodeImg)); 
 | 
        g2.drawImage(barcodeCode, 670, 1100, 180, 180,null); 
 | 
        g2.drawRect(0, 0, width - 1, height - 1); 
 | 
        InputStream inputStream = bufferedImageToInputStream(bi); 
 | 
        return inputStream; 
 | 
  
 | 
    } 
 | 
  
 | 
    public  static MultipartFile getMultipartFile(InputStream inputStream, String fileName) { 
 | 
        FileItem fileItem = createFileItem(inputStream, fileName); 
 | 
        return new CommonsMultipartFile(fileItem); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * FileItem类对象创建 
 | 
     * 
 | 
     * @param inputStream inputStream 
 | 
     * @param fileName    fileName 
 | 
     * @return FileItem 
 | 
     */ 
 | 
    public static FileItem createFileItem(InputStream inputStream, String fileName) { 
 | 
        FileItemFactory factory = new DiskFileItemFactory(16, null); 
 | 
        String textFieldName = "file"; 
 | 
        FileItem item = factory.createItem(textFieldName, MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName); 
 | 
        int bytesRead = 0; 
 | 
        byte[] buffer = new byte[8192]; 
 | 
        OutputStream os = null; 
 | 
        //使用输出流输出输入流的字节 
 | 
        try { 
 | 
            os = item.getOutputStream(); 
 | 
            while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { 
 | 
                os.write(buffer, 0, bytesRead); 
 | 
            } 
 | 
            inputStream.close(); 
 | 
        } catch (IOException e) { 
 | 
            throw new IllegalArgumentException("文件上传失败"); 
 | 
        } finally { 
 | 
            if (os != null) { 
 | 
                try { 
 | 
                    os.close(); 
 | 
                } catch (IOException e) { 
 | 
                    e.printStackTrace();; 
 | 
                } 
 | 
            } 
 | 
            if (inputStream != null) { 
 | 
                try { 
 | 
                    inputStream.close(); 
 | 
                } catch (IOException e) { 
 | 
                    e.printStackTrace();; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return item; 
 | 
    } 
 | 
  
 | 
    public static void saveFile(InputStream is, String fileName) throws IOException { 
 | 
        try (BufferedInputStream in = new BufferedInputStream(is); 
 | 
             BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName))) { 
 | 
            int len; 
 | 
            byte[] b = new byte[1024]; 
 | 
            while ((len = in.read(b)) != -1) { 
 | 
                out.write(b, 0, len); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static InputStream bufferedImageToInputStream(BufferedImage backgroundImage) { 
 | 
        return bufferedImageToInputStream(backgroundImage, "jpg"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * backgroundImage 转换为输出流 
 | 
     * 
 | 
     * @param backgroundImage 
 | 
     * @param format 
 | 
     * @return 
 | 
     * @throws IOException 
 | 
     */ 
 | 
    public static InputStream bufferedImageToInputStream(BufferedImage backgroundImage, String format)  { 
 | 
        ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
 | 
        try ( 
 | 
                ImageOutputStream 
 | 
                        imOut = ImageIO.createImageOutputStream(bs)) { 
 | 
            ImageIO.write(backgroundImage, format, imOut); 
 | 
            InputStream is = new ByteArrayInputStream(bs.toByteArray()); 
 | 
            return is; 
 | 
        }catch (Exception e){ 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 传入的图像必须是正方形的 才会 圆形 如果是长方形的比例则会变成椭圆的 
 | 
     * 
 | 
     * 用户头像地址 
 | 
     * @return 
 | 
     * @throws IOException 
 | 
     */ 
 | 
    public static BufferedImage convertCircular(BufferedImage bi1) throws IOException { 
 | 
  
 | 
        BufferedImage bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); 
 | 
  
 | 
        Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1.getHeight()); 
 | 
  
 | 
        Graphics2D g2 = bi2.createGraphics(); 
 | 
  
 | 
        g2.setClip(shape); 
 | 
  
 | 
        // 使用 setRenderingHint 设置抗锯齿 
 | 
  
 | 
        g2.drawImage(bi1, 0, 0, null); 
 | 
  
 | 
        // 设置颜色 
 | 
  
 | 
        g2.setBackground(Color.green); 
 | 
  
 | 
        g2.dispose(); 
 | 
  
 | 
        return bi2; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    //去除二维码白边 
 | 
    public static BitMatrix deleteWhite(BitMatrix matrix) { 
 | 
        int[] rec = matrix.getEnclosingRectangle(); 
 | 
        int resWidth = rec[2] + 1; 
 | 
        int resHeight = rec[3] + 1; 
 | 
  
 | 
        BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); 
 | 
        resMatrix.clear(); 
 | 
        for (int i = 0; i < resWidth; i++) { 
 | 
            for (int j = 0; j < resHeight; j++) { 
 | 
                if (matrix.get(i + rec[0], j + rec[1])) resMatrix.set(i, j); 
 | 
            } 
 | 
        } 
 | 
        return resMatrix; 
 | 
    } 
 | 
    public static InputStream generateUserCardImg(String imgurl, String qrcode, String name,String type, String phone 
 | 
            , String shopaddr, String shopname 
 | 
            ,String phoneIcon 
 | 
            ,String addrIcon 
 | 
            ,String shopIcon 
 | 
            ,String logoIcon)  { 
 | 
  
 | 
        BufferedImage bi =  new BufferedImage(750, 1194, BufferedImage.TYPE_INT_RGB); 
 | 
        //得到它的绘制环境(这张图片的笔) 
 | 
        Graphics2D g2 = (Graphics2D) bi.getGraphics(); 
 | 
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
 | 
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
 | 
        g2.fillRect(0, 0, 750, 1194); 
 | 
        //背景图片 
 | 
        BufferedImage img1 =getImgIO(imgurl); 
 | 
        if(img1!=null){ 
 | 
            int w = img1.getWidth(); 
 | 
            int h = img1.getHeight(); 
 | 
            int h1 = (int)((double)w *700/750); 
 | 
            int w1 = (int)((double)h *750/700); 
 | 
            if(h>h1){ 
 | 
               h = h1; 
 | 
            } 
 | 
            if(w>w1){ 
 | 
               w = w1; 
 | 
            } 
 | 
            img1 = img1.getSubimage(0,0,w,h); 
 | 
            g2.drawImage(img1, 0, 0, 750, 700, null); 
 | 
        }else{ 
 | 
            g2.setColor(new Color(102, 102, 102, 1)); 
 | 
            g2.drawRect( 0, 0, 750, 700); 
 | 
        } 
 | 
  
 | 
        //名称 
 | 
        if(name.length()>5){ 
 | 
            name = name.substring(0,5)+"..."; 
 | 
        } 
 | 
        g2.setColor(Color.black); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 40)); 
 | 
        g2.drawString(name, 40, 742+th); 
 | 
  
 | 
        int w = 60+ name.length()* 40; 
 | 
        g2.setColor(new Color(176, 135, 113)); 
 | 
        g2.drawRoundRect(w,744-10,85,50,15,15);//画一个圆角矩形 
 | 
  
 | 
        g2.setColor(new Color(176, 135, 113)); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
        g2.drawString(type, w+12, 741+th); 
 | 
  
 | 
        if(StringUtils.isNotBlank(qrcode)){ 
 | 
            //个人二维码 
 | 
            BufferedImage img2 = getImgIO(qrcode); 
 | 
            if(img2!=null){ 
 | 
                g2.drawImage(img2, 522, 740, 188, 188, null); 
 | 
            } 
 | 
            g2.setColor(new Color(176, 135, 113)); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 24)); 
 | 
            g2.drawString("扫码添加好友", 544, 944+th); 
 | 
        } 
 | 
  
 | 
        //手机号 
 | 
        BufferedImage img4 = getImgIO(phoneIcon); 
 | 
        if(img4!=null){ 
 | 
            g2.drawImage(img4, 40, 830 , 34, 36, null); 
 | 
        } 
 | 
        g2.setColor(Color.GRAY); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
        g2.drawString(phone, 94, 828+th); 
 | 
        //门店名称 
 | 
        BufferedImage img5 = getImgIO(shopIcon); 
 | 
        if(img4!=null){ 
 | 
            g2.drawImage(img5, 40, 904 , 34, 36, null); 
 | 
        } 
 | 
        if(shopname.length()>11){ 
 | 
            shopname = shopname.substring(0,11)+"..."; 
 | 
        } 
 | 
        g2.setColor(Color.GRAY); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
        g2.drawString(shopname, 94,901+th); 
 | 
  
 | 
  
 | 
        BufferedImage img3 = getImgIO(addrIcon); 
 | 
        if(img3!=null){ 
 | 
            g2.drawImage(img3, 40, 980, 34, 36, null); 
 | 
        } 
 | 
        dealDrawShopAddr(g2,94,973+th,shopaddr); 
 | 
        //底部 
 | 
  
 | 
        BufferedImage img6 = getImgIO(logoIcon); 
 | 
        if(img6!=null){ 
 | 
            g2.drawImage(img6, 254, 1126+th-20, 242, 28, null); 
 | 
        } 
 | 
  
 | 
        InputStream inputStream = bufferedImageToInputStream(bi); 
 | 
        return inputStream; 
 | 
    } 
 | 
  
 | 
    private static void dealDrawShopAddr(Graphics2D g2, int x, int y, String shopaddr) { 
 | 
        int num =shopaddr.length() / 13; 
 | 
        for (int i = 0; i <= num; i++) { 
 | 
            String temp =""; 
 | 
            if(shopaddr.length() >= (i+1)*13){ 
 | 
                temp = shopaddr.substring(i*13,(i+1)*13); 
 | 
            }else{ 
 | 
                temp=shopaddr.substring( i*13); 
 | 
            } 
 | 
            //地址 
 | 
            g2.setColor(Color.GRAY); 
 | 
            g2.setFont(new Font("黑体", Font.PLAIN, 30)); 
 | 
            g2.drawString(temp, x, y+i*40); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static BufferedImage getImgIO(String imgurl) { 
 | 
        try { 
 | 
        return     ImageIO.read(new URL(imgurl)); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        }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 InputStream generateShareImg(String imgurl, InputStream mpCode1, String title) { 
 | 
  
 | 
        BufferedImage bi =  new BufferedImage(750, 976, BufferedImage.TYPE_INT_RGB); 
 | 
        //得到它的绘制环境(这张图片的笔) 
 | 
        Graphics2D g2 = (Graphics2D) bi.getGraphics(); 
 | 
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
 | 
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
 | 
        g2.fillRect(0, 0, 750, 976); 
 | 
        //背景图片 
 | 
        dealTitleCenter(g2,th,title); 
 | 
        if(StringUtils.isNotBlank(imgurl)){ 
 | 
            BufferedImage img1 =getImgIO(imgurl); 
 | 
            if(img1!=null){ 
 | 
                int w = img1.getWidth(); 
 | 
                int h = img1.getHeight(); 
 | 
                int h1 = (int)((double)w *502/670); 
 | 
                int w1 = (int)((double)h *670/502); 
 | 
                if(h>h1){ 
 | 
                    h = h1; 
 | 
                } 
 | 
                if(w>w1){ 
 | 
                    w = w1; 
 | 
                } 
 | 
                img1 = img1.getSubimage(0,0,w,h); 
 | 
                g2.drawImage(setRadius(img1,20,0,0), 40, 204, 670 ,502, null); 
 | 
  
 | 
            } 
 | 
        } 
 | 
  
 | 
//        g2.setColor(Color.white); 
 | 
//        g2.drawRoundRect(39,204, 672, 502, 1,1);//画一个圆角矩形 
 | 
  
 | 
        g2.setColor(Color.black); 
 | 
        g2.setFont(new Font("黑体", Font.BOLD, 40)); 
 | 
        g2.drawString("长按识别小程序", 40,768+th); 
 | 
        g2.setColor(Color.gray); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, 32)); 
 | 
        g2.drawString("查看更多精彩内容", 40,820+th); 
 | 
  
 | 
  
 | 
        BufferedImage img3 = getImgIO(mpCode1); 
 | 
        if(img3!=null){ 
 | 
            g2.setColor(Color.white); 
 | 
            g2.drawImage(img3, 530, 736, 180, 180, null); 
 | 
        } 
 | 
        InputStream inputStream = bufferedImageToInputStream(bi); 
 | 
        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; 
 | 
    } 
 | 
  
 | 
    private static void dealTitleCenter(Graphics2D g2, int th, String title) { 
 | 
        String[] titles  = title.split("&"); 
 | 
        for (int i = 0; i < titles.length && i<2; i++) { 
 | 
            String name = titles[i]; 
 | 
            //名称 
 | 
            if(name.length()>=17){ 
 | 
                name = name.substring(0,17); 
 | 
            } 
 | 
            Font font =new Font("黑体", Font.BOLD, 38); 
 | 
            FontMetrics fontMetrics = g2.getFontMetrics(font); 
 | 
            int centerX = 750 / 2; 
 | 
            int textWidth = fontMetrics.stringWidth(name); 
 | 
            g2.setColor(Color.black); 
 | 
            g2.setFont(font); 
 | 
            g2.drawString(name, centerX - textWidth / 2, 60+th+i*55); 
 | 
        } 
 | 
    } 
 | 
    public static int th = 30; 
 | 
    public static InputStream generateShareWithUserImg(BufferedImage imgurl, InputStream mpCode, String header, String name) { 
 | 
        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); 
 | 
        //背景图片 
 | 
       
 | 
        BufferedImage img1 =getImgIO(header); 
 | 
        if(img1!=null){ 
 | 
            g2.drawImage(setRadius(img1,img1.getWidth(),0,0), (int)(20*rate), (int)(h-68*rate), (int)(48*rate) ,(int)(48*rate), null); 
 | 
        } 
 | 
  
 | 
        g2.setColor(Color.white); 
 | 
        g2.setFont(new Font("黑体", Font.PLAIN, (int)(28 * rate))); 
 | 
        g2.drawString(name, (int) (80*rate),h-(int)((64-th)*rate)); 
 | 
        Font font =new Font("黑体", Font.PLAIN, (int)(24 * rate)); 
 | 
        g2.setColor(Color.white); 
 | 
        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; 
 | 
    } 
 | 
} 
 |