- 浏览: 167417 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
crabboy:
goodhttp://veerle.duoh.com/comm ...
表格效果 -
lunvsxiao:
好呀,省的自己记那么多了。。
java常用正则表达式
1 多张jpg图合成gif动画
/**
* 把多张jpg图片合成一张
* @param pic String[] 多个jpg文件名 包含路径
* @param newPic String 生成的gif文件名 包含路径
*/
private synchronized void jpgToGif(String pic[], String newPic) {
try {
AnimatedGifEncoder e = new AnimatedGifEncoder(); //网上可以找到此类
e.setRepeat(0);
e.start(newPic);
BufferedImage src[] = new BufferedImage[pic.length];
for (int i = 0; i < src.length; i++) {
e.setDelay(200); //设置播放的延迟时间
src[i] = ImageIO.read(new File(pic[i])); // 读入需要播放的jpg文件
e.addFrame(src[i]); //添加到帧中
}
e.finish();
} catch (Exception e) {
System.out.println( "jpgToGif Failed:");
e.printStackTrace();
}
}
2 gif动画分解成多张jpg
/**
* 把gif图片按帧拆分成jpg图片
* @param gifName String 小gif图片(路径+名称)
* @param path String 生成小jpg图片的路径
* @return String[] 返回生成小jpg图片的名称
*/
private synchronized String[] splitGif(String gifName,String path) {
try {
GifDecoder decoder = new GifDecoder();
decoder.read(gifName);
int n = decoder.getFrameCount(); //得到frame的个数
String[] subPic = new String[n];
String tag = this.getTag();
for (int i = 0; i < n; i++) {
BufferedImage frame = decoder.getFrame(i); //得到帧
//int delay = decoder.getDelay(i); //得到延迟时间
//生成小的JPG文件
subPic[i] = path + String.value(i)+ ".jpg";
FileOutputStream out = new FileOutputStream(subPic[i]);
ImageIO.write(frame, "jpeg", out);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(frame); //存盘
out.flush();
out.close();
}
return subPic;
} catch (Exception e) {
System.out.println( "splitGif Failed!");
e.printStackTrace();
return null;
}
3 根据提供的文字生成jpg图片
/**
* 根据提供的文字生成jpg图片
* @param s String 文字
* @param smallWidth int 每个字的宽度和高度是一样的
* @param bgcolor Color 背景色
* @param fontcolor Color 字色
* @param fontPath String 字体文件
* @param jpgname String jpg图片名
* @return
*/
private String createJpgByFont(String s, int smallWidth,Color bgcolor,Color fontcolor,String fontPath,String jpgname) {
try { //宽度 高度
BufferedImage bimage = new BufferedImage(s.length()*smallWidth,
smallWidth,BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
g.setColor(bgcolor); //背景色
g.fillRect(0, 0, smallWidth, smallWidth); //画一个矩形
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); //去除锯齿(当设置的字体过大的时候,会出现锯齿)
g.setColor(fontcolor); //字的颜色
File file = new File(fontPath); //字体文件
Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5下面才支持)
g.setFont(font.deriveFont((float) smallWidth)); //font.deriveFont(float f)复制当前 Font
对象并应用新设置字体的大小
g.drawString(s,0, smallWidth); //在指定坐标除添加文字
g.dispose();
FileOutputStream out = new FileOutputStream(jpgname); //指定输出文件
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(50f, true);
encoder.encode(bimage, param); //存盘
out.flush();
out.close();
} catch (Exception e) {
System.out.println( "createJpgByFont Failed!");
e.printStackTrace();
}
}
4 多张小jpg图合成一张大JPG图,在这里对大图只作宽度限制,不做高度限制
/**
* 将多个小图片合成一张大jpg图 (小的jpg图片按照行列顺序平铺)
* @param smallJPG ArrayList 一组小的jpg图片
* @param bigWidth int 大图宽度
* @param smallWidth int 单个文字生成的小图的宽度和高度是一致的
* @return
*/
private void createBigJPG(ArrayList smallJPG, int bigWidth,
int smallHeigh,Color bgColor ,String picName) {
try {
if (bigWidth < smallWidth) //如果大图片的高度比小图片的高度还小 直接返回
return;
int colCount = bigWidth / smallWidth; //每行放置的字数
int leftMargin = (int) ((bigWidth - colCount * smallWidth) / 2f); //左边距
int rowCount = smallJPG.size(); //小图行数
int setWidth = bigWidth; //每列中间不留空隙,只留左右边距
int setHeight = smallWidth * rowCount ;
//按照大图片宽高绘制一个背景图片
BufferedImage bufImage = new BufferedImage(setWidth, setHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bufImage.createGraphics();
g.setColor(bgColor); //背景的颜色
g.fillRect(0, 0, setWidth, setHeight);
int y = 0; //纵坐标
for (int i = 0; i < rowCount; i++) { //遍历每行
ArrayList col = (ArrayList) (smallJPG.get(i));
int x = leftMargin; //横坐标 可能会出现左边距
for (int j = 0; j < col.size(); j++) {
String jpgname = (String) (col.get(j));
ImageIcon icon = new ImageIcon(jpgname);
Image img = icon.getImage();
int imgWidth = img.getHeight(null);
g.drawImage(img, x, y, null);
x += imgWidth;
}
y += (smallWidth);
}
g.dispose();
FileOutputStream out = new FileOutputStream(picName); //指定输出文件
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); //设置文件格式
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); //从图片缓冲中读取
param.setQuality(50f, true);
encoder.encode(bufImage, param); //存盘
out.flush();
out.close();
} catch (Exception e) {
System.out.println( "createBigJPG Failed!");
e.printStackTrace();
}
}
注:
(1)AnimatedGifEncoder和GifDecoder,以及这两个类涉及到的相关类,在网上搜索一下就可以找到。
(2)在linux系统下,如果你想支持更多系统外的字体,使用下面两句话,可以不用为系统添加字体,直接把字体文件拷贝到相应位置即可,但是需要jdk1.5环境。
File file = new File(fontPath); //字体文件
Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根据字体文件所在位置,创建新的字体对象
如果是jdk1.5以下版本则需要为系统添加字体,因为createFont(int fontFormat, File fontFile)
这个方法,是从1.5才开始有的。
(3)g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
我在测试中发现,当设置的字体过大的时候,会出现很明星的锯齿,后来在网上找到了这个解决方法。
(4)有了以上几个方法,就可以做出更好看的闪信了。我也是因为需求才写下这些方法的,美工做了一些热门词汇的gif图片,在短信转彩信遇到这些词汇时,要使用提供的图片替换文字。
发表评论
-
取文件MD5的应用
2011-09-14 14:06 690import java.io.File; import ja ... -
用 Quartz 进行作业调度
2010-10-09 11:18 827Quartz 是个开源的作业调度框架,为在 Java 应用程序 ... -
Java读取中文文件出现乱码解决方法
2010-09-04 11:22 819前些天在读取一个UTF-8文件时,中文出现乱码,现在将处 ... -
Java项目中获取文件路径的问题总结
2010-09-03 11:36 0在项目中,或多或少都会涉及到获取文件的路径,然而处理也是多种多 ... -
java文件读取 编码方式设置
2010-09-02 16:28 888FileInputStream fr = new FileIn ... -
java获取项目路径
2010-08-25 12:00 2043在jsp和class文件中调用的相对路径不同。 在jsp里 ... -
websphere升级后,URLRewriter失效的处理办法
2010-05-24 13:20 1596进入控制台-》服务器-》应用程序服务器-》Web 容器 > ... -
模态窗口在web中的应用
2010-03-27 12:57 1581在web开发中,很多地方可能需要弹出模态窗口来进行处理,但在模 ... -
java文件上传本篇文章来源于:开发学院 http://edu.codepub.com 原文链接:http://edu.codepub.com/2009/1
2010-03-05 18:38 1335Apache Commons fileUpload实现文件上传 ... -
Tomcat的class加载的优先顺序一览
2010-02-21 22:16 1315Tomcat的class加载的优先顺序一览1.最先是$JAVA ... -
删除eclipse或者MyEclipse记录的workspace
2010-01-13 10:28 1541在开发过程中可能建立了很多工作台,但随着开发的进行,可能有的工 ... -
文件上传组件的编写
2009-12-18 10:45 1214张孝祥的教程:文件的上传组件编写,希望对你有帮助! -
JAVA对象比较器Comparator
2009-10-24 17:45 1796JAVA对象比较器Comparator ... -
JAVA中通过类名,自动创建对象,并且合理初始化(自动找到合适的构造方法)
2009-10-24 16:03 2583JAVA中通过类名,自动创建对象,并且合理初始化(自动找到合适 ... -
Java软件架构师所要学的东西
2009-09-23 15:05 1477选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己 ... -
Java正则表达式
2009-09-14 15:01 1234众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
httpclient4相关资料记录
2009-09-10 22:25 1558import java.net.Socket;import o ... -
用commons的HttpClient和FileUpload写的文件上传下载类
2009-09-09 17:12 2149用commons的HttpClient和FileUpload写 ... -
use HTTPClient for loading image from URL
2009-09-09 15:01 1650读取JPEG,PNG,TIFF图像格式的文件。 ... -
开源XML处理包:Digester
2009-09-09 10:19 1336一、Digester简介Jakar ...
相关推荐
SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...
Java图片处理工具ImageMagick
这是一个Java图片处理程序。 Java 开源代码,高手学习 java 图片处理源码
文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。
java图片缩放 java缩略图 缩略图 java图片处理
发给大家共享一下。java图片处理类,课程设计,java图片处理类-java课程设计,java图片处理类-java课程设计,java图片处理类-java课程设计,java图片处理类-java课程设计
java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小...
不用多说,程序写得很清楚了,自己能看得懂的
java 图片处理 切图代码 实现自动缩放图片
图片添加水印图片、可设置水印图片旋转角度;图片添加水印文字(自动换行)、可设置水印文字的旋转角度;获取文本所占长度像素;图片截取;图片高质量缩放;图片png格式缩放;图片克隆副本;读取图片对象;图片输出 ...
Java图片处理-生成火焰效果,public class FirePicApplet extends Applet implements Runnable{ private Image backImage,foreImage; //前景和背景Image对象 private Image image,fireImage; //Applet和绘制...
图片水印处理,java图片处理;图片水印处理,java图片处理
这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!
图片处理类,可以给图片增加水印,可以压缩图片。JAVA自定义Util大放送-集成j2ee精英团队十年编程之精华
处理图片格式的转换,java图片处理jai所需要的jar包,分享
java图片处理工具类JAR包 java-image-scalingjar
Java图像处理类库 Java Image Filters