- 浏览: 34115 次
- 性别:
- 来自: 湖南
文章分类
最新评论
一、本图片生成器具有以下功能特性:
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(); } } }
发表评论
-
HttpClient容易忽视的细节——连接关闭
2012-03-02 09:15 621HttpClient client = new HttpCli ... -
HTTPClient的多线程编程
2012-03-02 09:09 1486Axis2的连接主要采用了HttpClient进行与服务器的服 ... -
HttpClient超时区别
2012-03-02 09:07 1075HttpClient 4 设置超时 httpclient 超时 ... -
HttpClient Theading
2012-03-01 10:49 679有技术兴趣的 请加28830308群. 这篇文章概括了怎样在 ... -
HttpClient使用
2012-03-01 10:43 727有技术兴趣的 请加28830308群. HttpClien ... -
线程请求执行,一个多线程程执行HTTP请求的例子。
2012-03-01 10:40 1764package cn.lake.util; import ... -
httpclient 4 下载 文件
2012-03-01 10:38 958import java.io.File; import ja ... -
使用了httpclient实现的上传商品的demo
2012-03-01 10:36 1159package com.taobao.top.sample.u ... -
socket简介
2012-02-07 10:58 687第一步 充分理解Socket ... -
转载socket
2012-02-07 10:57 577对TCP/IP、UDP、Socket编程这些词你不会很陌生吧? ... -
Java的synchronized关键字:同步机制总结
2012-02-07 10:54 578不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对 ... -
JAVA RMI
2012-02-07 10:53 579Java RMI 指的是远程方法调用 (Remote Meth ... -
JXL生成复杂的EXCEL
2011-12-26 13:52 1387public String ExcelTaskRepo ... -
如何快速的为现有数据库建立数据字典?
2011-12-20 13:55 998大部分项目在验收时都需要向客户提供一份详细的数据字典,而编写数 ... -
在java中获取客户端真实的IP地址
2011-12-20 13:55 556public static String getRemoteA ... -
用JavaMail的API发送邮件
2011-12-20 13:55 5351、MimeMessage的包装类 public c ... -
在项目中整合FreeMarker框架
2011-12-16 15:40 585FreeMarker是一个用Java编写的模板引擎,既可以 ... -
Commons FTP范例
2011-12-16 15:33 507public class FtpUtil { privat ... -
jacob学习总结
2011-12-16 15:27 449JACOB 就是 JAVA-COM Bridge的缩写,提供自 ... -
长短信发送范例
2011-12-16 15:25 694一、关键代码: private synchronized v ...
相关推荐
在Java中实现图片生成器涉及到对Java 2D API、AWT和Swing库的深入理解。 Java 2D API是Java平台的标准部分,提供了丰富的功能来处理二维图形和图像。它支持基本的绘图操作,如绘制线、形状、文本和位图。开发者可以...
以下是实现图片上传的基本步骤: 1. **配置Struts2**:在struts.xml配置文件中,定义一个Action,比如`ImageUploadAction`,并设置对应的接收方法,如`execute()`。同时,需要配置允许文件上传的相关参数。 2. **...
本篇文章将详细探讨如何使用Java实现图片到视频的转换。 首先,我们需要理解Java中的关键库,如Java Advanced Imaging (JAI) 和 Java Media Framework (JMF)。JAI主要用于图像处理和分析,而JMF则用于媒体播放和...
以上就是关于“java实现图片下载和上传.zip”项目中的核心知识点,包括Spring、SpringMVC、MyBatis、Commons-FileUpload和Commons-IO的使用,以及在实际应用中需要考虑的安全性和性能优化措施。通过这些技术,开发者...
总结,Java实现GIF动画效果需要结合窗口组件、图像处理、定时器以及可能的用户交互等多方面知识。通过不断刷新并切换图片帧,可以模拟出动态的视觉效果。在实际项目中,还可以考虑优化性能,比如预加载图片、使用...
在本项目中,我们关注的是一个基于Java实现的图片生成工具,主要功能是动态生成二维码海报和汉字名字头像。这个工具对于需要快速创建个性化图片的开发者或设计师来说非常实用,尤其是在进行数字营销或者个人品牌推广...
在Java编程环境中,将一系列图片合并成视频是一个常见的多媒体处理任务。这个项目文件提供了一种实现方式,让我们来深入探讨一下这个过程中的关键知识点。 首先,我们要了解的是Java中的多媒体处理库。在这个项目中...
### Java 上传图片生成缩略图的知识点解析 在现代Web开发中,处理图像是一项常见的需求,尤其是在涉及用户上传图片的应用场景中。本篇文章将基于提供的代码片段详细讲解如何使用Java来实现上传图片并自动生成缩略图...
Java二维码生成器是一种工具,它允许开发者通过编程方式在Java应用程序中创建二维码图像。二维码,全称为Quick Response Code,是一种二维条形码,能够存储大量的数据,如文本、URL、联系信息等,并且可以通过智能...
这个Java程序的目的是通过编程生成JPEG图像,这意味着开发者需要对JPEG编码标准有深入的理解,并能够用Java实现这些算法。在Java中,可以使用Java Advanced Imaging (JAI)库或者Java 2D API来处理图像。JAI提供了...
标题“java本地及网络图片重新生成”与描述“java本地重新绘制生成到本地,及网络图片重新绘制生成Base64为字符串”所指向的知识点主要涵盖了在Java环境下,如何实现对本地图片的读取、编辑与保存,以及如何对网络...
综上所述,这个资源包提供了基于Java的二维码生成、图片合成和文字添加的实例,对于开发者来说,这是一个学习和实践相关技能的好材料。你可以通过阅读和理解`ZxingUtils.java`中的代码,以及参考提供的链接教程,来...
Java图片浏览管理系统是一款基于Java开发的简易应用,旨在帮助用户方便地查看和管理他们的图片集合。这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍...
在Java编程语言中,我们可以创建一个图像验证码生成器来实现这一功能。下面我们将详细探讨如何使用Java来生成带有干扰线的图片验证码。 首先,验证码的基本原理是随机生成一组字符,然后将这些字符以图像的形式展示...
【Java图片管理器】是一个基于Java编程语言开发的软件应用,专用于管理和操作硬盘上的图像文件,特别是那些特定格式如GIF和PNG的图片。这个课程设计项目旨在提供一个全面的解决方案,帮助用户轻松地浏览、预览、删除...
在Java中实现电脑端扫描二维码的过程涉及到多个步骤,包括前端的图像捕获、后端的图像处理和解码。以下是对这些步骤的详细说明: 1. **前端图像捕获**: - 前端使用JavaScript来调用电脑摄像头进行拍照。这通常...
传统的Java库虽然能够实现这些功能,但往往在图片质量方面不尽如人意,尤其是当图片尺寸被大幅度压缩时,画质下降明显,难以满足高清展示的需求。为了解决这一问题,本篇将详细介绍如何使用ImageMagick及其Java接口...
实现这一功能需要生成每个页面的缩略图,可能需要用到 ImageIO 类进行图片读取和处理,以及 Thumbnailator 这样的第三方库来创建缩略图。缩位图数据同样需要存储和加载,以便于用户浏览。 综上所述,这个 Java 实现...
本话题主要关注的是如何使用Java来实现JPG图像文件转换为TIFF(Tagged Image File Format)文件的流程。TIFF是一种灵活的位图图像格式,广泛用于扫描、打印、光栅图像处理软件,以及在各种操作系统中使用。以下是对...
验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...