Java给图片加文字水印(JPG JPEG PNG通用)

	import java.io. * ;
	import java.text.DecimalFormat;
	import java.awt. * ;
	import java.awt.image.BufferedImage;
	import javax.imageio.ImageIO;
	/**
     * 
     * @param srcImgPath 源文件路径
     * @param newImagePath	输出图片路径
     * @param markContent	水印内容
     * @param color	水印颜色
     */
    public static void markImage(String srcImgPath,String newImagePath,String markContent, Color color) {
    	//获取文件拓展名
    	String filename = srcImgPath.substring(srcImgPath.lastIndexOf("\\"));
    	String end = filename.substring(filename.lastIndexOf("."));
    	end = end.substring(1);

    	DecimalFormat df=new DecimalFormat("0.00");	//避免除法仅保留整数
    	InputStream is = null;
        OutputStream os = null;
        try {
            java.awt.Image srcImg = ImageIO.read(new File(srcImgPath));
            int width = srcImg.getWidth(null);
            int height = srcImg.getHeight(null);
            BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            //得到画笔对象
            Graphics2D g = buffImg.createGraphics();
            /****不加png透明区域就是黑的****/
            if(end.equals("png")) {
                buffImg = g.getDeviceConfiguration().createCompatibleImage(srcImg.getWidth(null), srcImg.getHeight(null), Transparency.TRANSLUCENT);
                g.dispose();
                g = buffImg.createGraphics();
            }
            /****不加png透明区域就是黑的****/
            //设置对线段的锯齿状边缘处理(貌似没什么用)
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), java.awt.Image.SCALE_SMOOTH), 0, 0, null);
            //设置水印文字颜色
            g.setColor(color);
            //设置水印文字Font
            Font f = new Font("黑体", Font.ITALIC, (int) Double.parseDouble(df.format((float)width/5000*240)));
            g.setFont(f);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
            for (int i = 1; i < 8; i++) {
            	if(i%2 != 0) {
            		g.drawString(markContent, (int)(width / 8), i * height / 8); // 添加水印的文字和设置水印文字出现的内容
            	} else if(i%2 == 0) {
            		g.drawString(markContent, (int)(width / 8 * 2), i * height / 8); // 添加水印的文字和设置水印文字出现的内容
            	}
    		}
            g.dispose();
            os = new FileOutputStream(newImagePath);
            ImageIO.write(buffImg, end, os);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != is)
                    is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (null != os)
                    os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

PNG:
在这里插入图片描述
JPG
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Linux平台上的Java编程语言实现给图片文字水印,将中文文字展示为方框形状的步骤如下: 1. 首先,确保系统环境中已经安装了Java开发工具(JDK)和相关的库文件。 2. 在Java代码中引入相关的图像处理库,例如Java提供的AWT和Java 2D库。 3. 载待添加水印图片文件。可以使用Java IO库中的相关类,如ImageIO类,来读取和处理图片文件。 4. 创建一个新的图片对象,以便在其上添加水印。可以使用BufferedImage类来创建一个空白的图片对象,并设置其大小和颜色模式。 5. 根据读取的图片文件,将其内容绘制到新的图片对象中。可以使用Java 2D库中的Graphics类和Graphics2D类来实现这一步骤。 6. 设计一个方框形状的中文水印。可以通过Java的字体相关类(如Font、FontMetrics等)来设置合适的字体样式和字号,并计算文字的宽度和高度。 7. 在新的图片对象的指定坐标位置上绘制方框形状的中文水印。可以使用Java 2D库中的绘图方法,如drawRect()函数绘制方框的边框,fillRect()函数填充方框的内部,以及drawString()函数绘制中文文字。 8. 最后,将新生成的带有水印图片保存到文件中。可以使用ImageIO类中的write()函数将图片对象保存为指定的格式(如JPEGPNG等)的文件。 通过以上步骤,就可以在Linux平台上使用Java编程实现给图片上中文方框水印的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值