首页 > 编程语言 >Java图片压缩遇到 "No suitable ImageReader found for source data."

Java图片压缩遇到 "No suitable ImageReader found for source data."

时间:2023-10-25 11:36:00浏览次数:45  
标签:Java No Unknown thumbnailator byteArrayInputStream ImageReader coobird net 图片

 问题:

  使用压缩工具的时候突然遇到 图片压缩失败的情况。此时检查一下要上传的图片是否正常。

处理方式:

  检查图片数据是否异常,一个图片五六兆。图片虽然是JPG结尾的,但是不在 ImageIO” 类的支持范围内。例如 WebP 图片虽然可以以JPG格式结尾,但是  ImageIO” 类不支持方法解析

代码如下

 1       URL url = new URL("https:/***/1696905412973.jpg");
 3         ByteArrayInputStream byteArrayInputStream = null;
 4         try {
 5             byteArrayInputStream = new ByteArrayInputStream(url.getFile().getBytes());
 6             Thumbnails.of(byteArrayInputStream).scale(0.5f).outputQuality(0.5f).toFile("E:\\tmp\\1.jpg");
 7         } catch (IOException e) {
 8             e.printStackTrace();
 9              FileOutputStream out = new FileOutputStream(new File("E:\\tmp\\2.jpg"));
10             // Thumbnails.of(url.openStream()).size(300,300).toOutputStream(out);
11             InputStream inputStream = url.openStream();
12             IoUtil.copy(inputStream,out);
13         }finally {
14             if (byteArrayInputStream != null){
15                 byteArrayInputStream.close();
16             }
17         }

代码一直走catch里面的逻辑

1 Exception in thread "main" net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data.
2     at net.coobird.thumbnailator.tasks.io.InputStreamImageSource.read(Unknown Source)
3     at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source)
4     at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
5     at net.coobird.thumbnailator.Thumbnails$Builder.toOutputStream(Unknown Source)

在跟踪详细代码的时候发现数据流解析使用的是  ImageIO”

 正常的截图数据  var2.hasNext() 是不为空的

图片格式异常的话你将文件流再怎么转也是过不去的。

标签:Java,No,Unknown,thumbnailator,byteArrayInputStream,ImageReader,coobird,net,图片
From: https://www.cnblogs.com/zhuguangzhe/p/17785284.html

相关文章

  • 一文学会手动配置CANoe VLAN
    随着汽车智能化发展,车内通信带宽需求日益增长,车载以太网逐渐成为车内骨干网络。为了实现更彻底的域间功能解绑,提升信息处理效率,提升网络安全等目的,VLAN被广泛应用在车载以太网通信领域。 VLAN能够将一个物理网络拆分为多个逻辑网络,域内无缝通信,域间相互隔离。交换机或网络通信......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(二)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务在上文中,我们为大家介绍了如何用JPA和SpringFacets创建一个Java......
  • Jenkins配置java和vue构建环境
    jdk,maven,node,localtime等配置可通过挂载的方式进行配置前提条件是虚拟机中已配置好jdk,maven,node等环境注意自己虚拟机相关环境配置的路径以下样例为我自己的虚拟机中的配置路径-v宿主机(虚拟机)路径:容器路径dockerrun--namejenkins-p28081:8080-p50000:50000-v/v......
  • Java双端队列Deque简述
    概述​ Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。​ Deque是一个线性collection,支持在两端插入和移除元素。名称deque是“doubleendedqueue(双端队列)”的缩写,通常读为“deck”。大多数......
  • 简单了解一下:Node的util工具模块
    了解util模块,知道怎么使用util来格式化字符串,把对象转化为字符串,检查对象类型。那么util模块有哪些方法呢?如下图所示:常用的几个方法:格式化输出字符串util提供的格式化方法为:format(),语法如下:util.format(format,[...])format参数,是包含0个或者多个占位符的字符串,每一个占位符是......
  • 在Java中,如果一个日期是字符串类型的"2023-01",怎样获取前一个月
    在Java中,如果一个日期是字符串类型的"2023-01",你可以使用java.time包中的类来处理日期。以下是一个示例代码,演示如何获取前一个月的字符串类型的月份:importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassMain{publicstaticvoidmain(St......
  • 使用Java 8的Stream API来对集合中的数据根据id去重并且同一个id只取符合条件的那一个
    `ListdataList=newArrayList<>();dataList.add(newData(1,"A"));dataList.add(newData(2,"B"));dataList.add(newData(1,"C"));dataList.add(newData(3,"D"));Map<Integer,Data>filteredMap=d......
  • java加密解密
    packagecom.pg;importcom.pg.utils.CommonUtils;importcom.sun.org.apache.xerces.internal.impl.dv.util.Base64;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuch......
  • 合并两个有序数组(JAVA)
    题外话在我个人的思路视角里,遇到这种排序问题总是会在脑子里产生一些画面感。让我将这些问题奔着一种奇妙的思路而去,也就是在我脑子里很简答,但难以在代码上复现,我觉得从本我的角度讲我也许天生不适合当一个高级程序员hhhh,但!我命由我不由天!题解题目给你两个按非递减顺序排列......
  • Java文件上传方式
    Java实现文件上传的方式有以下几种:1.通过JavaServlet实现文件上传:在Servlet中,可以通过HttpServletRequest对象的getPart()方法获取文件的Part对象,然后通过Part对象的write()方法将文件写入服务器。2.使用ApacheCommonsFileUpload库:这个库提供了一个简单的API,可以轻松地将文件......