【发布时间】:2020-07-11 17:49:53
【问题描述】:
我正在使用javax.imageio.ImageIO.read(),读取大小为 5 mb 且位于 windows 临时位置的图像几乎需要 9 秒,PFB 是 Jprofiler 的屏幕截图。我想要一种更有效的方法,可以将时间减少到至少 2-3 秒。
该文件以 org.springframework.web.multipart.MultipartFile 请求的形式通过 rest 端点发送,然后被复制到 windows 临时位置以进行进一步处理。完整的代码块:
String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename());
Path destinationPath = Paths.get(System.getProperty("java.io.tmpdir"));
String tempPath = destinationPath.resolve(fileName).toString();
File uploadedImageFile = new File(tempPath);
File originalFileInTempLocation = file.transferTo(uploadedImageFile);
BufferedImage originalImage = ImageIO.read(originalFileInTempLocation);
在谷歌搜索时,我发现了一个声称比javax.imageio.ImageIO 更高效的第三方库,但它是付费的:https://files.idrsolutions.com/maven/site/jdeli/apidocs/com/idrsolutions/image/JDeli.html#read(java.io.File)。
谁能推荐一种更好更有效的读取图像文件的方法。
【问题讨论】:
-
请显示如何您正在加载图像。此外,询问图书馆建议是题外话。
-
您能否发布一个图片链接,以便我查看在我的机器上加载需要多长时间?
-
@Cascader 我需要使用
java.awt.Graphics2D调整这些图像的大小。我有一堆 6-7 张图片,每张图片都将调整为 2 种变体。第一个变体是 350*300(用于缩略图),另一个变体是 100*100。然后将两个图像变体存储到 aws s3。我已经准备好了,但唯一担心的是图像处理(尤其是ImageIO.read)需要超过 10 秒,这是我们无法承受的。 -
(1-) 你昨天问了这个问题以及问到哪里 1) 发布你的 minimal reproducible example 来展示问题和 2) 获取图片链接。你重复了同样的问题,没有提供任何额外的信息。您的问题是关于 ImageIO,因此仅使用 ImageIO 创建一个示例。您发布的额外代码与 ImageIO 无关,我猜这才是真正的问题所在。
-
感谢您提出的所有宝贵建议。我尝试了你们提供的所有解决方案。我没有使用 imageIO,而是使用
Image image = new ImageIcon(file.getAbsolutePath()).getImage();进行文件读取,并且将时间减少了近一半。
标签: java javax.imageio