项目情况是:在页面上进行签名,签名过后需要生成时间水印。
生成水印的代码如下:
public static byte[] markImageByTextbystream(String logoText, byte[] srcImgstream, Integer degree) { ByteArrayOutputStream os = null; try { // 1、源图片 Image srcImg = ImageIO.read(new ByteArrayInputStream(srcImgstream)); int srcImgWidth = srcImg.getWidth(null);//获取图片的宽 int srcImgHeight = srcImg.getHeight(null);//获取图片的高 BufferedImage buffImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB); // 2、得到画笔对象 Graphics2D g = buffImg.createGraphics(); // 3、设置对线段的锯齿状边缘处理 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage( srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 4、设置水印旋转 if (null != degree) { g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2); } // 5、设置水印文字颜色 g.setColor(color); // 6、设置水印文字Font g.setFont(font); // 7、设置水印文字透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) //g.drawString(logoText, positionWidth, positionHeight); if(srcImg.getWidth(null)>280 && srcImg.getHeight(null)>10){ g.drawString(logoText, srcImg.getWidth(null)-500, srcImg.getHeight(null)-10); } // 9、释放资源 g.dispose(); // 10、生成图片 ImageIO.createImageOutputStream(""); os = new ByteArrayOutputStream (); ImageIO.write(buffImg, "JPG", os); return os.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } return null; }说明:这里的输入参数logoText是需要生成的水印内容,srcImgstream是目标图片文件的字节数组,degree是水印的旋转角度参数。