`
daoger
  • 浏览: 531887 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

java修改图片的基本应用-- 添加字符

阅读更多
前天给别的项目组帮忙,做一个给图片添加指定字符的例子;网上这方面的资料不多,好不容易在sun的官方网站上找到一点资料(http://java.sun.com/docs/books/tutorial/2d/images/index.html),可是说的也不全面,偶只好参照JDK和这点资料搞了一个例子!
主要代码如下:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

private Font font = null;// 添加字体的属性设置

private Graphics2D g = null;

private int fontsize = 0;

private int x = 0;

private int y = 0;


/**
* 导入本地图片到缓冲区
*/
public BufferedImage loadImageLocal(String imgName)
{
	try
	{
		return ImageIO.read(new File(imgName));
	} catch (IOException e)
	{
		System.out.println(e.getMessage());
	}
	return null;
}


/**
* 导入网络图片到缓冲区
*/
public BufferedImage loadImageUrl(String imgName)
{
	try
	{
		URL url = new URL(imgName);
		return ImageIO.read(url);
	} catch (IOException e)
	{
		System.out.println(e.getMessage());
	}
	return null;
}



/**
* 生成新图片到本地
*/
public void writeImageLocal(String newImage, BufferedImage img)
{
	if (newImage != null && img != null)
	{
		try
		{
			File outputfile = new File(newImage);
			ImageIO.write(img, "gif", outputfile);
		} catch (IOException e)
		{
			System.out.println(e.getMessage());
		}
	}
}


/**
* 设定文字的字体等
 */
public void setFont(String fontStyle, int fontSize)
{
	this.fontsize = fontSize;
	this.font = new Font(fontStyle, Font.PLAIN, fontSize);
}



/**
 * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
*/
public BufferedImage modifyImage(BufferedImage img, Object content, int x,int y)
{

	try
	{
		int w = img.getWidth();
		int h = img.getHeight();
		g = img.createGraphics();
		g.setBackground(Color.WHITE);
		g.setColor(Color.RED);
		if (this.font != null)
		g.setFont(this.font);
		// 验证输出位置的纵坐标和横坐标
		if (x >= h || y >= w)
		{
			this.x = h - this.fontsize + 2;
			this.y = w;
		} else
		{
			this.x = x;
			this.y = y;
		}
		if (content != null)
		{
			g.drawString(content.toString(), this.x, this.y);
		}
		g.dispose();
	} catch (Exception e)
	{
		System.out.println(e.getMessage());
	}

	return img;
}

/**
* 修改图片,返回修改后的图片缓冲区(输出多个文本段) xory:true表示将内容在一行中输出;false表示将内容多行输出
*/
public BufferedImage modifyImage(BufferedImage img, Object[] contentArr,int x, int y, boolean xory)
{
	try
	{
		int w = img.getWidth();
		int h = img.getHeight();
		g = img.createGraphics();
		g.setBackground(Color.WHITE);
		g.setColor(Color.RED);
		if (this.font != null)
		g.setFont(this.font);
		// 验证输出位置的纵坐标和横坐标
		if (x >= h || y >= w)
		{
			this.x = h - this.fontsize + 2;
			this.y = w;
		} else
		{
			this.x = x;
			this.y = y;
		}
		if (contentArr != null)
		{
			int arrlen = contentArr.length;
			if (xory)
			{
				for (int i = 0; i < arrlen; i++)
				{
					g.drawString(contentArr[i].toString(), this.x, this.y);
					this.x += contentArr[i].toString().length()* this.fontsize / 2 + 5;//重新计算文本输出位置
				}
			} else
			{
				for (int i = 0; i < arrlen; i++)
				{
					g.drawString(contentArr[i].toString(), this.x, this.y);
					this.y += this.fontsize + 2;//重新计算文本输出位置
				}
			}
		}
		g.dispose();
	} catch (Exception e)
	{
		System.out.println(e.getMessage());
	}

	return img;
}

这也只是java.awt.Graphics2D的简单应用,感兴趣的网友可以参考JDK学习Graphics2D的应用,估计我们登陆时的验证图片就是用程序生成的,并且绑定了数字签名!
分享到:
评论
1 楼 咖啡舞者 2007-10-08  
ImageIO
这个没有import?

相关推荐

    java-property-utils-1.9.jar

    1. **动态加载和修改属性**:除了基本的加载和保存属性文件,该库允许在运行时动态地添加、修改或删除属性,无需每次都重新加载整个文件。 2. **类型转换**:默认的`Properties`类只能处理字符串类型的属性,但`...

    java-11-openjdk-11.0.7.10-1.windows.redhat.x86_64.zip

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它提供了运行和开发Java应用程序所需的所有工具。OpenJDK是JDK的一个开源实现,由全球开发者社区维护,而Oracle JDK则是官方商业版本。...

    CORS包java-property-utils-1.9.jar和cors-filter-1.7-sources.jar

    在Java中,属性文件通常用于存储配置信息,如数据库连接字符串、系统参数等。`java-property-utils` 提供了方便的方法来读取、写入和操作这些文件,支持更灵活的属性管理和国际化。这个库在 ArcGIS Server 10.2 中...

    Java_SE应用部分-34

    在Java编程中,`String`类作为最基础的字符串处理工具,一旦创建,其内容便不可更改,这主要是为了确保数据的不变性(Immutability)。然而,当遇到需要频繁修改字符串内容的场景时,`StringBuffer`类便显得尤为重要...

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java-1.7.0-openjdk

    OpenJDK 是 Java Development Kit (JDK) 的一个实现,遵循 GNU General Public License (GPLv2) 许可协议,允许开发者自由使用、修改和分发代码。这个压缩包包含了两个 RPM(Red Hat Package Manager)文件,适用于 ...

    Java 程序转码(UTF-8)

    通过以上分析,我们可以看到,在Java中进行字符编码转换是一项基本而重要的任务。理解并掌握不同的编码方式及其转换方法对于开发高质量的应用程序至关重要。本文通过对给定示例代码的分析,展示了如何在Java程序中...

    CoreJava考试试题---达内科技.pdf

    根据给定的文件信息,我们可以总结出一系列关于Java编程语言的重要知识点,这些知识点不仅涵盖了基本的语法和概念,还深入到了面向对象编程的核心原理。以下是详细的解析: ### 1. 文档注释与Javadoc - **知识点:...

    JAVA给图片叠加字符或水印

    在Java编程语言中,给图片叠加字符或水印是一项常见的图像处理任务,广泛应用于版权保护、品牌宣传等领域。本文将详细解析如何通过Java实现这一功能,主要基于提供的`WaterMarkDemo.java`源码进行讲解。 首先,我们...

    JAVA图片格式的字符串验证码

    总之,JAVA生成图片验证码是结合了图像处理、字符串操作和随机数生成等多方面知识的一项实用技能,它在许多Web应用中都有广泛的应用。通过学习和实践,你不仅可以提升JAVA编程能力,还能增强对网络安全的理解。

    cors-filter-2.6和java-property-utils-1.13

    1. 对于CORS Filter,需要将其添加到Web应用的部署描述符(web.xml)中,并根据需求配置相应的CORS策略。 2. 使用Java Property Utils时,要确保正确加载属性文件,并理解如何处理异常,如文件不存在或格式错误。 3....

    java毕业设计项目源码---桌面精灵

    9. **面向对象设计**:在设计通讯录功能时,可能会有一个Contact类来表示联系人,包含姓名、电话、邮箱等属性,以及添加、删除、修改等方法。 10. **测试**:一个完整的项目应该包括单元测试和集成测试,确保每个...

    java字符流练习-电话本管理系统

    总的来说,这个练习项目不仅涵盖了Java字符流的基本用法,还涉及到了文件操作、数据结构、算法应用以及异常处理等多个方面的知识,是学习和实践Java IO系统的一个很好的实例。通过这个项目,开发者可以深入理解字符...

    JAVA学习经典笔记-----2

    5. **可移植性:** Java程序可以在任何支持Java的平台上运行,无需修改。 6. **高性能:** Java虚拟机(JVM)通过即时编译(JIT)技术提高程序的执行速度。 7. **多线程:** Java内置对多线程的支持,简化了并发程序的...

    JAVA删除字符实验

    ### JAVA删除字符实验知识点 #### 实验目标 本实验旨在通过编写一个Java Applet程序,实现用户输入一段字符串以及一个特定字符,然后程序能够移除该字符串中所有的指定字符,并输出处理后的结果。 #### 实验环境 -...

    JDK18-java-core-libraries-developer-guide.pdf

    1. java.lang:提供了基本的语言功能,例如字符串、数组、数学运算等。 2. java.util:提供了实用工具类,例如集合、日期、格式化等。 3. java.io:提供了输入/输出操作的类,例如文件、流、socket等。 4. java.net...

    jdk11 java11 linux版 jdk-11.0.2_linux-x64_bin.tar.zip

    Java开发工具包(Java Development Kit,简称JDK)是用于编写、编译和运行Java应用程序的重要软件包。这里我们关注的是JDK 11的Linux版本,文件名为"jdk-11.0.2_linux-x64_bin.tar.zip"。JDK 11是Java的一个重大版本...

Global site tag (gtag.js) - Google Analytics