- 浏览: 1437062 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 498keytool是密钥和数字证书的管理工具。它使用户能够管理 ... -
Bitset数据结构的使用
2019-03-08 13:53 1879Bitset是Java中的一种数据结构。Bitset中主要 ... -
Disruptor:高性能低延迟的内存有界队列框架
2019-02-24 10:45 945Disruptor是用于在多个线程之间通信的高性能低延时的 ... -
java的类加载机制
2019-02-18 21:37 385ClassLoader的双亲委派模 ... -
ThreadLocal的使用范例
2019-02-16 19:30 519ThreadLocal用于保存某个线程的共享变量。 Thr ... -
反射工具包Reflections的使用
2019-02-16 17:51 3047Reflections 通过扫描 classpath,索引元 ... -
使用CGLIB对实现类进行动态代理
2019-01-31 19:12 2414CGLIB(Code Generation Library ... -
基于JDK动态代理实现Mybatis的Mapper功能
2019-01-31 18:40 910Mybatis通过定义Mapper接口类,类中的方法与map ... -
Java8新特性
2019-01-20 22:04 5291、Lambda表达式 ... -
使用百度API识别图片文字
2018-09-21 22:41 24911、注册百度账号 https://login.bce.b ... -
HanLP自然语言处理包的使用
2018-09-16 23:06 3086HanLP是由一系列模型与算法组成的Java工具包,目标是 ... -
org.apache.commons常用类的使用
2018-09-14 23:29 812/** * 文本相似度计算 */ ... -
图片转换为单色
2017-04-01 00:10 1451/** * 转为单色图片 */ privat ... -
Java事件机制范例
2016-11-28 15:22 2486java事件机制的参与者: event object:事件 ... -
编程方式的quartz2例子
2016-11-09 14:53 670Job类: public class MyJob imp ... -
数字证书格式
2016-11-06 20:44 1959PFX 或 P12 指以pkcs#12 ... -
Drools6使用范例
2016-10-15 23:50 28001、创建kmodule.xml文件 在s ... -
生成带logo的二维码图片
2016-05-25 18:21 1367源码如下: private static final in ... -
用HttpClient访问CXF的RESTful接口
2016-05-18 16:50 4442用CXF可以开发RESTful服务,服务接口的输入和输出支持 ... -
commons-configuration使用范例
2016-05-02 23:50 15301、访问属性文件 PropertiesConfigurat ...
相关推荐
在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源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...