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);
}