为了账号安全,请及时绑定邮箱和手机立即绑定

Java实现图片生成水印

标签:
Java

要先得到缓存图片对象
3个工具类:
BufferedImage,Graphics2D,JPEGImageEncoder

文字水印: // 读取原图片信息
File srcImgFile = new File(srcImgPath);//得到文件
Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
int srcImgHeight = srcImg.getHeight(null);//获取图片的高
// 加水印
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); //根据图片的背景设置水印颜色
g.setFont(font); //设置字体

        //设置水印的坐标
        int x = srcImgWidth - 2*getWatermarkLength(waterMarkContent, g);  
        int y = srcImgHeight - 2*getWatermarkLength(waterMarkContent, g);  
        g.drawString(waterMarkContent, x, y);  //画出水印
        g.dispose();  
        // 输出图片  
        FileOutputStream outImgStream = new FileOutputStream(tarImgPath);  
        ImageIO.write(bufImg, "jpg", outImgStream);
        System.out.println("添加水印完成");  
        outImgStream.flush();  
        outImgStream.close();  

图片水印:/**

  • 给图片添加水印、可设置水印图片旋转角度
  • @param iconPath 水印图片路径
  • @param srcImgPath 源图片路径
  • @param targerPath 目标图片路径
  • @param degree 水印图片旋转角度
    */
    public static void markImageByIcon(String iconPath, String srcImgPath,
    String targerPath, Integer degree) {
    OutputStream os = null;
    try {
    Image srcImg = ImageIO.read(new File(srcImgPath));

        BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),   
                srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);   
    
        // 得到画笔对象   
        // Graphics g= buffImg.getGraphics();   
        Graphics2D g = buffImg.createGraphics();   
    
        // 设置对线段的锯齿状边缘处理   
        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);   
    
        if (null != degree) {   
            // 设置水印旋转   
            g.rotate(Math.toRadians(degree),   
                    (double) buffImg.getWidth() / 2, (double) buffImg   
                            .getHeight() / 2);   
        }   
    
        // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度   
        ImageIcon imgIcon = new ImageIcon(iconPath);   
    
        // 得到Image对象。   
        Image img = imgIcon.getImage();   
    
        float alpha = 0.5f; // 透明度   
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,   
                alpha));   
    
        // 表示水印图片的位置   
        g.drawImage(img, 150, 300, null);   
    
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));   
    
        g.dispose();   
    
        os = new FileOutputStream(targerPath);   
    
        // 生成图片   
        ImageIO.write(buffImg, "JPG", os);   
    
        System.out.println("图片完成添加Icon印章。。。。。。");   
    } catch (Exception e) {   
        e.printStackTrace();   
    } finally {   
        try {   
            if (null != os)   
                os.close();   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   

    }

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消