写了个缩微图的程序如下,我是先把要处理的图片裁切成要求的比例,然后再缩放.
可是裁切没问题,可是加上缩放就出错,哪位高手帮帮小弟!
谢谢了

private void getLittleImg(HttpServletRequest request, String fromdir,
String img) {
String ext = img.substring(img.length()-3);//后缀名
double littleH = 84.00;//生成图片的高
double littleW = 118.00;//生成图片的宽
double HWRatio = littleH/littleW;
double excRatio = 0.0;
File imgFile = new File(request.getSession().getServletContext().getRealPath("/")+ fromdir, img);
File excFile = new File(request.getSession().getServletContext().getRealPath("/") + fromdir + "/xImg", img);
try {
BufferedImage bi = ImageIO.read(imgFile);
double imgFileRatio = new Double(bi.getHeight())/new Double(bi.getWidth());
Image excImage = bi.getScaledInstance ((int)littleW,(int)littleH,Image.SCALE_SMOOTH);
excRatio = bi.getWidth()/littleW;
if(imgFileRatio<HWRatio){
int excFileWidth = (int) (littleW*bi.getHeight()/littleH);
int excFileY = (bi.getWidth()- excFileWidth)/2;
excImage = bi.getSubimage(excFileY,0,excFileWidth,bi.getHeight());
excRatio = excFileWidth/littleW;
}else if(imgFileRatio>HWRatio){
int excFileHeight = (int) (littleH*bi.getWidth()/littleW);
int excFileX = (bi.getHeight()- excFileHeight)/2;
excImage= bi.getSubimage(0,excFileX,bi.getWidth(),excFileHeight);
}
                        //以上使处理图片长宽比例符合生成图片要求,没有问题

excImage=excImage.getScaledInstance((int)littleW,(int)littleH,Image.SCALE_DEFAULT);//但这句想改大小却有问题 ImageIO.write((BufferedImage) excImage, ext, excFile);

} catch (Exception ex) {
log.error("上传图片生成缩微图失败", ex);
} }

解决方案 »

  1.   

    你这里一个裁减一个缩放都是同一个变量excImage,建议使用2个不同的变量试试看
      

  2.   


    2007-10-23 13:35:11,218 ERROR [org.apache.struts.actions.DispatchAction] - <上传图片生成缩微图失败>
    java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
    at com.sanfondo.web.admin.ProductAction.getLittleImg(ProductAction.java:212)
    at com.sanfondo.web.admin.ProductAction.onInitEntity(ProductAction.java:134)
    at com.sanfondo.web.admin.ProductAction.onInitEntity(ProductAction.java:1)
    at org.springside.core.web.StrutsEntityAction.initEntity(StrutsEntityAction.java:252)
    at com.sanfondo.web.admin.ProductAction.save(ProductAction.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
      

  3.   

    java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
    类型转换错误
    (BufferedImage) excImage你给这个image怎么直接转换成BufferedImage了,要重新给缩小的图片读入一个BufferedImage,然后才能写新图片
      

  4.   

    应该可以转换的呀,因为没有这句一切正常
    excImage=excImage.getScaledInstance((int)littleW,(int)littleH,Image.SCALE_DEFAULT[color=#FF0000]);
      

  5.   

    ProvidenceZY 如果不忙的话能不能写个我参考一下,谢谢了
      

  6.   

    记得那本厚厚的入门书,讲swing很多那本,高级篇那本,里面有实例