Terry.Li-彬
虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(19)
给我留言
查看公开留言
查看私人留言
随笔分类
(107)
CA(16)
(rss)
Extremecomponents (1)
(rss)
ibatis(4)
(rss)
Jakarta(9)
(rss)
Java(19)
(rss)
Liferay(21)
(rss)
maven2(15)
(rss)
postgresql(2)
(rss)
sitemesh
(rss)
spring2.0
(rss)
struts2.0
(rss)
struts-menu(1)
(rss)
webservice(17)
(rss)
设计模式(2)
(rss)
随笔档案
(141)
2017年4月 (1)
2013年3月 (1)
2013年1月 (1)
2009年12月 (1)
2009年9月 (3)
2009年2月 (1)
2008年12月 (2)
2008年11月 (1)
2008年9月 (2)
2008年8月 (2)
2008年5月 (1)
2008年3月 (22)
2008年2月 (34)
2008年1月 (14)
2007年12月 (7)
2007年11月 (34)
2007年10月 (1)
2007年9月 (13)
文章分类
(284)
ActiveMQ(7)
(rss)
Ajax(5)
(rss)
Axis(21)
(rss)
BootStrap(4)
(rss)
cache(7)
(rss)
chat(1)
(rss)
css
(rss)
DataBase(5)
(rss)
Dwr(3)
(rss)
ejb3.0(4)
(rss)
ESB(3)
(rss)
ESB(4)
(rss)
flex3(1)
(rss)
Freemarker(2)
(rss)
Hibernate Search(2)
(rss)
ibatis + spring (11)
(rss)
java(44)
(rss)
javascript(8)
(rss)
JBoss(5)
(rss)
Jbpm(18)
(rss)
JBPM4(6)
(rss)
jetty
(rss)
JMS(6)
(rss)
JMX(1)
(rss)
JPA(1)
(rss)
jquery(7)
(rss)
Jsp(5)
(rss)
Liferay(5)
(rss)
Linux(12)
(rss)
Log(6)
(rss)
Maven2(10)
(rss)
MyBatis
(rss)
mysql(4)
(rss)
soa(1)
(rss)
soap(5)
(rss)
spring(7)
(rss)
Spring Security(2)
(rss)
SSH(3)
(rss)
struts2.0(7)
(rss)
svn(2)
(rss)
web service(20)
(rss)
WebWork(1)
(rss)
Web前端(2)
(rss)
wireless(1)
(rss)
wsdl(1)
(rss)
yav(1)
(rss)
报表(3)
(rss)
推荐引擎(2)
(rss)
模板(5)
(rss)
设计模式(2)
(rss)
通信(1)
(rss)
文章档案
(342)
2015年9月 (2)
2013年12月 (1)
2013年11月 (2)
2013年10月 (2)
2013年9月 (1)
2013年8月 (1)
2013年3月 (3)
2013年2月 (1)
2013年1月 (17)
2011年8月 (4)
2011年7月 (1)
2011年6月 (6)
2011年5月 (2)
2011年4月 (2)
2011年3月 (4)
2011年2月 (2)
2011年1月 (3)
2010年12月 (8)
2010年11月 (10)
2010年10月 (7)
2010年9月 (32)
2010年8月 (6)
2010年7月 (1)
2010年6月 (2)
2010年5月 (1)
2010年4月 (1)
2010年3月 (1)
2010年2月 (1)
2010年1月 (2)
2009年12月 (1)
2009年11月 (1)
2009年10月 (5)
2009年9月 (23)
2009年8月 (6)
2009年7月 (18)
2009年6月 (2)
2009年5月 (5)
2009年4月 (5)
2009年2月 (9)
2009年1月 (19)
2008年12月 (13)
2008年10月 (1)
2008年9月 (3)
2008年8月 (2)
2008年7月 (5)
2008年6月 (5)
2008年5月 (3)
2008年4月 (6)
2007年12月 (9)
2007年11月 (32)
2007年10月 (2)
2007年9月 (41)
相册
北京建工测试数据库脚本
我的相册
收藏夹
(58)
我的收藏(58)
(rss)
家装
★榻榻米卡座衣帽间★田园暖家硬装完毕上软装咯
淘金币韩版短款小棉袄甜美棉服拉链厚外套面包棉衣秋冬装女装新款
最新随笔
1. 身份证JS校验
2. MySQL导入.sql文件及常用命令
3. ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
4. Ajax Session Timeout 超时 处理
5. 忘掉jQuery,使用JavaScript原生API
6. Ehcache详细解读
7. How can I print SQL query result log with log4j?
8. repositories
9. ehcache 配置参数说明
10. OSChina架构中,依照“管理重于配置”的思路使用Servlet设计的MVC
11. class卸载、热替换和Tomcat的热部署的分析
12. 个性化推荐技术漫谈
13. 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
14. 一个类引发的回忆
15. 配置_Druid和Spring关联监控配置
16. AtomicInteger
17. spring通过annotation注册MBean到JMX
18. BootStrap入门教程 (四)
19. BootStrap入门教程 (三)
20. BootStrap入门教程 (二)
21. BootStrap入门教程 (一)
22. Linux centos 6.3 Tomcat Install
23. Linux centos 6.3 Nginx Install
24. Linux centos 6.3 Python Install
25. Linux centos 6.3 Redis Install
26. Linux centos 6.3 Mysql Install
27. Linux centos 6.3 Mysql slave Install
28. Linux centos 6.3 Lua Install
29. Linux centos 6.3 Memcached Install
30. Linux centos 6.3 Erlang Install
31. Linux centos 6.3 Graphicsmagick Install
32. Linux centos 6.3 Ejabberd Install
33. Linux centos 6.3 JDK Install
34. flex摄像头拍照 java上传到数据库 .
35. Nginx+Tomcat+Memcached共享session集群配置
36. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
37. linux下Nginx+tomcat整合的安装与配置
38. 从 iBatis 到 MyBatis - MyBatis 简明学习教程
39. Apache Http Server与Tomcat实现负载均衡和集群
40. linux+nginx+tomcat负载均衡,实现session同步
搜索
积分与排名
积分 - 739668
排名 - 61
最新评论
1. re: 配置_Druid和Spring关联监控配置
fchgvhbjnkmll
--hb
2. re: eclipse 属性文件,自动转为Unicode编码[未登录]
哈哈
--哈哈
3. re: Ehcache详细解读[未登录]
话说都是这一篇文章,有意思
--啊
4. re: Maven使用deploy命令部署构建
感谢!我也碰到这个问题了!
--曲奇饼
5. re: Apache Http Server与Tomcat实现负载均衡和集群[未登录]
讲的很详细,受教了
--林
6. re: 转载 高负载系统架构设计
顶,但是,在数据分离方面好像写的很模糊!
--nqfang
7. re: Ajax Session Timeout 超时 处理
sads
--11
8. 354554
684854986
--3498665
9. re: 将任意格式转换为JSON数据格式的工具类
["d":“气而去”]
--人
10. re: FreeMarker 自定义标签
评论内容较长,点击标题查看
--zuidaima
11. re: Maven使用deploy命令部署构建[未登录]
好,写的比较详细,按此配置成功。
--Anderson
12. re: BootStrap入门教程 (三)
评论内容较长,点击标题查看
--zuidaima
13. re: (转载)页面静态化(JSP动态页面转静态化)
@静态化
伪静态化,应该使用模板生成HTML
--libin2722
14. re: (转载)页面静态化(JSP动态页面转静态化)
这个不是静态化,就不要用静态化的标题吓人!!!
--静态化
15. re: BootStrap入门教程 (二)
评论内容较长,点击标题查看
--zuidaima
16. re: 权限控制:spring 3.0 security配置例子
谢谢,遇到了最后的问题,还好找到答案解决了~
--ZL
17. re: BootStrap入门教程 (一)
评论内容较长,点击标题查看
--zuidaima
18. re: BootStrap入门教程 (三)
评论内容较长,点击标题查看
--zuidaima
19. re: 配置_Druid和Spring关联监控配置[未登录]
sasa
--aaa
20. re: JAVA解析纯真IP地址库
你这个有多线程并发问题
--苏秦
21. re: flex摄像头拍照 java上传到数据库 .
评论内容较长,点击标题查看
--123yedddd
22. re: 在基于Spring及Hibernate应用程序中使用ETags降低带宽占用和服务器压力
评论内容较长,点击标题查看
--最代码
23. re: Apache Http Server与Tomcat实现负载均衡和集群
集群后,创建的 test1.jsp 放在哪儿?
--秦真
24. re: BootStrap入门教程 (一)
作为入门教程,连需要包含的css都不提。。。
--作为入门教程,连需要包含的css都不提。。。
25. re: BootStrap入门教程 (一)[未登录]
作为入门教程,连需要包含的css都不提。。。
--bluefield
26. re: url加密参数 (java版)
asd飞
--是电饭锅
27. re: 将JBoss启动做成Windows的系统服务
我的服务也起不来
--23
28. re: 测试-答对5道题的人是天才,答对4道的是帅才,答对3道的是将才,答对2道的是奇才,答对1道的是人才
3、冲
4、“亼”或者“亽”
5、129
--byl
29. re: JBPM数据库表说明
这些表全部手工创建吗?
--轻描淡写
30. re: 将JBoss启动做成Windows的系统服务
为什么我做的服务起不来呢?
--吴江
31. re: 利用开源组件制作验证码 Captcha
ggg
--ssss
32. re: 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
麻烦 博主把dictionary.txt发给我吧,让我学习学习
1182787467@qq.com
谢谢
--love code
33. re: 权限控制:spring 3.0 security配置例子[未登录]
楼主真的很细心 我是在国外论坛上发现了同样的问题
--tommy
34. re: 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
这是全的么,楼主?我导入到MyEclipse里好多错误呀,除了import包之外还有好多错,看不懂。。。
--yi
35. re: FreeMarker 自定义标签
感谢!
--四海
36. re: WebWork 2.2 + Tomcat 5.0 + Jdk 1.6 出现Provider org.apache.xalan.processor.TransformerFactoryImpl not found错误
我tomcat1.60+jdk1.60也出现这个问题,网上度了下,加个xalan.jar包就好了
--liuruliu
37. re: FreeMarker 自定义标签[未登录]
copy 别人文章也不带个链接.
--selina
38. re: 权限控制:spring 3.0 security配置例子[未登录]
最后那点确实坑爹啊。。
--123
39. re: 图片加载错误,显示默认图片
奋斗奋斗
--分段
40. re: JBPM数据库表说明[未登录]
非常感谢
--nicol
阅读排行榜
1. 打印出Ibatis最终的SQL语句(8709)
2. server-config.wsdd配置一例(8456)
3. 编写你自己的单点登录(SSO)服务 (8387)
4. Axis1.4 利用 deploy.wsdd 发布 server-config.wsdd文件(6977)
5. HashMap 、HashTable、HashSet的区别 (4906)
6. ClassNotFoundException: org.hibernate.hql.ast.HqlToken(4663)
7. Axis1.4 开发笔记(3716)
8. Liferay Portal二次开发指南(3647)
9. ibatis中文与like的问题 (3465)
10. 一个服务返回一个ArrayList,如何使用Axis序列化/反序列化啊(3447)
11. Maven2 常用命令(3340)
12. 使用maven2 打ear包(3215)
13. Apache Maven 2 简介(最全的文档)(3201)
14. httpclient中MultipartPostMethod类上传文件(2909)
15. Double:双精度类型(2453)
16. 使用Java实现CA(一)(2349)
17. JAVA中SSL证书认证通讯-Client(2329)
18. 深入了解Java ClassLoader、Bytecode 、ASM、cglib (2265)
19. 在Struts2.0中如何得到绝对路径(2208)
20. 将JBoss启动做成Windows的系统服务(2046)
21. 一个可以在页面上随意画线、多边形、圆,填充等功能的js (1965)
22. Struts2.0 中配置 Struts-Menu(1923)
23. JSF最佳入门(1882)
24. 深入浅出Liferay Portal (4) (1806)
25. 教程--开始使用Maven下(1726)
26. portal专题(一)用liferay server简单开发portlet快速上手(1594)
27. 深入浅出Liferay Portal (10) (1587)
28. 用axis发布webservices(一) (1530)
29. 深入浅出Liferay Portal (12) (1495)
30. 深入浅出Liferay Portal (3) (1472)
31. mvn功能简介 (1446)
32. Liferay Portal学习笔记之(五):开发主题风格theme(1430)
33. 使用Java实现CA(二)(1403)
34. Postgresql 不能远程连接(1394)
35. Liferay Portal学习笔记(三):自定义页面布局Template(1393)
36. liferay 部署(1381)
37. 深入浅出Liferay Portal (8) (1363)
38. 深入浅出Liferay Portal (2) (1360)
39. Problem with Sybase, PostgreSQL and Timestamp columns(1359)
40. 调用IE内部的打印控件来实现打印功能(1344)
评论排行榜
1. ClassNotFoundException: org.hibernate.hql.ast.HqlToken(8)
2. 测试-答对5道题的人是天才,答对4道的是帅才,答对3道的是将才,答对2道的是奇才,答对1道的是人才(5)
3. 用axis发布webservices(一) (3)
4. Liferay Portal学习笔记(一):安装(3)
5. JAVA中SSL证书认证通讯-Client(3)
6. Tomcat 5.5.2 下部署 Liferay 4.4.1(2)
7. 将JBoss启动做成Windows的系统服务(2)
8. 深入浅出Liferay Portal (12) (2)
9. 打印出Ibatis最终的SQL语句(2)
10. HashMap 、HashTable、HashSet的区别 (2)
11. java线程综述 (2)
12. Axis1.4 开发笔记(2)
13. 深入了解Java ClassLoader、Bytecode 、ASM、cglib (1)
14. 代理模式(1)
15. java对word、excel、pdf等操作综合文章(1)
16. Axis1.4 利用 deploy.wsdd 发布 server-config.wsdd文件(1)
17. 使用maven2 打ear包(1)
18. 深入浅出Liferay Portal (11) (1)
19. 深入浅出Liferay Portal (10) (1)
20. 转载 高负载系统架构设计(1)
21. 论坛灌水机 -- HTTPClient(1)
22. Apache Maven 2 简介(最全的文档)(1)
23. maven2完全使用手册(1)
24. 在Struts2.0中如何得到绝对路径(1)
25. Java深入:在Eclipse中如何利用Maven (0)
26. 教程--开始使用Maven下(0)
27. Maven2快速入门教程 (0)
28. 调用IE内部的打印控件来实现打印功能(0)
29. ibatis中文与like的问题 (0)
30. Chapter 1. Maven2(0)
31. Maven2 体验(0)
32. 1.1. Maven2 体验(0)
33. Maven2.0:编译、测试、部署、运行(0)
34. Maven2 常用命令(0)
35. Struts2.0 中配置 Struts-Menu(0)
36. maven2.0学习笔记 (0)
37. mvn功能简介 (0)
38. Maven中文手册 (0)
39. Maven使用手册(0)
40. maven翻译一结 (0)
图片截取和缩略
package
com.supben.util;
import
java.awt.Dimension;
import
java.awt.Image;
import
java.awt.Point;
import
java.awt.Rectangle;
import
java.awt.image.BufferedImage;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.util.Iterator;
import
javax.imageio.ImageIO;
import
javax.imageio.ImageReadParam;
import
javax.imageio.ImageReader;
import
javax.imageio.stream.ImageInputStream;
import
org.apache.log4j.Logger;
import
com.sun.image.codec.jpeg.JPEGCodec;
import
com.sun.image.codec.jpeg.JPEGEncodeParam;
import
com.sun.image.codec.jpeg.JPEGImageEncoder;
public
class
ImageUtil {
private
static
final
Logger log = Logger.getLogger(ImageUtil.
class
);
/**
* 切割图片
* @param x 截点横坐标 (从左开始计数)
* @param y 截点纵坐标 (从上开始计数)
* @param width 截取的宽度
* @param height 截取的长度
* @param oldpath 图片位置
* @param newpath 新生成的图片位置
*/
public
static
void
cutImage(
int
x,
int
y,
int
width,
int
height, String oldpath, String newpath) {
FileInputStream is =
null
;
ImageInputStream iis =
null
;
//这个是获取图片扩展名的方法,比如:jpg。我这里有现成的,如果没有,自己实现
String imgType = StringUtil.getExt(oldpath);
try
{
is =
new
FileInputStream(oldpath);
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(imgType);
ImageReader reader = it.next();
iis = ImageIO.createImageInputStream(is);
reader.setInput(iis,
true
);
ImageReadParam param = reader.getDefaultReadParam();
Point p =
new
Point();
p.setLocation(x, y);
Dimension d =
new
Dimension();
d.setSize(width, height);
Rectangle rect =
new
Rectangle(p, d);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(
0
, param);
ImageIO.write(bi, imgType,
new
File(newpath));
is.close();
iis.close();
}
catch
(Exception e) {
log.error(e);
}
}
/**
* 缩略图片
* @param oldpath 原图片
* @param newpath 新生成的图片存放地址
* @param wdith 缩略后的宽
* @param height 缩略后的高
*/
public
static
void
scaleImage(String oldpath, String newpath,
int
wdith,
int
height) {
// 获取老的图片
File oldimg =
new
File(oldpath);
try
{
BufferedImage bi = ImageIO.read(oldimg);
Image Itemp = bi.getScaledInstance(wdith, height, BufferedImage.SCALE_SMOOTH);
BufferedImage thumbnail =
new
BufferedImage(wdith, height, BufferedImage.TYPE_INT_RGB);
thumbnail.getGraphics().drawImage(Itemp,
0
,
0
,
null
);
// 缩略后的图片路径
File newimg =
new
File(newpath);
FileOutputStream out =
new
FileOutputStream(newimg);
// 绘图
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbnail);
param.setQuality(
1
.0f,
false
);
encoder.encode(thumbnail);
out.close();
bi.flush();
bi =
null
;
}
catch
(IOException e) {
log.error(e);
}
}
public
static
void
main(String[] args) {
scaleImage(
"D:/2.jpg"
,
"D:/3.jpg"
,
50
,
50
);
}
}
import
java.awt.Color;
import
java.awt.Graphics;
import
java.awt.Graphics2D;
import
java.awt.Rectangle;
import
java.awt.RenderingHints;
import
java.awt.geom.AffineTransform;
import
java.awt.image.BufferedImage;
import
java.awt.image.ColorModel;
import
java.awt.image.WritableRaster;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
javax.imageio.ImageIO;
import
com.sun.image.codec.jpeg.JPEGCodec;
import
com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 图片工具类,完成图片的截取
*
* @author inc062977
*
*/
public
class
ImageHepler {
/**
* 实现图像的等比缩放
* @param source
* @param targetW
* @param targetH
* @return
*/
private
static
BufferedImage resize(BufferedImage source,
int
targetW,
int
targetH) {
// targetW,targetH分别表示目标长和宽
int
type = source.getType();
BufferedImage target =
null
;
double
sx = (
double
) targetW / source.getWidth();
double
sy = (
double
) targetH / source.getHeight();
// 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
// 则将下面的if else语句注释即可
if
(sx < sy) {
sx = sy;
targetW = (
int
) (sx * source.getWidth());
}
else
{
sy = sx;
targetH = (
int
) (sy * source.getHeight());
}
if
(type == BufferedImage.TYPE_CUSTOM) {
// handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
targetH);
boolean
alphaPremultiplied = cm.isAlphaPremultiplied();
target =
new
BufferedImage(cm, raster, alphaPremultiplied,
null
);
}
else
target =
new
BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
// smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return
target;
}
/**
* 实现图像的等比缩放和缩放后的截取
* @param inFilePath 要截取文件的路径
* @param outFilePath 截取后输出的路径
* @param width 要截取宽度
* @param hight 要截取的高度
* @param proportion
* @throws Exception
*/
public
static
void
saveImageAsJpg(String inFilePath, String outFilePath,
int
width,
int
hight,
boolean
proportion)
throws
Exception {
File file =
new
File(inFilePath);
InputStream in =
new
FileInputStream(file);
File saveFile =
new
File(outFilePath);
BufferedImage srcImage = ImageIO.read(in);
if
(width >
0
|| hight >
0
) {
// 原图的大小
int
sw = srcImage.getWidth();
int
sh = srcImage.getHeight();
// 如果原图像的大小小于要缩放的图像大小,直接将要缩放的图像复制过去
if
(sw > width && sh > hight) {
srcImage = resize(srcImage, width, hight);
}
else
{
String fileName = saveFile.getName();
String formatName = fileName.substring(fileName
.lastIndexOf(
'.'
) +
1
);
ImageIO.write(srcImage, formatName, saveFile);
return
;
}
}
// 缩放后的图像的宽和高
int
w = srcImage.getWidth();
int
h = srcImage.getHeight();
// 如果缩放后的图像和要求的图像宽度一样,就对缩放的图像的高度进行截取
if
(w == width) {
// 计算X轴坐标
int
x =
0
;
int
y = h /
2
- hight /
2
;
saveSubImage(srcImage,
new
Rectangle(x, y, width, hight), saveFile);
}
// 否则如果是缩放后的图像的高度和要求的图像高度一样,就对缩放后的图像的宽度进行截取
else
if
(h == hight) {
// 计算X轴坐标
int
x = w /
2
- width /
2
;
int
y =
0
;
saveSubImage(srcImage,
new
Rectangle(x, y, width, hight), saveFile);
}
in.close();
}
/**
* 实现缩放后的截图
* @param image 缩放后的图像
* @param subImageBounds 要截取的子图的范围
* @param subImageFile 要保存的文件
* @throws IOException
*/
private
static
void
saveSubImage(BufferedImage image,
Rectangle subImageBounds, File subImageFile)
throws
IOException {
if
(subImageBounds.x <
0
|| subImageBounds.y <
0
|| subImageBounds.width - subImageBounds.x > image.getWidth()
|| subImageBounds.height - subImageBounds.y > image.getHeight()) {
System.out.println(
"Bad subimage bounds"
);
return
;
}
BufferedImage subImage = image.getSubimage(subImageBounds.x,subImageBounds.y, subImageBounds.width, subImageBounds.height);
String fileName = subImageFile.getName();
String formatName = fileName.substring(fileName.lastIndexOf(
'.'
) +
1
);
ImageIO.write(subImage, formatName, subImageFile);
}
}
import
java.awt.AlphaComposite;
import
java.awt.Color;
import
java.awt.Font;
import
java.awt.Graphics2D;
import
java.awt.Image;
import
java.awt.geom.AffineTransform;
import
java.awt.image.AffineTransformOp;
import
java.awt.image.BufferedImage;
import
java.io.File;
import
java.io.IOException;
import
javax.imageio.ImageIO;
/**
* @author Eric Xu
*
*/
public
final
class
ImageUtils {
/**
* 图片水印
* @param pressImg 水印图片
* @param targetImg 目标图片
* @param x 修正值 默认在中间
* @param y 修正值 默认在中间
* @param alpha 透明度
*/
public
final
static
void
pressImage(String pressImg, String targetImg,
int
x,
int
y,
float
alpha) {
try
{
File img =
new
File(targetImg);
Image src = ImageIO.read(img);
int
wideth = src.getWidth(
null
);
int
height = src.getHeight(
null
);
BufferedImage image =
new
BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src,
0
,
0
, wideth, height,
null
);
//水印文件
Image src_biao = ImageIO.read(
new
File(pressImg));
int
wideth_biao = src_biao.getWidth(
null
);
int
height_biao = src_biao.getHeight(
null
);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawImage(src_biao, (wideth - wideth_biao) /
2
, (height - height_biao) /
2
, wideth_biao, height_biao,
null
);
//水印文件结束
g.dispose();
ImageIO.write((BufferedImage) image,
"jpg"
, img);
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 文字水印
* @param pressText 水印文字
* @param targetImg 目标图片
* @param fontName 字体名称
* @param fontStyle 字体样式
* @param color 字体颜色
* @param fontSize 字体大小
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public
static
void
pressText(String pressText, String targetImg, String fontName,
int
fontStyle, Color color,
int
fontSize,
int
x,
int
y,
float
alpha) {
try
{
File img =
new
File(targetImg);
Image src = ImageIO.read(img);
int
width = src.getWidth(
null
);
int
height = src.getHeight(
null
);
BufferedImage image =
new
BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src,
0
,
0
, width, height,
null
);
g.setColor(color);
g.setFont(
new
Font(fontName, fontStyle, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawString(pressText, (width - (getLength(pressText) * fontSize)) /
2
+ x, (height - fontSize) /
2
+ y);
g.dispose();
ImageIO.write((BufferedImage) image,
"jpg"
, img);
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 缩放
* @param filePath 图片路径
* @param height 高度
* @param width 宽度
* @param bb 比例不对时是否需要补白
*/
public
static
void
resize(String filePath,
int
height,
int
width,
boolean
bb) {
try
{
double
ratio =
0.0
;
//缩放比例
File f =
new
File(filePath);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
//计算比例
if
((bi.getHeight() > height) || (bi.getWidth() > width)) {
if
(bi.getHeight() > bi.getWidth()) {
ratio = (
new
Integer(height)).doubleValue() / bi.getHeight();
}
else
{
ratio = (
new
Integer(width)).doubleValue() / bi.getWidth();
}
AffineTransformOp op =
new
AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio),
null
);
itemp = op.filter(bi,
null
);
}
if
(bb) {
BufferedImage image =
new
BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(
0
,
0
, width, height);
if
(width == itemp.getWidth(
null
))
g.drawImage(itemp,
0
, (height - itemp.getHeight(
null
)) /
2
, itemp.getWidth(
null
), itemp.getHeight(
null
), Color.white,
null
);
else
g.drawImage(itemp, (width - itemp.getWidth(
null
)) /
2
,
0
, itemp.getWidth(
null
), itemp.getHeight(
null
), Color.white,
null
);
g.dispose();
itemp = image;
}
ImageIO.write((BufferedImage) itemp,
"jpg"
, f);
}
catch
(IOException e) {
e.printStackTrace();
}
}
public
static
void
main(String[] args)
throws
IOException {
pressImage(
"G:\\imgtest\\sy.jpg"
,
"G:\\imgtest\\test1.jpg"
,
0
,
0
,
0
.5f);
pressText(
"我是文字水印"
,
"G:\\imgtest\\test1.jpg"
,
"黑体"
,
36
, Color.white,
80
,
0
,
0
,
0
.3f);
resize(
"G:\\imgtest\\test1.jpg"
,
500
,
500
,
true
);
}
public
static
int
getLength(String text) {
int
length =
0
;
for
(
int
i =
0
; i < text.length(); i++) {
if
(
new
String(text.charAt(i) +
""
).getBytes().length >
1
) {
length +=
2
;
}
else
{
length +=
1
;
}
}
return
length /
2
;
}
}
import
java.awt.Color;
import
java.awt.Graphics;
import
java.awt.Graphics2D;
import
java.awt.Rectangle;
import
java.awt.RenderingHints;
import
java.awt.geom.AffineTransform;
import
java.awt.image.BufferedImage;
import
java.awt.image.ColorModel;
import
java.awt.image.WritableRaster;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
javax.imageio.ImageIO;
import
com.sun.image.codec.jpeg.JPEGCodec;
import
com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 图片工具类,完成图片的截取
*
* @author inc062977
*
*/
public
class
ImageHepler {
/**
* 实现图像的等比缩放
* @param source
* @param targetW
* @param targetH
* @return
*/
private
static
BufferedImage resize(BufferedImage source,
int
targetW,
int
targetH) {
// targetW,targetH分别表示目标长和宽
int
type = source.getType();
BufferedImage target =
null
;
double
sx = (
double
) targetW / source.getWidth();
double
sy = (
double
) targetH / source.getHeight();
// 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
// 则将下面的if else语句注释即可
if
(sx < sy) {
sx = sy;
targetW = (
int
) (sx * source.getWidth());
}
else
{
sy = sx;
targetH = (
int
) (sy * source.getHeight());
}
if
(type == BufferedImage.TYPE_CUSTOM) {
// handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
targetH);
boolean
alphaPremultiplied = cm.isAlphaPremultiplied();
target =
new
BufferedImage(cm, raster, alphaPremultiplied,
null
);
}
else
target =
new
BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
// smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return
target;
}
/**
* 实现图像的等比缩放和缩放后的截取
* @param inFilePath 要截取文件的路径
* @param outFilePath 截取后输出的路径
* @param width 要截取宽度
* @param hight 要截取的高度
* @param proportion
* @throws Exception
*/
public
static
void
saveImageAsJpg(String inFilePath, String outFilePath,
int
width,
int
hight,
boolean
proportion)
throws
Exception {
File file =
new
File(inFilePath);
InputStream in =
new
FileInputStream(file);
File saveFile =
new
File(outFilePath);
BufferedImage srcImage = ImageIO.read(in);
if
(width >
0
|| hight >
0
) {
// 原图的大小
int
sw = srcImage.getWidth();
int
sh = srcImage.getHeight();
// 如果原图像的大小小于要缩放的图像大小,直接将要缩放的图像复制过去
if
(sw > width && sh > hight) {
srcImage = resize(srcImage, width, hight);
}
else
{
String fileName = saveFile.getName();
String formatName = fileName.substring(fileName
.lastIndexOf(
'.'
) +
1
);
ImageIO.write(srcImage, formatName, saveFile);
return
;
}
}
// 缩放后的图像的宽和高
int
w = srcImage.getWidth();
int
h = srcImage.getHeight();
// 如果缩放后的图像和要求的图像宽度一样,就对缩放的图像的高度进行截取
if
(w == width) {
// 计算X轴坐标
int
x =
0
;
int
y = h /
2
- hight /
2
;
saveSubImage(srcImage,
new
Rectangle(x, y, width, hight), saveFile);
}
// 否则如果是缩放后的图像的高度和要求的图像高度一样,就对缩放后的图像的宽度进行截取
else
if
(h == hight) {
// 计算X轴坐标
int
x = w /
2
- width /
2
;
int
y =
0
;
saveSubImage(srcImage,
new
Rectangle(x, y, width, hight), saveFile);
}
in.close();
}
/**
* 实现缩放后的截图
* @param image 缩放后的图像
* @param subImageBounds 要截取的子图的范围
* @param subImageFile 要保存的文件
* @throws IOException
*/
private
static
void
saveSubImage(BufferedImage image,
Rectangle subImageBounds, File subImageFile)
throws
IOException {
if
(subImageBounds.x <
0
|| subImageBounds.y <
0
|| subImageBounds.width - subImageBounds.x > image.getWidth()
|| subImageBounds.height - subImageBounds.y > image.getHeight()) {
System.out.println(
"Bad subimage bounds"
);
return
;
}
BufferedImage subImage = image.getSubimage(subImageBounds.x,subImageBounds.y, subImageBounds.width, subImageBounds.height);
String fileName = subImageFile.getName();
String formatName = fileName.substring(fileName.lastIndexOf(
'.'
) +
1
);
ImageIO.write(subImage, formatName, subImageFile);
}
}
posted on 2010-11-20 12:26
礼物
阅读(1170)
评论(0)
编辑
收藏
所属分类:
java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
纯真IP数据库格式详解
java读取纯真IP数据库QQwry.dat的源代码
图片截取和缩略
spring任务调度方法之Quartz
使用JMeter进行性能测试
(原)Proxool 连接池
(原)Java 类访问 URI
(转载)应用架构设计“防火”经验分享
(转载)各种架构图汇总!
正则表达式30分钟入门教程
Powered by:
BlogJava
Copyright © 礼物