package cn.dyx.util;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.lxh.smart.File;
public class ImageUtils {
/**
* 保存带水印的图片
* @param f 要保存文件,类型必须是SmartUpload中的File类型
* @param realPath 保存的目录
* @param fileName 要保存的文件名
* @throws Exception
*/
public static void saveFileAddWater(File f, String realPath, String fileName)
throws Exception {
// 循环取得文件内容
byte[] data = new byte[f.getSize()];
for (int i = 0; i < f.getSize(); i++) {
data[i] = f.getBinaryData(i);
}
// 使用InputStream读入
InputStream is = new ByteArrayInputStream(data);
// 创建缓存图片
BufferedImage image = ImageIO.read(is);
// 取得画笔对象
Graphics g = image.getGraphics();
// 读取水印文件
String waterPath = realPath + "/water.jpg";
BufferedImage waterImg = ImageIO.read(new java.io.File(waterPath));
g.drawImage(waterImg, 0, 0, new javax.swing.JFrame());
ImageIO.write(image, f.getFileExt(), new java.io.File(realPath + "/"
+ fileName));
}
}
处理文件上传:
public void update(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 接收参数。
// 由于要进行文件操作,因此先初始化SmartUpload。
SmartUpload smart = new SmartUpload();
// 初始化
smart.initialize(super.getServletConfig(), request, response);
smart.upload();
// 取得参数以及文件
int empno = Integer.parseInt(smart.getRequest().getParameter("empno"));
String ename = smart.getRequest().getParameter("ename");
String job = smart.getRequest().getParameter("job");
int mgr = Integer.parseInt(smart.getRequest().getParameter("mgr"));
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date hiredate = sf.parse(smart.getRequest().getParameter("hiredate"));
double sal = Double.parseDouble(smart.getRequest().getParameter("sal"));
double comm = Double.parseDouble(smart.getRequest()
.getParameter("comm"));
int deptno = Integer
.parseInt(smart.getRequest().getParameter("deptno"));
Emp emp = new Emp();
emp.setComm(comm);
emp.setDeptno(deptno);
emp.setEmpno(empno);
emp.setEname(ename);
emp.setHiredate(hiredate);
emp.setJob(job);
emp.setMgr(mgr);
emp.setSal(sal);
// 处理文件上传
File f = smart.getFiles().getFile(0);
if (f != null && f.getSize() > 0) {
if (f.getContentType().trim().equals("image/pjpeg")
|| f.getContentType().trim().equals("image/gif")) {
// 取得真实路径
String path = request.getSession().getServletContext()
.getRealPath("/upload")
+ "/";
// 先删除原有文件
String oldName = smart.getRequest().getParameter("oldphoto");
java.io.File oldFile = new java.io.File(path + oldName);
if (oldFile.exists()) {
oldFile.delete();
}
// 传入新文件
String fileName = UUID.randomUUID().toString() + "."
+ f.getFileExt();
emp.setPhoto(fileName);
// 保存文件
// f.saveAs(path + fileName);
//处理带水印的文件保存
ImageUtils.saveFileAddWater(f, path, fileName) ;
}
} else {
// 如果没有传递文件,则还使用原有文件来显示
String oldName = request.getParameter("oldphoto");
if (!"".equals(oldName)) {
// 如果不是空值,将原有文件名设置到vo中。
emp.setPhoto(oldName);
}
}
boolean flag = ServiceFactory.getEmpServiceInstance().update(emp);
// 根据结果将提示信息传递到emp_insert.jsp上
if (flag) {
request.setAttribute("message", "雇员修改成功!");
request.setAttribute("path", "pages/EmpServlet?status=list");
} else {
request.setAttribute("message", "雇员修改失败,该雇员不存在,已经被删除!");
request.setAttribute("path", "pages/EmpServlet?status=list");
}
// 跳转
request.getRequestDispatcher("/pages/forward.jsp").forward(request,
response);
}