一篇头像裁剪,组合图片,生成海报的代码
1 /** 2 * 头像裁剪,组合图片,生成海报 3 * @param picUrl 4 * @param headPic 5 * @throws Exception 6 */ 7 public void createPost(String picUrl,String headPic) throws Exception{ 8 int width1 = 130; 9 URL url1 = new URL(headPic);//背景图片 10 BufferedImage headPicImg = ImageIO.read(url1); 11 // 透明底的图片 12 BufferedImage formatAvatarImage = new BufferedImage(width1, width1, BufferedImage.TYPE_INT_RGB); 13 14 Graphics2D graphics = formatAvatarImage.createGraphics(); 15 graphics.setColor(Color.white); //GREEN:绿色; 红色:RED; 灰色:GRAY 白色:white 16 graphics.fillRect(0, 0, width1, width1); 17 //把图片切成一个圓 18 graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 19 //留一个像素的空白区域,这个很重要,画圆的时候把这个覆盖 20 int border =1; 21 //图片是一个圆型 22 Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width1 - border * 2, width1 - border * 2); 23 //需要保留的区域 24 graphics.setClip(shape); 25 graphics.drawImage(headPicImg, border, border, width1 - border * 2, width1 - border * 2, null); 26 //绘制二维码 27 HashMap hints = new HashMap(); 28 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //指定字符编码为“utf-8” 29 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); //指定二维码的纠错等级为中级 30 hints.put(EncodeHintType.MARGIN, 1); //设置图片的边距 31 BitMatrix bitMatrix = new MultiFormatWriter().encode( "爱你一万年", BarcodeFormat.QR_CODE, 250, 250, hints); 32 BufferedImage ii = toBufferedImage(bitMatrix); 33 URL url = new URL(picUrl);//背景图片 34 BufferedImage picUrlImg = ImageIO.read(url); 35 36 //绘制宽=480,长=640的图板 37 int width = 750, hight = 1606; 38 BufferedImage image = new BufferedImage(width, hight, BufferedImage.TYPE_INT_RGB); 39 //获取图形上下文,graphics想象成一个画笔 40 graphics = (Graphics2D) image.getGraphics(); 41 //消除线条锯齿 42 graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 43 //对指定的矩形区域填充颜色 44 graphics.setColor(Color.white); //GREEN:绿色; 红色:RED; 灰色:GRAY 白色:white 45 graphics.fillRect(0, 0, 750, 1606); 46 //对指定的矩形区域填充颜色 47 graphics.drawImage(picUrlImg,0,0,null); 48 graphics.drawImage(formatAvatarImage,30,1326,null); 49 graphics.drawImage(ii,470,1326,null); 50 51 Font font=new Font("宋体",Font.BOLD,28); 52 graphics.setFont(font); 53 graphics.setColor(Color.BLACK); 54 graphics.drawString("徐睿", 170, 1386); 55 graphics.drawString("18703652539", 170, 1416); 56 font=new Font("宋体",Font.ITALIC,25); 57 graphics.setFont(font); 58 graphics.setColor(Color.BLACK); 59 graphics.drawString("我是你的专属客服,您有任何关于", 50, 1496); 60 graphics.drawString("信用卡申请的相关问题可随时向我", 50, 1536); 61 graphics.drawString("咨询", 50, 1576); 62 63 //graphics.setPaintMode(); 64 //graphics.translate(400, 600); 65 66 graphics.dispose();//释放此图形的上下文并释放它所使用的所有系统资源 67 FileOutputStream out = new FileOutputStream("D:\\yy/1.jpeg"); 68 ImageIO.write(image, "JPEG", out); 69 70 out.flush(); 71 out.close(); 72 73 }