- 浏览: 32445 次
- 性别:
- 来自: 湖南
文章分类
最新评论
一、本图片生成器具有以下功能特性:
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 581HttpClient client = new HttpCli ... -
HTTPClient的多线程编程
2012-03-02 09:09 1444Axis2的连接主要采用了HttpClient进行与服务器的服 ... -
HttpClient超时区别
2012-03-02 09:07 1042HttpClient 4 设置超时 httpclient 超时 ... -
HttpClient Theading
2012-03-01 10:49 638有技术兴趣的 请加28830308群. 这篇文章概括了怎样在 ... -
HttpClient使用
2012-03-01 10:43 671有技术兴趣的 请加28830308群. HttpClien ... -
线程请求执行,一个多线程程执行HTTP请求的例子。
2012-03-01 10:40 1718package cn.lake.util; import ... -
httpclient 4 下载 文件
2012-03-01 10:38 887import java.io.File; import ja ... -
使用了httpclient实现的上传商品的demo
2012-03-01 10:36 1117package com.taobao.top.sample.u ... -
socket简介
2012-02-07 10:58 651第一步 充分理解Socket ... -
转载socket
2012-02-07 10:57 530对TCP/IP、UDP、Socket编程这些词你不会很陌生吧? ... -
Java的synchronized关键字:同步机制总结
2012-02-07 10:54 535不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对 ... -
JAVA RMI
2012-02-07 10:53 545Java RMI 指的是远程方法调用 (Remote Meth ... -
JXL生成复杂的EXCEL
2011-12-26 13:52 1343public String ExcelTaskRepo ... -
如何快速的为现有数据库建立数据字典?
2011-12-20 13:55 955大部分项目在验收时都需要向客户提供一份详细的数据字典,而编写数 ... -
在java中获取客户端真实的IP地址
2011-12-20 13:55 522public static String getRemoteA ... -
用JavaMail的API发送邮件
2011-12-20 13:55 5001、MimeMessage的包装类 public c ... -
在项目中整合FreeMarker框架
2011-12-16 15:40 558FreeMarker是一个用Java编写的模板引擎,既可以 ... -
Commons FTP范例
2011-12-16 15:33 480public class FtpUtil { privat ... -
jacob学习总结
2011-12-16 15:27 402JACOB 就是 JAVA-COM Bridge的缩写,提供自 ... -
长短信发送范例
2011-12-16 15:25 659一、关键代码: private synchronized v ...
相关推荐
java 二维码生成器; 在使用二维码生成器时,系统默认会将生成的二维码图片放在D盘。
用Java语言写的JPEG图象生成器程序,是进行课程设计和学习制作管理系统的好资料。
JAVA实现CLDC与MIDP底层编程的代码.rar Java实现HTTP连接与浏览,Java源码下载.rar Java实现的FTP连接与数据浏览程序.rar Java实现的放大镜效果附有源文件.rar Java实现的点对点短消息发送协议(smpp)开发包源码.rar ...
wangEditor 等富文本内容 (含图片: base64格式、http的网络图片等) 转换成word java后端下载
实现了臣妾真的做不到啊、妈妈再打我一次、王宝强泰囧三张图片,如想处理其他图片,在类 cn.lulei.util.img.ImgParams 、前台index.html 和 index.js 两个文件做相应的配置即可实现
对指定的图片列表 按原比例大小读取图片 从指定的文件中读取图片的路径,生成图片路径的列表,然后通过列表框来播放图片信息。
用Java写了一个4位(可多位)验证码生成器,封装在一个类里,只需调用一个方法,写入生成图片的类型和生成图片路径,可直接生成验证码,并返回验证码信息。 最简单的使用方法:解压包后,进入captcha文件夹,双击...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
主要介绍了Java实现简单字符生成器代码例子,本文直接给出实现代码,需要的朋友可以参考下
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器...
为了敏捷快速开发,提升研发效率,框架内置了一键CRUD代码生成器,自定义了模块生成模板,可以根据已建好的表结构(字段注释需规范)快速的一键生成整个模块的所有代码和增删改查等等功能业务,真正实现了低代码开发,...
Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业...
1寸2寸证件照生成器
动态缩略图实现方案,java实现动态缩略图