贴一个生成缩略图的种
贴一个生成缩略图的类public?class?ImageEncoder?{?????????public?BufferedImage?resize(BufferedImage?s
贴一个生成缩略图的类
- public?class?ImageEncoder?{?????????public?BufferedImage?resize(BufferedImage?source,?int?targetW,??
- ????????????int?targetH)?{??????????//?长和宽 ??
- ????????int?type?=?source.getType();??????????BufferedImage?target?=?null;??
- ????????double?sx?=?(double)?targetW?/?source.getWidth();??????????double?sy?=?(double)?targetH?/?source.getHeight();??
- ????????//?等比缩放 ??????????if?(sx?>?sy)?{??
- ????????????sx?=?sy;??????????????targetW?=?(int)?(sx?*?source.getWidth());??
- ????????}?else?{??????????????sy?=?sx;??
- ????????????targetH?=?(int)?(sy?*?source.getHeight());??????????}??
- ????????if?(type?==?BufferedImage.TYPE_CUSTOM)?{???????????????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();??????????//?开始画图 ??
- ????????g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);??????????g.drawRenderedImage(source,?AffineTransform.getScaleInstance(sx,?sy));??
- ????????g.dispose();??????????return?target;??
- ????}???????????
- ????public?BufferedImage?getBufferedImage(String?image,int?width,int?height){??????????try?{??
- ????????????BufferedImage?srcImage?=?ImageIO.read(new?File(image));??????????????if?(width?>?0?||?height?>?0)?{??
- ????????????????srcImage?=?resize(srcImage,?width,?height);??????????????}??
- ????????????return?srcImage;??????????}?catch?(IOException?e)?{??
- ????????????e.printStackTrace();??????????}??
- ????????return?null;??????}??
- }??
?
?
?
Servlet中使用实例:(/ImageProc)
?
view plaincopy to clipboardprint?
- protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)???????????throws?ServletException,?IOException?{??
- ????????synchronized?(this)?{??????????????String?img?=?request.getParameter("img");??
- ????????????int?width?=?Integer.parseInt(request.getParameter("width"));??????????????int?height?=?Integer.parseInt(request.getParameter("height"));??
- ????????????BufferedImage?bi?=?ie.getBufferedImage(img,?width,?height);??????????????ServletOutputStream?sos?=?response.getOutputStream();??
- ????????????ImageIO.write(bi,?"jpg",?sos);??????????}??
- ????}??
?
JSP页面使用<img/>标签指定src为这个servlet的urlparttern就可以了
?
<img src="<%=contextPath%>/ImageProc?img=D:/DEMO.jpg&width=160&height=200"/>