`
raymond.chen
  • 浏览: 1433482 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java实现的图片生成器

    博客分类:
  • Java
阅读更多

一、本图片生成器具有以下功能特性:

     1、可以设置图片的宽度、高度、外框颜色、背景色;

     2、可以设置图片字体的大小、名称、颜色;

     3、可以设置输出图片的格式,如JPEG、GIF等;

     4、可以将图片存储到一个文件或者存储到一个输出流;

     5、可以为图片增加若干条干扰线(在生成随机码图片时可用此特性);

     6、打印在图片上的文字支持自动换行;

     7、可以将文字旋转指定弧度数;

 

 

二、下面列出相关的源代码

     1、抽象类AbstractImageCreator的源代码

/**
 * 模板方法模式应用:图片生成器
 */
public abstract class AbstractImageCreator {
	private static Random rnd = new Random(new Date().getTime());
	private Drawer drawer;
	
	//图片宽度
	private int width = 200;
	
	//图片高度
	private int height = 80;
	
	//外框颜色
	private Color rectColor;
	
	//背景色
	private Color bgColor;
	
	//干扰线数目
	private int lineNum = 0;
	
	//图片格式
	private String formatName = "JPEG";
	
	//字体颜色
	private Color fontColor = new Color(0, 0, 0);
	
	//字体名称
	private String fontName = "宋体";
	
	//字体大小
	private int fontSize = 15;
	
	//文字旋转的弧度数
	private double radian = 0;
	private double rotateX = 0;
	private double rotateY = 0;
	
	//缩放
	private double scale = 1;
	

	//##### 此处省略getter、setter方法 #####


	public AbstractImageCreator(Drawer drawer){
		this.drawer = drawer;
	}
	
	/**
	 * 画干扰线
	 */
	private void drawRandomLine(Graphics graph){
		for(int i=0;i<lineNum;i++){
			//线条的颜色
			graph.setColor(getRandomColor(100, 155));
			
			//线条两端坐标值
			int x1 = rnd.nextInt(width);
			int y1 = rnd.nextInt(height);
			
			int x2 = rnd.nextInt(width);
			int y2 = rnd.nextInt(height);
			
			//画线条
			graph.drawLine(x1, y1, x2, y2);
		}
	}
	
	/**
	 * 随机获取颜色对象
	 */
	private Color getRandomColor(int base, int range){
		if((base + range) > 255) range = 255 - base;
		
		int red = base + rnd.nextInt(range);
		int green = base + rnd.nextInt(range);
		int blue = base + rnd.nextInt(range);
		
		return new Color(red, green, blue);
	}
	
	public void generateImage(String text)throws IOException{
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		
		if(rectColor == null) rectColor = new Color(0, 0, 0);
		if(bgColor == null) bgColor = new Color(240, 251, 200);
		
		//获取画布
		Graphics2D g = (Graphics2D)image.getGraphics();
		
		//画长方形
		g.setColor(bgColor);
		g.fillRect(0, 0, width, height);
		
		//外框
		g.setColor(rectColor);
		g.drawRect(0, 0, width-1, height-1);
		
		//画干扰线
		drawRandomLine(g);
		
		//画字符串
		drawer.draw(this, g, text);
		
		//执行
		g.dispose();
		
		//输出图片结果
		saveImage(image);
	}
	
	protected abstract void saveImage(BufferedImage image)throws IOException;
	
}

   

     2、类FileImageCreator的源代码

          该类将生成的图片存储到一个文件中,需要设置fileName成员变量值,该成员变量值表示图片的存储全路径。

public class FileImageCreator extends AbstractImageCreator {
	private String fileName;
	
	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public FileImageCreator(Drawer drawer){
		super(drawer);
	}
	
	public FileImageCreator(Drawer drawer, String fileName){
		super(drawer);
		this.fileName = fileName;
	}
	
	@Override
	protected void saveImage(BufferedImage image)throws IOException{
		ImageIO.write(image, getFormatName(), new File(fileName));
	}
}

  

     3、类StreamImageCreator的源代码

         该类将生成的图片存储到一个输出流中,需要设置stream成员变量值。

public class StreamImageCreator extends AbstractImageCreator {
	private OutputStream stream;
	
	public OutputStream getStream() {
		return stream;
	}

	public void setStream(OutputStream stream) {
		this.stream = stream;
	}

	public StreamImageCreator(Drawer drawer){
		super(drawer);
	}
	
	public StreamImageCreator(Drawer drawer, OutputStream stream){
		super(drawer);
		this.stream = stream;
	}

	@Override
	protected void saveImage(BufferedImage image) throws IOException {
		ImageIO.write(image, getFontName(), stream);
	}
}

  

      4、Drawer接口源码

public interface Drawer {
	/**
	 * 在绘画板上绘制字符串
	 * 
	 * @param creator 图片创建器对象
	 * @param g 绘画板
	 * @param text 待绘制的字符串
	 */
	public void draw(AbstractImageCreator creator, Graphics2D g, String text);
}

 

      5、SimpleDrawer类源码

public class SimpleDrawer implements Drawer {
	public void draw(AbstractImageCreator creator, Graphics2D g, String text){
		//文字旋转
		g.rotate(Math.toRadians(creator.getRadian()), creator.getRotateX(), creator.getRotateY());
		g.scale(creator.getScale(), creator.getScale());
		
		g.setColor(creator.getFontColor());
		Font font = new Font(creator.getFontName(), Font.PLAIN, creator.getFontSize());
		g.setFont(font);
		
		FontMetrics fm = g.getFontMetrics(font);
		int fontHeight = fm.getHeight(); //字符的高度
		
		int offsetLeft = 0;
		int rowIndex = 1;
		for(int i=0;i<text.length();i++){
			char c = text.charAt(i);
			int charWidth = fm.charWidth(c); //字符的宽度
			
			//另起一行
			if(Character.isISOControl(c) || offsetLeft >= (creator.getWidth()-charWidth)){
				rowIndex++;
				offsetLeft = 0;
			}
			
			g.drawString(String.valueOf(c), offsetLeft, rowIndex * fontHeight);
			offsetLeft += charWidth;
		}
	}
}

 

三、实例代码

public class Test {
	public static void main(String[] args) {
		try{
			StringBuffer sb = new StringBuffer();
			sb.append("中华人民共和国\n");
			sb.append("中华人民共和国\n");
			
			FileImageCreator creator = new FileImageCreator(new SimpleDrawer(), "c:\\img.jpeg");
			creator.setWidth(150); //图片宽度
			creator.setHeight(100); //图片高度
			creator.setLineNum(20); //干扰线条数
			creator.setFontSize(18); //字体大小
			creator.setFontName("黑体");
			
			//文字旋转
			creator.setRadian(30.0); //旋转弧度
			creator.setRotateX(creator.getWidth()/5);
			creator.setRotateY(creator.getHeight()*5/10);
			
			creator.generateImage(sb.toString());
			
			System.out.println("ok");
			
		}catch(IOException ex){
			ex.printStackTrace();
		}
	}
}

 

  • 大小: 6.2 KB
  • 大小: 38.8 KB
7
1
分享到:
评论
2 楼 seekgirl 2011-04-12  
源码省略了get set方法
1 楼 longhong 2009-03-25  
  请教下,怎样在图片里输入斜向字符串,如中华人民共和国字符串不是水平向的,可以是任意角度的

相关推荐

    java图片生成器

    在Java中实现图片生成器涉及到对Java 2D API、AWT和Swing库的深入理解。 Java 2D API是Java平台的标准部分,提供了丰富的功能来处理二维图形和图像。它支持基本的绘图操作,如绘制线、形状、文本和位图。开发者可以...

    java实现图片上传并显示

    以下是实现图片上传的基本步骤: 1. **配置Struts2**:在struts.xml配置文件中,定义一个Action,比如`ImageUploadAction`,并设置对应的接收方法,如`execute()`。同时,需要配置允许文件上传的相关参数。 2. **...

    java实现图片转换为视频

    本篇文章将详细探讨如何使用Java实现图片到视频的转换。 首先,我们需要理解Java中的关键库,如Java Advanced Imaging (JAI) 和 Java Media Framework (JMF)。JAI主要用于图像处理和分析,而JMF则用于媒体播放和...

    java实现图片下载和上传.zip

    以上就是关于“java实现图片下载和上传.zip”项目中的核心知识点,包括Spring、SpringMVC、MyBatis、Commons-FileUpload和Commons-IO的使用,以及在实际应用中需要考虑的安全性和性能优化措施。通过这些技术,开发者...

    基于Java实现,动态生成二维码海报和汉字名字工具_java_代码_下载

    在本项目中,我们关注的是一个基于Java实现的图片生成工具,主要功能是动态生成二维码海报和汉字名字头像。这个工具对于需要快速创建个性化图片的开发者或设计师来说非常实用,尤其是在进行数字营销或者个人品牌推广...

    Java将图片合并为视频

    在Java编程环境中,将一系列图片合并成视频是一个常见的多媒体处理任务。这个项目文件提供了一种实现方式,让我们来深入探讨一下这个过程中的关键知识点。 首先,我们要了解的是Java中的多媒体处理库。在这个项目中...

    java 上传图片生成缩略图

    ### Java 上传图片生成缩略图的知识点解析 在现代Web开发中,处理图像是一项常见的需求,尤其是在涉及用户上传图片的应用场景中。本篇文章将基于提供的代码片段详细讲解如何使用Java来实现上传图片并自动生成缩略图...

    java二维码生成器

    Java二维码生成器是一种工具,它允许开发者通过编程方式在Java应用程序中创建二维码图像。二维码,全称为Quick Response Code,是一种二维条形码,能够存储大量的数据,如文本、URL、联系信息等,并且可以通过智能...

    用Java语言写的JPEG图象生成器程序

    这个Java程序的目的是通过编程生成JPEG图像,这意味着开发者需要对JPEG编码标准有深入的理解,并能够用Java实现这些算法。在Java中,可以使用Java Advanced Imaging (JAI)库或者Java 2D API来处理图像。JAI提供了...

    java本地及网络图片重新生成

    标题“java本地及网络图片重新生成”与描述“java本地重新绘制生成到本地,及网络图片重新绘制生成Base64为字符串”所指向的知识点主要涵盖了在Java环境下,如何实现对本地图片的读取、编辑与保存,以及如何对网络...

    JAVA生成二维码,图片合成,图片添加文字对应资源和代码

    综上所述,这个资源包提供了基于Java的二维码生成、图片合成和文字添加的实例,对于开发者来说,这是一个学习和实践相关技能的好材料。你可以通过阅读和理解`ZxingUtils.java`中的代码,以及参考提供的链接教程,来...

    java图片浏览管理系统

    Java图片浏览管理系统是一款基于Java开发的简易应用,旨在帮助用户方便地查看和管理他们的图片集合。这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍...

    java 生成图片验证码

    在Java编程语言中,我们可以创建一个图像验证码生成器来实现这一功能。下面我们将详细探讨如何使用Java来生成带有干扰线的图片验证码。 首先,验证码的基本原理是随机生成一组字符,然后将这些字符以图像的形式展示...

    java图片管理器

    【Java图片管理器】是一个基于Java编程语言开发的软件应用,专用于管理和操作硬盘上的图像文件,特别是那些特定格式如GIF和PNG的图片。这个课程设计项目旨在提供一个全面的解决方案,帮助用户轻松地浏览、预览、删除...

    java高清处理图片

    传统的Java库虽然能够实现这些功能,但往往在图片质量方面不尽如人意,尤其是当图片尺寸被大幅度压缩时,画质下降明显,难以满足高清展示的需求。为了解决这一问题,本篇将详细介绍如何使用ImageMagick及其Java接口...

    java实现电子阅读器(源代码)

    实现这一功能需要生成每个页面的缩略图,可能需要用到 ImageIO 类进行图片读取和处理,以及 Thumbnailator 这样的第三方库来创建缩略图。缩位图数据同样需要存储和加载,以便于用户浏览。 综上所述,这个 Java 实现...

    java 实现 JPG图像文件转换TIFF文件 有源码。有工程

    本话题主要关注的是如何使用Java来实现JPG图像文件转换为TIFF(Tagged Image File Format)文件的流程。TIFF是一种灵活的位图图像格式,广泛用于扫描、打印、光栅图像处理软件,以及在各种操作系统中使用。以下是对...

    验证码图片生成器,java源码

    验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...

    java图片管理器(对刚学JAVA的人的提升有帮助)

    Java Swing中的EventListener接口和ActionListener接口允许我们添加监听器到组件上,实现对特定事件的处理。在图片管理器中,按钮点击事件会触发相应的处理逻辑,如打开图片、保存设置等。 5. **目录和文件操作**: ...

Global site tag (gtag.js) - Google Analytics