【发布时间】:2014-09-20 06:12:05
【问题描述】:
以下是我的问题的详细信息:
问题:我正在使用 RestEasy 从 Multipart Form InputStream 上传调整大小的缩略图。输入到 Scalr.resize 的 BufferedImage 对象返回 NULL 值。在下面的代码中,BufferedImage img 始终为 NULL。
你能帮我弄清楚我怎样才能做到这一点。
我的代码片段:
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
import org.jboss.resteasy.plugins.providers.IIOImageProviderHelper;
import org.neo4j.graphdb.GraphDatabaseService;
import com.kryptonite.aws.AWSHelper;
import com.kryptonite.utils.DAO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import org.imgscalr.Scalr;
:
:
:
:
@POST
@Consumes( MediaType.MULTIPART_FORM_DATA )
public String uploadImage(@MultipartForm InputStream image) throws IOException {
BufferedImage img = ImageIO.read(image);
BufferedImage thumbnail = Scalr.resize(img,Scalr.Method.AUTOMATIC, Scalr.Mode.FIT_TO_WIDTH,150, 100, Scalr.OP_ANTIALIAS);
thumbnail.createGraphics().drawImage(thumbnail, 0, 0, null);
ImageIO.write(thumbnail, "jpg", new File("/temp/test.jpg"));
return key;
}
【问题讨论】:
-
查看您的导入,似乎您的代码一次做的事情太多了。尝试将问题分解为更小的、可修复的问题,并一次解决一个问题。就像,不要读取图像缩放等,而是尝试将该输入流直接写入磁盘。尝试在外部程序中打开文件。验证您提供给
ImageIO.read()的数据是否为有效图像。 -
额外提示:
thumbnail.createGraphics().drawImage(thumbnail, 0, 0, null);行是 a) 多余的(为什么要在自身上绘制图像?),b) 资源泄漏,因为没有对Graphics.dispose()的匹配调用。
标签: image upload resize bufferedimage resteasy