`

Java 给图片增加 水印图片 水印文字

阅读更多
很多时候会用到给图片增加水印,这个时候我推荐利用“光影魔术手”,它完成水印的功能非常强大,而且也可以批处理,不过Java也可以非常轻松的完成这些事情,但效果也打点折扣,坦诚点说吧,java在图像处理方面确实不如c++,不过这本来就不是java的强项,都可以理解。

利用Java给图片增加水印道理很简单:利用Java在内存中加载一副图片,然后在此基础上加载第二幅图片,而这叠加就成了水印,同时第二幅图片您可以控制图片的透明度。水印文字也一个道理。利用这个道理,你甚至可以做到组合图片等等操作,只有想不到,没有做不到。

代码正在整理最近随后放上去。这里就把算法说一下。
水印图片的方法是:Graphics2D的drawImage(waterImage, x, y, width, height, null);
水印文字的方法是:Graphics2D的drawString(pressText, x, y);

/**
	 * 添加图片水印
	 * 
	 * @param targetImg
	 *            目标图片路径,如:C:\\kutuku.jpg
	 * @param waterImg
	 *            水印图片路径,如:C:\\kutuku.png
	 * @param x
	 *            水印图片距离目标图片左侧的偏移量,如果x<0, 则在正中间
	 * @param y
	 *            水印图片距离目标图片上侧的偏移量,如果y<0, 则在正中间
	 * @param alpha
	 *            透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)
	 */
	public final static void pressImage(String targetImg, String waterImg,
			int x, int y, float alpha) {
		try {
			// 加载目标图片
			File file = new File(targetImg);
			Image image = ImageIO.read(file);
			int width = image.getWidth(null);
			int height = image.getHeight(null);
			
			// 将目标图片加载到内存。
			BufferedImage bufferedImage = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D g = bufferedImage.createGraphics();
			g.drawImage(image, 0, 0, width, height, null);

			// 加载水印图片。
			Image waterImage = ImageIO.read(new File(waterImg));
			int width_1 = waterImage.getWidth(null);
			int height_1 = waterImage.getHeight(null);
			// 设置水印图片的透明度。
			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
					alpha));

			// 设置水印图片的位置。
			int widthDiff = width - width_1;
			int heightDiff = height - height_1;
			if (x < 0) {
				x = widthDiff / 2;
			} else if (x > widthDiff) {
				x = widthDiff;
			}
			if (y < 0) {
				y = heightDiff / 2;
			} else if (y > heightDiff) {
				y = heightDiff;
			}
			
			// 将水印图片“画”在原有的图片的制定位置。
			g.drawImage(waterImage, x, y, width_1, height_1, null);
			// 关闭画笔。
			g.dispose();
			
			// 保存目标图片。
			ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 添加文字水印
	 * 
	 * @param targetImg
	 *            目标图片路径,如:C:\\kutoku.jpg
	 * @param pressText
	 *            水印文字, 如:kutuku.com
	 * @param fontName
	 *            字体名称, 如:宋体
	 * @param fontStyle
	 *            字体样式,如:粗体和斜体(Font.BOLD|Font.ITALIC)
	 * @param fontSize
	 *            字体大小,单位为像素
	 * @param color
	 *            字体颜色
	 * @param x
	 *            水印文字距离目标图片左侧的偏移量,如果x<0, 则在正中间
	 * @param y
	 *            水印文字距离目标图片上侧的偏移量,如果y<0, 则在正中间
	 * @param alpha
	 *            透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)
	 */
	public static void pressText(String targetImg, String pressText,
			String fontName, int fontStyle, int fontSize, Color color, int x,
			int y, float alpha) {
		try {
			// 加载目标图片
			File file = new File(targetImg);
			Image image = ImageIO.read(file);
			int width = image.getWidth(null);
			int height = image.getHeight(null);
			
			// 将目标图片加载到内存。
			BufferedImage bufferedImage = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D g = bufferedImage.createGraphics();
			g.drawImage(image, 0, 0, width, height, null);
			g.setFont(new Font(fontName, fontStyle, fontSize));
			g.setColor(color);
			// 设置水印图片的透明度。
			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
					alpha));

			// 设置水印图片的位置。
			int width_1 = fontSize * getLength(pressText);
			int height_1 = fontSize;
			int widthDiff = width - width_1;
			int heightDiff = height - height_1;
			if (x < 0) {
				x = widthDiff / 2;
			} else if (x > widthDiff) {
				x = widthDiff;
			}
			if (y < 0) {
				y = heightDiff / 2;
			} else if (y > heightDiff) {
				y = heightDiff;
			}

			// 将水印文字“写”在原有的图片的制定位置。
			g.drawString(pressText, x, y + height_1);
			// 关闭画笔。
			g.dispose();
			
			// 保存目标图片。
			ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


文章地址:http://javapub.iteye.com/blog/711045

相关文章
Java图像图片 边缘检测 http://javapub.iteye.com/blog/685468
Java图像变灰 http://javapub.iteye.com/blog/687082
Java 给图片增加 水印图片 水印文字 [url]Java 给图片增加 水印图片 水印文字[/url]
Java图像渐变 http://javapub.iteye.com/blog/736799
Java将大图片转成小图片 http://javapub.iteye.com/blog/666607
分享到:
评论
6 楼 javapub 2011-11-02  
chenhaohbu 写道
水印的作用一般就是加密啊防伪啊这样紫。如果不能提取、识别水印信息,那这样加入水印文字和图片就失去意义啦……

一般来讲是这样的,水印的文字会保存在后台,同时也水印到图片上。前台输入后文字后和后台缓存的文字进行匹配,并不是真正回去提取文字。
5 楼 chenhaohbu 2011-10-25  
水印的作用一般就是加密啊防伪啊这样紫。如果不能提取、识别水印信息,那这样加入水印文字和图片就失去意义啦……
4 楼 javapub 2011-10-24  
chenhaohbu 写道
这种简单覆盖的方式确实可以加载水印图片和文字
问题是:加载后还能正常提取水印图片和水印文字吗?如何提取?
希望可以跟楼主交流交流……呵呵

不可以了。因为它不像PhotoShop,有一个层的概念。它就是直接在内存中,生成了图片,然后写道硬盘。所以过程是不可逆的。  只能通过其他的方法提取文字。

当然还有一个理论上的方法,就是直接把图片的内存对象,直接写到文件中,下次在反序列化,这样对象就又还原了,就可以提取水印图片和文字了。
3 楼 javapub 2011-10-24  
evan0625 写道
您好,你的这句代码
int width_1 = fontSize * getLength(pressText);  
中的getLength是如何得到的?谢谢


因为文字是又长度的。所以这个方法就是为了得到输入文字的长度。
2 楼 chenhaohbu 2011-10-22  
这种简单覆盖的方式确实可以加载水印图片和文字
问题是:加载后还能正常提取水印图片和水印文字吗?如何提取?
希望可以跟楼主交流交流……呵呵
1 楼 evan0625 2011-10-21  
您好,你的这句代码
int width_1 = fontSize * getLength(pressText);  
中的getLength是如何得到的?谢谢

相关推荐

    JAVA实现给图片增加图片水印或者文字水印-依赖包

    在Java编程中,给图片添加水印是一项常见的需求,无论是为了版权保护还是视觉美化。水印可以是图片形式,也可以是文字形式。本教程将详细讲解如何使用Java来实现这一功能,重点在于介绍所需的依赖包。 首先,我们...

    java给图片添加水印

    在Java编程语言中,给图片添加水印是一项常见的任务,特别是在网站开发中,为了保护版权或者标识来源,经常需要在用户上传的图片上添加特定的文字或图像水印。以下将详细讲解如何使用Java来实现这一功能。 首先,...

    基于Java给图片添加文字或图片水印

    在Java编程环境中,给图片添加文字或图片水印是一项常见的图像处理任务,广泛应用于版权保护、品牌宣传等领域。本项目“基于Java给图片添加文字或图片水印”旨在教授如何利用Java实现这一功能,适用于大学生的课程...

    Java为图片添加水印功能.rar

    Java为图片添加水印功能,这个水印类的操作比较实用,不但可以旋转水印图像,还可设置其水印图片的透明度,使其与原图融为一体,给图片添加水印,可以设置图片水印的角度,设置对线段的锯齿状边缘处理,第一参数-&gt;...

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    在Java编程中,实现图片上传并添加水印效果是一项常见的任务,这通常涉及到图像处理、图形用户界面(GUI)和文件I/O等多个方面。在这个项目中,我们将关注以下几个关键知识点: 1. **Java图像处理库**:Java标准库...

    采用java实现图片水印

    addWatermark("original.jpg", "水印文字", "output.jpg"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,我们创建了一个`addWatermark`方法,它接受原始图片路径、水印文本和输出...

    java中处理图片水印

    在Java编程语言中,处理图片水印涉及到图像处理和图形绘制技术。`Graphics2D`是Java 2D API的一部分,它提供了丰富的功能,可以用来在图像上添加文本、图像等元素,实现水印效果。下面我们将深入探讨如何使用`...

    JAVA处理图片 加文字水印以及灰色透明背景

    JAVA处理图片 加文字水印以及灰色透明背景,处理图片。

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    水印 java Graphics2D实现文字图片水印

    总结来说,使用Java Graphics2D实现文字图片水印主要涉及以下步骤: 1. 导入必要的库。 2. 创建一个方法,接收源图像、水印文本、字体、颜色和透明度作为参数。 3. 创建一个新BufferedImage对象,尺寸与源图像相同。...

    java 图片水印 改变图片大小

    水印通常用于保护版权或者为图片增加一些标识信息。在Java中,我们可以使用诸如`Java AWT`或`JavaFX`库来创建和添加水印。例如,使用`BufferedImage`类创建一个新的图像层,然后在该层上绘制文本或图形作为水印。...

    java 图片添加水印

    java 图片添加水印 图片叠加文字类 图片生成方法,如果需要在已有的图片叠加文字

    JAVA实现给图片增加图片水印或者文字水印

    在Java编程语言中,给图片添加水印是一项常见的任务,无论是为了版权保护、品牌宣传还是其他目的。水印可以是图像形式(图片水印)或者是文本形式(文字水印)。以下是一个详细的步骤来阐述如何使用Java实现这个功能...

    Java给图片加水印

    "Java给图片加水印"这个主题,就是关于如何利用Java技术在图片上添加标识或文字,以保护版权或者增强视觉效果。下面我们将深入探讨这个话题。 首先,我们需要了解Java中的图像处理库,如Java Advanced Imaging (JAI...

    用Java给图片添加文字或图像水印

    这个话题源于一个名为"Java水印.rar"的压缩包文件,它包含了一段Java源代码,用于实现这一功能。该压缩包有四个文件:RunIt.bat(运行脚本)、WaterMarkDemo.java(主程序源代码)、source.JPG(原始图片)和mark....

    Java实现在图片上添加水印图片和水印文字.doc

    Java 实现图片添加水印图片和水印文字 Java 是一种广泛应用于企业级开发的编程语言,拥有强大灵活的图形处理能力。本文将详细介绍如何使用 Java 实现图片添加水印图片和水印文字,并对代码进行解释。 图片添加水印...

    java对图片添加水印的工具类

    添加文字水印的工具类,自己去下JAR包,MAVEN的网站http://mvnrepository.com/

    去除pdf的图片水印和文字水印

    使用itext开发包对pdf文件进行去水印操作,包括删除图片水印和文字水印。通过遍历pdf的contents对象和xobjects对象,进行对象删除,速度快,效率高

    java调用ffmpeg 添加水印转换视频

    java调用ffmpeg添加水印并且转换视频,代码中并没有判断哪些格式支持,那些不支持,mpg,mp4,avi,wmv基本都可以(传入格式),转换为flv avi mp4起码都没问题,其它的没事过ffmpeg是开源的支持的挺多的 补充:时间算错了,...

    JAVA图片或文字水印以及图片缩放

    包含了一些java对图片操作处理的方法: 1.给图片添加图片水印 2.给图片添加文字水印 3.图片缩放 *主方法测试代码简单易懂

Global site tag (gtag.js) - Google Analytics