Thumbnailator处理图片踩坑 No suitable ImageReader found for /**/**/pic.jpg Macbook
Thumbnailator 是一个优秀的图片处理的 Google 开源 Java 类库。处理效果远比 Java API 的好。但是在使用一个如此容易上手的工具库的过程中,也会猜中意向不到的坑。以下分享耗我半天时间才跳出来的坑。我的设备是 MacBook Pro,能出现这种情况可能也跟我所使用的设备有关。首先我要找个图片作为测试用途,那我用哪里的图片呢?我选择了当时最为顺手的从 Macbook 的备
Thumbnailator 是一个优秀的图片处理的 Google 开源 Java 类库。处理效果远比 Java API 的好。但是在使用一个如此容易上手的工具库的过程中,也会踩中意向不到的坑。以下分享耗我半天时间才跳出来的坑。
我的设备是 MacBook Pro,能出现这种情况可能也跟我所使用的设备有关。
首先我要找个图片作为测试用途,那我用哪里的图片呢?我选择了当时最为顺手的从 Macbook 的备忘录里边拷贝一张图片以作使用,将该图片粘贴在一文件夹中。当我粘贴到文件夹中的时候是这样的
我尝试将后缀改成普通图片格式.jpg
发现图片依然神奇得能正常显示并且正常打开。好了,这时候也没有过多的考虑,接下来就来编写 java 代码。
以下是我代码片段,参照其他博主的帖子,Thumbnailator 的使用只需要以下简单的代码:
public static void main(String[] args) {
String path = "/图片存放路径/pic.jpg"; //定义图片输出路径
String opath = "/图片存放路径/pic_cp.jpg"; //定于图片输出路径
try { //要求使用错误捕捉机制
//将path的图片等比例缩放到最大宽900或高900,输出到opath
Thumbnails.of(path).size(900, 900).toFile(opath);
} catch (Exception e) {
e.printStackTrace();
}
}
但是运行之后出现了报错,No suitable ImageReader found for /图片存放路径/pic.jpg.
2021-**-** 09:19:29,627 [main] ERROR util.ThumbnailsUtil.main(ThumbnailsUtil.java:14) - thumbnailImage.error
net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for /图片存放路径/pic.jpg.
at net.coobird.thumbnailator.tasks.io.FileImageSource.read(Unknown Source)
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source)
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
at net.coobird.thumbnailator.Thumbnails$Builder.toFile(Unknown Source)
at com.trendy.ow.console.article.util.ThumbnailsUtil.main(ThumbnailsUtil.java:14)
翻译过来中文就是“找不到适用于的图片阅读器”,也就是说 Thumbnailator 找到了这个文件,但是并不能读取到图片。此时,回想到在学习编写该代码的过程中,也看见过其他博主的文章中有使用 InputStream 输入流输入到 Thumbnailator 中,会不会是我的输入方式的问题呢?好吧我再试试:
public static void main(String[] args) {
String path = "/图片存放路径/pic.jpg"; //定义图片输出路径
String opath = "/图片存放路径/pic_cp.jpg"; //定于图片输出路径
try { //要求使用错误捕捉机制
//使用文件输入流 FileInputStream 读取图片
FileInputStream fileInputStream = new FileInputStream(path);
//将fileInputStream的图片等比例缩放到最大宽900或高900,输出到opath
Thumbnails.of(fileInputStream).size(900, 900).toFile(opath);
} catch (Exception e) {
e.printStackTrace();
}
}
此时,报错的内容稍微有所变动,变成了 No suitable ImageReader found for source data.
net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data.
at net.coobird.thumbnailator.tasks.io.InputStreamImageSource.read(Unknown Source)
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source)
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
at net.coobird.thumbnailator.Thumbnails$Builder.toFile(Unknown Source)
at com.trendy.ow.console.article.util.ThumbnailsUtil.main(ThumbnailsUtil.java:14)
然后就这个问题,翻完了当时为数不多关于这两个报错的技术博客,都还是找不到答案。再当我将一切东西重新开始,图片使用微信新发过来的其他图片,问题就解决了。
总结
该报错主要跟图片的格式有关。图片的格式并不单纯指的是文件的后缀,而是图片实际上的组织格式。Thumbnailator 能够正常处理 jpg、jpeg、png 等常用格式的图片。
在 MacBook 中,备忘录将图片的格式都转化为了 .tiff 格式,此时可能是一种经过备忘录转化过的图片格式,具体这种格式是什么可以自行跳转到 百度百科 看看。此时的 .tiff 强行改后缀变成 .jpg 后,Thumbnailator 里没有 .tiff 的阅读器,固出现这样的报错。
在之后的使用发现,没有必要使用输入流的格式输入图片,此时更容易产生 No suitable ImageReader found for source data 报错。在输入时直接指向图片路径即可。
更多推荐
所有评论(0)