`
woshixushigang
  • 浏览: 577975 次
  • 性别: 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图片管理工具** thumbnailator是一款开源的Java库,专为处理图像文件而设计,尤其是用于创建缩略图。它的主要功能是提供一个简单、高效且灵活的API,使得开发者能够快速地对图片进行裁剪、缩放、...

    Thumbnailator图片压缩Demo以及jar包

    在这个"Thumbnailator图片压缩Demo以及jar包"中,包含的主要内容是thumbnailator-0.4.8.jar库文件和一个示例代码ThumbnailatorDemo.java。 thumbnailator-0.4.8.jar是Thumbnailator库的核心组件,包含了所有用于...

    图片压缩 thumbnailator

    1. **图片缩放**:thumbnailator 提供了按比例缩放图片的功能。你可以通过设定一个比例因子或者目标宽度和高度来调整图片的大小。这在需要快速减少图片大小,例如创建网站缩略图时非常有用。 2. **指定大小缩放**:...

    thumbnailator

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

    thumbnailator图片处理包JAVA

    "thumbnailator图片处理包JAVA"是一个专门为Java开发者设计的库,用于方便地创建、修改和转换图像,尤其是生成缩略图。thumbnailator以其高效、易用和灵活性著称,是许多Java项目中处理图像需求的理想选择。这个...

    Java开源图片框架thumbnailator-0.4.8.jar

    thumbnailator不仅支持基本的缩放操作,还具备旋转、裁剪、添加水印等高级功能,极大地丰富了Java图片处理的能力。 **核心功能与特性:** 1. **缩略图生成**:thumbnailator的核心功能是生成缩略图,它能快速地将...

    图片压缩类 thumbnailator-0.4.8.jar

    首先,图片缩放是Thumbnailator的核心功能。该库提供了一种直观的方式来调整图片的大小,无论是简单的按比例缩放,还是指定新的宽度和高度,Thumbnailator都能轻松应对。它使用了高效的算法,确保在不失真的情况下...

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

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

    跟大海学图片处理Thumbnailator(二)

    在本篇博文中,作者将深入讲解如何通过Thumbnailator实现高效的图片缩放、裁剪和其他变换操作。 1. **Thumbnailator简介** Thumbnailator库是由Niklas Thörne开发的,其设计目标是提供一个轻量级、易于使用的图片...

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

    Thumbnailator 是一个强大的 Java 图片处理库,专为简化图片缩放、旋转和添加水印等操作而设计。相比 JDK 中内置的图像处理工具类,Thumbnailator 提供了更为直观和简洁的 API,使得开发者能更高效地进行图片处理...

    thumbnailator所需jar包.zip

    除了基本的缩放功能,thumbnailator还提供了丰富的选项,如保持原图宽高比、指定缩放算法、添加边框、改变色彩模式等。此外,它还可以直接读取和写入输入/输出流,这对于处理大文件或者在网络上传输数据时非常有用。...

    thumbnailator-0.4.8 图片压缩工具类及调用方法

    `thumbnailator`通过抛出`IOException`和`IllegalArgumentException`来处理这些问题,需要在调用时进行适当的异常捕获。 8. **内存管理**: `thumbnailator`在内存使用方面进行了优化,尽可能减少内存占用,特别是...

    thumbnailator jar包

    同时,thumbnailator支持内存管理和流处理,这意味着它可以在不完全加载整个图像到内存的情况下进行处理,有效避免了因大图片导致的内存溢出问题。 除了基本的缩略图生成,thumbnailator还支持更复杂的图像操作,如...

    google图片处理工具thumbnailator-0.4.8.jar

    在IT行业中,处理图片是一项常见的任务,无论是网站、应用程序还是各种多媒体项目,都需要对图片进行各种操作,如缩放、裁剪、旋转等。在这个领域,thumbnailator是一个备受青睐的Java库,它提供了简单易用的API,...

    Thumbnailator必需jar包及api

    这段代码会将名为"input.jpg"的图片缩放到100x100像素,并保存为"output.jpg"。 - **旋转图片**: ```java Thumbnails.of("input.jpg") .rotate(90) .toFile("output.jpg"); ``` 这将按顺时针90度旋转输入图片并...

    thumbnailator-0.4.8.zip

    "thumbnailator-0.4.8.zip" 是一个包含图片压缩功能的Java应用程序库,主要用于处理和生成缩略图。这个压缩包的核心是 "thumbnailator-0.4.8.jar" 文件,它是一个JAR(Java Archive)文件,集成了Thumbnailator库的...

    thumbnailator-0.4.7

    在描述中提到,Thumbnailator不仅支持单个图片的缩略图生成,还具备批量处理的能力。这意味着你可以一次性处理一个目录下的所有图片,这对于需要大量处理图像的项目而言非常实用。例如,在构建一个图片分享网站或者...

    servlet文件上传(含图片缩放功能)

    下面是一个简单的图片缩放示例,使用`thumbnailator`库: ```java import net.coobird.thumbnailator.Thumbnails; // ... public void resizeImage(String filePath, int width, int height) { try { ...

Global site tag (gtag.js) - Google Analytics