首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

贴一个生成缩略图的种

2012-12-28 
贴一个生成缩略图的类public?class?ImageEncoder?{?????????public?BufferedImage?resize(BufferedImage?s

贴一个生成缩略图的类

  1. public?class?ImageEncoder?{?????????public?BufferedImage?resize(BufferedImage?source,?int?targetW,??
  2. ????????????int?targetH)?{??????????//?长和宽 ??
  3. ????????int?type?=?source.getType();??????????BufferedImage?target?=?null;??
  4. ????????double?sx?=?(double)?targetW?/?source.getWidth();??????????double?sy?=?(double)?targetH?/?source.getHeight();??
  5. ????????//?等比缩放 ??????????if?(sx?>?sy)?{??
  6. ????????????sx?=?sy;??????????????targetW?=?(int)?(sx?*?source.getWidth());??
  7. ????????}?else?{??????????????sy?=?sx;??
  8. ????????????targetH?=?(int)?(sy?*?source.getHeight());??????????}??
  9. ????????if?(type?==?BufferedImage.TYPE_CUSTOM)?{???????????????ColorModel?cm?=?source.getColorModel();??
  10. ????????????WritableRaster?raster?=?cm.createCompatibleWritableRaster(targetW,targetH);??????????????boolean?alphaPremultiplied?=?cm.isAlphaPremultiplied();??
  11. ????????????target?=?new?BufferedImage(cm,?raster,?alphaPremultiplied,?null);??????????}?else{??
  12. ????????????target?=?new?BufferedImage(targetW,?targetH,?type);??????????}??
  13. ????????Graphics2D?g?=?target.createGraphics();??????????//?开始画图 ??
  14. ????????g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);??????????g.drawRenderedImage(source,?AffineTransform.getScaleInstance(sx,?sy));??
  15. ????????g.dispose();??????????return?target;??
  16. ????}???????????
  17. ????public?BufferedImage?getBufferedImage(String?image,int?width,int?height){??????????try?{??
  18. ????????????BufferedImage?srcImage?=?ImageIO.read(new?File(image));??????????????if?(width?>?0?||?height?>?0)?{??
  19. ????????????????srcImage?=?resize(srcImage,?width,?height);??????????????}??
  20. ????????????return?srcImage;??????????}?catch?(IOException?e)?{??
  21. ????????????e.printStackTrace();??????????}??
  22. ????????return?null;??????}??
  23. }??

?

?

?

Servlet中使用实例:(/ImageProc)

?

view plaincopy to clipboardprint?
  1. protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)???????????throws?ServletException,?IOException?{??
  2. ????????synchronized?(this)?{??????????????String?img?=?request.getParameter("img");??
  3. ????????????int?width?=?Integer.parseInt(request.getParameter("width"));??????????????int?height?=?Integer.parseInt(request.getParameter("height"));??
  4. ????????????BufferedImage?bi?=?ie.getBufferedImage(img,?width,?height);??????????????ServletOutputStream?sos?=?response.getOutputStream();??
  5. ????????????ImageIO.write(bi,?"jpg",?sos);??????????}??
  6. ????}??

?

JSP页面使用<img/>标签指定src为这个servlet的urlparttern就可以了

?

<img src="<%=contextPath%>/ImageProc?img=D:/DEMO.jpg&width=160&height=200"/>

热点排行