| | |
| | | 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; |
| | |
| | | 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"; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |