在签名图片上生成水印

项目情况是:在页面上进行签名,签名过后需要生成时间水印。

生成水印的代码如下:

 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是水印的旋转角度参数。

猜你喜欢

转载自blog.csdn.net/qq_31247177/article/details/80521198