给图片加水印

记录一哈

public RestResult<FileVO> uploadFile(MultipartFile file, String stepName, String handleTime, String userName) {
        try {
            if(StringUtils.isEmpty(handleTime)){
                handleTime = DateTime.now().toString();
            }
            if(StringUtils.isEmpty(userName)){
                userName = JwtUtil.getCurrentUser().getUserName();
            }
            // 加载原始图片
            BufferedImage originalImage = ImgUtil.read(file.getInputStream());
            BufferedImage imageRes = this.pressText(originalImage, stepName, handleTime, userName, Color.lightGray, 0.8f);
            FileStreamDTO fileStreamDTO = new FileStreamDTO();
            fileStreamDTO.setFileStream(ImgUtil.toBytes(imageRes, "jpg"));
            fileStreamDTO.setFileName(file.getOriginalFilename());
            fileStreamDTO.setBucket(commonDictConfig.get(CommonDictConfig.Code.SZ_BUCKET));
            fileStreamDTO.setContentType(file.getContentType());
            fileStreamDTO.setSize(fileStreamDTO.getFileStream().length);
            return fileUtil.uploadImg(fileStreamDTO);
        } catch (Exception e) {
            e.printStackTrace();
            return RestResult.fail("图像处理异常");
        }
    }

    public static BufferedImage pressText (BufferedImage srcImage, String stepName, String handleTime, String userName, Color color, float alpha) {

        final BufferedImage destImage = srcImage;
        final Graphics2D gf = destImage.createGraphics();
        // 抗锯齿
        gf.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gf.setColor(color);
        Font font = new Font("宋体", Font.BOLD, destImage.getWidth() / 30);
        gf.setFont(font);
        // 透明度
        gf.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
        // 在指定坐标绘制水印文字(左下角绘制)
        FontMetrics metrics = gf.getFontMetrics(font);
        int textHeight = metrics.getAscent() - metrics.getLeading() - metrics.getDescent();
        gf.drawString("构筑物:" + stepName, 12, destImage.getHeight() - 5 * (textHeight));
        gf.drawString("时间:" + handleTime, 12, destImage.getHeight() - 3 * (textHeight));
        gf.drawString("处理人:" + userName, 12, destImage.getHeight() - (textHeight));
        gf.dispose();
        int width = destImage.getWidth(null);
        int height = destImage.getHeight(null);
        BufferedImage destImage2 = new BufferedImage(width, height, 1);
        Graphics2D g = destImage2.createGraphics();
        g.drawImage(destImage, 0, 0, width, height, null);
        g.setComposite(AlphaComposite.getInstance(10, alpha));
        g.dispose();
        return destImage2;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值