`
woshixushigang
  • 浏览: 562446 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

thumbnailator 图片缩放问题

 
阅读更多

这段代码上传1.7m图片会报错:

 

 

public static final boolean scale(File sourceImage, File targetImage, double maxWidth, ImageCropVO cropVO) {
	    
	   targetImage.getParentFile().mkdirs();
		boolean result = false;
		try {
			int width = 0;
			int height = 0;
			//crop image
//			BufferedImage bufferImg = Thumbnails.of(sourceImage).scale(1.0).asBufferedImage();
			BufferedImage bufferImg = ImageIO.read(sourceImage);
			double rate = 0.0;
			int maxTmpWidth = bufferImg.getWidth();
			if (maxTmpWidth > maxWidth){
				rate = maxWidth/maxTmpWidth;
				//此处上传超过1.1m的图片可能报错java.lang.OutOfMemoryError
				Thumbnails.of(sourceImage).scale(rate).toFile(targetImage);
				
				width = (int)(bufferImg.getWidth()  * rate);
				height = (int)(bufferImg.getHeight()  * rate);
				cropVO.setTargetWidth(width);
				cropVO.setTargetHeight(height);
			}
//			int maxTmpLength = bufferImg.getWidth()> bufferImg.getHeight() ? bufferImg.getWidth(): bufferImg.getHeight();
//			if (maxTmpLength > maxLength){
//			    rate = maxLength/maxTmpLength;
//			    Thumbnails.of(sourceImage).scale(rate).toFile(targetImage);
//			    
//			    width = (int)(bufferImg.getWidth()  * rate);
//			    height = (int)(bufferImg.getHeight()  * rate);
//			    cropVO.setTargetWidth(width);
//			    cropVO.setTargetHeight(height);
//			}
			else{
			    String extention = FileHelper.getExtension(targetImage, "");
			    ImageIO.write(bufferImg, extention, targetImage);
				//sourceImage.renameTo(targetImage);
				width =bufferImg.getWidth();
				height =bufferImg.getHeight();
				
				cropVO.setTargetWidth(width);
				cropVO.setTargetHeight(height);
			}
			result = true;
		} catch (Exception e) {
			LogHelper.error("Exception to resize image", e);
		}
		return result;
	}
 

 

java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:42)
	at java.awt.image.Raster.createInterleavedRaster(Raster.java:253)
	at java.awt.image.BufferedImage.<init>(BufferedImage.java:368)
	at net.coobird.thumbnailator.resizers.ProgressiveBilinearResizer.resize(Unknown Source)
	at net.coobird.thumbnailator.resizers.Resizers.resize(Unknown Source)
	at net.coobird.thumbnailator.makers.ThumbnailMaker.makeThumbnail(Unknown Source)
	at net.coobird.thumbnailator.makers.ScaledThumbnailMaker.make(Unknown Source)
	at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
	at net.coobird.thumbnailator.Thumbnails$Builder.toFile(Unknown Source)
	at com.bitbao.common.lib.image.ImageHelper.scale(ImageHelper.java:73)
	at com.bitbao.cm.controller.web.AccountSettings.saveSelfStylePhoto(AccountSettings.java:822)
	at com.bitbao.cm.controller.web.AccountSettings.processSaveTempPoto(AccountSettings.java:757)
	at com.bitbao.cm.controller.web.AccountSettings.saveTempPhoto(AccountSettings.java:727)
	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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:185)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:502)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:465)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:863)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:851)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:767)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)

 

查明原因之后发现,原来设置的-Xmx 不够大,总感觉thumbnail 性能方面不行。有搞过图片缩放的高手们指点下,有没有好的方式或者别的插件?

 

分享到:
评论

相关推荐

    thumbnailator图片处理 jar.rar

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三...支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。

    thumbnailator

    Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。...支持:图片缩放,区域裁剪,水印,旋转,保持比例。 非常好用,简单!

    图片压缩类 thumbnailator-0.4.8.jar

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例

    利用Thumbnailator轻松实现图片缩放、旋转与加水印

    JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,这篇文章主要介绍了利用Thumbnailator如何轻松的实现图片缩放、旋转与加水印,...

    图片压缩 thumbnailator

    功能强大的图片压缩工具类。支持比例缩放,指定大小进行缩放,旋转,水印,裁剪,转化图像格式等。

    Thumbnailator 0.4.8.jar

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成...有了它我们就不用在费心思使用Image I/O API,Java 2D API等等来生成缩略图了,它支持图片缩放,区域裁剪,水印,旋转,保持比例等等

    java图片压缩文件大小thumbnailator-0.4.8.jar.zip

    java图片压缩文件thumbnailator-0.4.8.jar.zip Thumbnailator是一个用来对图像...有了它我们就不用在费心思使用Image I/O API,Java 2D API等等来生成缩略图了,它支持图片缩放,区域裁剪,水印,旋转,保持比例等等。

    Java处理图片(压缩,放大,缩小)

    Java thumbnailator 处理图片(压缩,放大,缩小)

    thumbnailator-0.4.8.jar

    Java图片处理 Thumbnails框架 一、设置图片的缩放比例或者图片的质量比 二、获取图片的信息

    Thumbnailator必需jar包及api

    java第三方图片操作库,可以用来添加图片水印、旋转图片、按比例缩放缩放图片等。(内附api地址)

    java图片处理类demo

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。运用最少的代码实现你想要的功能,支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例等,支持对一个目录的所有图片进行批量处理操作

    使用Thumbnails实现图片指定大小压缩

    比如:宽高(size),缩放(scale),制定质量比(outputQuality)等。 插件使用的jar包为: thumbnailator-0.4.8.jar 代码如下: /** * * @param srcPath 原图片地址 * @param desPath 目标图片地

Global site tag (gtag.js) - Google Analytics