Java下载 jpg,png 图片文件时加水印

图片加水印

/**
     * 图片添加水印后下载
     *
     * @param srcFile  需要加水印的文件路径
     * @param markText 水印内容
     */
    public static void setImgMark(OutputStream os,byte[] srcFile, String markText) {
        try {
            // 读取原图片信息 得到文件(本地图片)
            File srcImgFile = MyFileUtil.bytesToFile(srcFile, "jpg");
            //将文件对象转化为图片对象
            Image srcImg = ImageIO.read(srcImgFile);
            //获取图片的宽
            int srcImgWidth = srcImg.getWidth(null);
            //获取图片的高
            int srcImgHeight = srcImg.getHeight(null);
            System.out.println("图片的宽:" + srcImgWidth);
            System.out.println("图片的高:" + srcImgHeight);

            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            // 加水印
            //创建画笔
            Graphics2D g = bufImg.createGraphics();
            //绘制原始图片
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            //-------------------------文字水印 start----------------------------
            //根据图片的背景设置水印颜色
            g.setColor(new Color(255, 255, 255, 128));
            //设置字体  画笔字体样式为微软雅黑,加粗,文字大小为60pt
            g.setFont(new Font("微软雅黑", Font.BOLD, 40));
            //水印内容
            String waterMarkContent = markText;
            //设置水印的坐标(为原图片中间位置)
            int x = (srcImgWidth - getWatermarkLength(waterMarkContent, g)) / 2;
            int y = srcImgHeight / 2;
            //画出水印 第一个参数是水印内容,第二个参数是x轴坐标,第三个参数是y轴坐标
            g.drawString(waterMarkContent, x, y);
            g.dispose();

            //-------------------------文字水印 end----------------------------
//            //待存储的地址
//            String tarImgPath = "F:/image/t.png";
//            // 输出图片
//            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
            ImageIO.write(bufImg, "png", os);
            System.out.println("添加水印完成");
//            outImgStream.flush();
//            outImgStream.close();
        } catch (Exception e) {
            throw new CheckedException("下载失败,原因:图片加水印失败");
        }
    }

    /**
     * 获取水印文字的长度
     *
     * @param waterMarkContent
     * @param g
     * @return
     */
    public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }

你可能感兴趣的:(java,开发语言)