- 浏览: 1420225 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (409)
- Java (48)
- Spring (29)
- struts2 (17)
- hibernate (4)
- 设计模式 (24)
- jbpm (1)
- JavaScript (5)
- 统计报表 (7)
- ExtJS_3.0 (35)
- struts1 (1)
- 分析设计 (3)
- Flex3 (24)
- UML (2)
- 数据库 (18)
- PowerDesigner (2)
- 应用服务器 (3)
- WebService (5)
- ActiveMQ_5.3.2 (6)
- Java通信技术 (11)
- GWT (6)
- OSGi (15)
- android (11)
- liferay6.0.6 (13)
- jquery (13)
- Linux (3)
- java.util.concurrent (16)
- guava (9)
- 开发模式 (1)
- 大数据 (2)
- 互联网金融 (4)
- treegrid-3.0 (7)
- 分布式 (8)
- GO语言 (4)
- maven (1)
- 缓存技术 (6)
- 其他 (2)
- 前端页面 (1)
- heasy (1)
- spring cloud(F版) (21)
- springboot (12)
- springmvc (5)
- mybatis (3)
- dubbo (1)
- 物联网 (0)
最新评论
-
raymond.chen:
谢谢您的分享
使用Ngrok解决通过外网访问内网web应用 -
wangyudong:
速度有点慢,不过在也找到了一个开源的holer,配置一个key ...
使用Ngrok解决通过外网访问内网web应用 -
a1006458222:
...
Axis2的部署和应用 -
偷师来了:
不好意思 这样的博客我觉得就灭有必要分享出来了 命令大家都会看 ...
Consul框架介绍 -
lliiqiang:
怎么直接删除文件夹啊?固定的几个文件可以删除,不固定的呢?需要 ...
Flex AIR —— 文件读写
一、本图片生成器具有以下功能特性:
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(); } } }
评论
2 楼
seekgirl
2011-04-12
源码省略了get set方法
1 楼
longhong
2009-03-25
请教下,怎样在图片里输入斜向字符串,如中华人民共和国字符串不是水平向的,可以是任意角度的
发表评论
-
keytool的使用
2019-08-28 15:12 458keytool是密钥和数字证书的管理工具。它使用户能够管理 ... -
Bitset数据结构的使用
2019-03-08 13:53 1834Bitset是Java中的一种数据结构。Bitset中主要 ... -
Disruptor:高性能低延迟的内存有界队列框架
2019-02-24 10:45 892Disruptor是用于在多个线程之间通信的高性能低延时的 ... -
java的类加载机制
2019-02-18 21:37 357ClassLoader的双亲委派模 ... -
ThreadLocal的使用范例
2019-02-16 19:30 492ThreadLocal用于保存某个线程的共享变量。 Thr ... -
反射工具包Reflections的使用
2019-02-16 17:51 2937Reflections 通过扫描 classpath,索引元 ... -
使用CGLIB对实现类进行动态代理
2019-01-31 19:12 2376CGLIB(Code Generation Library ... -
基于JDK动态代理实现Mybatis的Mapper功能
2019-01-31 18:40 853Mybatis通过定义Mapper接口类,类中的方法与map ... -
Java8新特性
2019-01-20 22:04 5011、Lambda表达式 ... -
使用百度API识别图片文字
2018-09-21 22:41 24541、注册百度账号 https://login.bce.b ... -
HanLP自然语言处理包的使用
2018-09-16 23:06 3058HanLP是由一系列模型与算法组成的Java工具包,目标是 ... -
org.apache.commons常用类的使用
2018-09-14 23:29 785/** * 文本相似度计算 */ ... -
图片转换为单色
2017-04-01 00:10 1426/** * 转为单色图片 */ privat ... -
Java事件机制范例
2016-11-28 15:22 2448java事件机制的参与者: event object:事件 ... -
编程方式的quartz2例子
2016-11-09 14:53 642Job类: public class MyJob imp ... -
数字证书格式
2016-11-06 20:44 1931PFX 或 P12 指以pkcs#12 ... -
Drools6使用范例
2016-10-15 23:50 27511、创建kmodule.xml文件 在s ... -
生成带logo的二维码图片
2016-05-25 18:21 1339源码如下: private static final in ... -
用HttpClient访问CXF的RESTful接口
2016-05-18 16:50 4411用CXF可以开发RESTful服务,服务接口的输入和输出支持 ... -
commons-configuration使用范例
2016-05-02 23:50 14711、访问属性文件 PropertiesConfigurat ...
相关推荐
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实现动态缩略图