背景
使用 thumbnailator 生成 svg 类型图片的缩略图。
环境
thumbnailator 版本:0.4.13
原始图片类型:svg
错误信息
net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data.
at net.coobird.thumbnailator.tasks.io.InputStreamImageSource.read(Unknown Source) ~[thumbnailator-0.4.13.jar:0.4.13]
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source) ~[thumbnailator-0.4.13.jar:0.4.13]
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source) ~[thumbnailator-0.4.13.jar:0.4.13]
at net.coobird.thumbnailator.Thumbnails$Builder.toFile(Unknown Source) ~[thumbnailator-0.4.13.jar:0.4.13]
复制代码
官方解释
在 GitHub 的 Issues 的栏目下查询到相同的问题:SVG not supported #75
官方回答截取如下:
Thumbnailator relies on the Java Image I/O API to handle input/output of image
files.
As such, it is outside the scope of the Thumbnailator project to provide
support for specific image formats.
That said, since Thumbnailator relies on the Image I/O API, if you use a
library like TwelveMonkeys ImageIO (https://github.com/haraldk/TwelveMonkeys)
which provides support for additional image formats, you should be able to use
formats which are not supported by the stock Java distribution.
The TwelveMonkeys ImageIO library lists SVG as one of the supported input
formats.
复制代码
推荐使用TwelveMonkeys ,支持的图片格式如下显示第一个就是我们需要的 svg 格式,深入查看发现要想支持 svg 还必须引入 Batik 相关的依赖,而且只支持 svg 格式的读入不支持生成 svg 格式的图片。
引入第三方类库
Gradle
implementation group: 'com.twelvemonkeys.imageio', name: 'imageio-batik', version: '3.6.4'
implementation group: 'org.apache.xmlgraphics', name: 'batik-transcoder', version: '1.14'
复制代码
Maven
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-batik</artifactId>
<version>3.6.4</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.14</version>
</dependency>
复制代码
业务代码修改
由于不支持 svg 格式图片的写入操作,所以对于 svg 格式的图片缩放操作需要将缩放后的图片保存为其他格式的图片。比如判断 svg 后缀的图片特殊处理,将 thumbnailator 缩放后的图片格式保存为 jpg 类型的图片。
评论