图片的base64字符串添加水印并转为byte数组输出

3 篇文章 0 订阅

有需求将前端传过来的图片base64添加水印并保存到文件服务器中,所以写一个公共方法,该方法实现了水印文字居中,并且倾斜。DvMrmsConstants.PDF.WatermarkWords是水印文字常量,DvMrmsConstants.PDF.WatermarkAngle是水印倾斜角度(逆时针)

public static byte[] addImageWaterMark(String imageBase64) throws Exception {
        String[] base64Parts = imageBase64.split(",");
        byte[] imageBytes = Base64.getDecoder().decode(base64Parts[1]);
        InputStream inputStream = null;
        try {
            // 构造 BufferedImage 对象
            inputStream = new ByteArrayInputStream(imageBytes);
            BufferedImage bufferedImage = ImageIO.read(inputStream);

            // 添加水印
            Graphics2D graphics = bufferedImage.createGraphics();
            Font font = new Font("Arial", Font.BOLD, DvMrmsConstants.PDF.WatermarkFontSize);
            FontMetrics fm = graphics.getFontMetrics(font);
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            graphics.setFont(font);
            Color color = new Color(255, 255, 255, 128);
            graphics.setColor(color);
            String watermark = DvMrmsConstants.PDF.WatermarkWords;
            int x = (bufferedImage.getWidth() - fm.stringWidth(watermark)) / 2;
            int y = bufferedImage.getHeight() / 2;
            AffineTransform affineTransform = new AffineTransform();
            affineTransform.rotate(Math.toRadians(360 - DvMrmsConstants.PDF.WatermarkAngle), bufferedImage.getWidth() / 2d, bufferedImage.getHeight() / 2d);
            graphics.setTransform(affineTransform);
            graphics.drawString(watermark, x, y);

            // 将 BufferedImage 转换为 byte 数组
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, "jpg", baos);
            byte[] watermarkedImageBytes = baos.toByteArray();
            return watermarkedImageBytes;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            inputStream.close();
        }
        return null;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值