一、问题描述

今天收到一个bug就是imageio读取图片会返回null,具体如下

但是其他的图片就没有问题

二、问题分析

结合百度发现这张图片原本的后缀并非是jpg,使用notpard++打开就可以发现

好家伙是webp格式的!!!!

WebP是google开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。是现代图像格式,提供了优越的无损和有损压缩的图片在网络上。使用WebP,网站管理员和web开发人员可以创建更小、更丰富的图像,使网页更快。

WebP无损的png图像小26%。WebP有损图像是25 - 34%小于等效SSIM质量指数可比JPEG图像

无损WebP支持透明(也称为alpha通道)的成本只有22%额外的字节。对有损压缩RGB压缩情况下是可以接受的,有损WebP还支持透明度,通常提供3×PNG相比较小的文件大小。

但是!!!由于Webp格式推出比较晚, Jdk 内置的图片编解码库对此并不支持。我只需要知道如何把webp格式转换成jpg或者其他格式就可以了!!!

三、解决问题

1、在百度找到一个api(地址如下)

我是地址

友情建议,最好用0.1.0哪个版本的其他版本试了都有问题~~~~~~

2、由于这个项目并未发布到maven中央仓库,所以需要手动导入本地jar包.

(1)、maven导包

<dependency>
<groupId>com.github.nintha</groupId>
<artifactId>webp-imageio-core</artifactId>
<version>{versoin}</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/webp-imageio-core-{version}.jar</systemPath>
</dependency>

(2)、gradle导包

dependencies {
compile fileTree(dir:'src/main/resources/libs',include:['*.jar'])
}

当然了,你想放在自己仓库中也是无可厚非的

3、上代码

(1)、Webp编码

public static void main(String args[]) throws IOException {
String inputPngPath = "test_pic/test.png";
String inputJpgPath = "test_pic/test.jpg";
String outputWebpPath = "test_pic/test_.webp"; // Obtain an image to encode from somewhere
BufferedImage image = ImageIO.read(new File(inputJpgPath)); // Obtain a WebP ImageWriter instance
ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next(); // Configure encoding parameters
WebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());
writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT); // Configure the output on the ImageWriter
writer.setOutput(new FileImageOutputStream(new File(outputWebpPath))); // Encode
writer.write(null, new IIOImage(image, null, null), writeParam);
}

(2)、Webp解码

public static void main(String args[]) throws IOException {
ImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next(); WebPReadParam readParam = new WebPReadParam();
readParam.setBypassFiltering(true); // Configure the input on the ImageReader
reader.setInput(new FileImageInputStream(new File(webp图片地址))); // Decode the image
BufferedImage image = reader.read(0, readParam); ImageIO.write(image, "jpg", new File(输出jpg的地址,png什么的也可以));
}

搞完收工!

ImageIo.read 返回null的更多相关文章

  1. json_decode返回NULL

    最近在调用某公司的API时,将对方返回的数据,使用PHP的json_decode函数解析,但是返回NULL,最终排查为对方传送来的json格式有误 打印$_REQUEST,数据结构大致如下: arra ...

  2. $.parseJson 在 firefox 下返回 null 的问题

    最近调查一个浏览器兼容性问题,在 IE, chrome下都运行正常,但是在 firefox 下运行时: $.parseJson(xxx) 返回 null,所以导致了 无法正常运行,调查的结果是因为 返 ...

  3. Type.GetType()反射另外项目中的类时返回null的解决方法

    项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...

  4. findViewById返回null

    Q:findViewById返回null? A: 代码逻辑错误: 最终,发现错误竟然是在layout文件中把android:id写成了android:name. android:name=" ...

  5. Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结

    最近公司要开发android 所以研究了一下Xamarin  to android 中个GPS 废话不多说,说重点. 想获取手机上的gps信息必不可少的就是要使用 LocationManager Lo ...

  6. c#泛型方法返回null的问题

    c#的泛型方法实现和java实现有点不同,在java中,所有的泛型方法运行时类型必须是引用类型,所以和非泛型一样可以返回null. 但是c#中有点不同,可以同时是值类型和引用类型,而值类型不能赋值nu ...

  7. Flash的坑之ExternalInterface.call只返回null值的解决办法

    flash坑太多了,要确保能有效的使用ExternalInterface.call调用js的话,需要两个条件: 1.allowScriptAccess="always" 2.id= ...

  8. C#操作xml SelectNodes,SelectSingleNode总是返回NULL 与 xPath 介绍

    一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <mes ...

  9. php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL

    今天遇到一个问题,json_decode解析json数据返回null,试了各种方法都不行,最后发现,原来是json文件编码的问题. 当json_decode解析utf-8带BOM格式的json数据时, ...

随机推荐

  1. upx 手动脱壳

    查壳 UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo upx这类压缩壳手动脱壳非常简单. 一.查找oep ...

  2. 攻防世界 reverse EasyRE

    EasyRE 主函数 int sub_401080() { unsigned int lens; // kr00_4 signed int i; // edx char *v2; // esi cha ...

  3. PTA 将数组中的数逆序存放

    7-1 将数组中的数逆序存放 (20 分)   本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素. 输入格式: 输入在第一行中给出一个正整数n(1). ...

  4. 记录给树莓派刷Raspberry Pi OS(Raspbian)系统的配置流程

    准备材料 树莓派(一定要贴散热片,最好再加个小风扇) TF内存卡 (记得选传输规范为Class10标准的) 读卡器 电脑(这里我使用的电脑是Windows系统,其它系统可能与下面的步骤有出入,还望悉知 ...

  5. Apache SkyWalking 告警配置指南

    Apache SkyWalking Apache SkyWalking是分布式系统的应用程序性能监视工具(Application Performance Management,APM),专为微服务.云 ...

  6. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.2 基本交流建模方法

    7.2 基本交流建模方法 在本节中,PWM变换器的交流小信号模型导出步骤将被推导和解释.关键步骤是:(a)利用小纹波近似的动态版本,建立了与电感和电容波形的低频平均值相关的方程式,(b)平均方程的扰动 ...

  7. Java中注释的形式

    单行注释 单行注释 // #双斜杠 快捷键:Ctrl + / 多行注释 多行注释 /* */ #单斜杠星号 星号单斜杠 快捷键:Ctrl + shift + / 文档注释 多行注释 /** */ #单 ...

  8. python进阶(7)--文件与异常

    一.文件读取二.文件写入三.异常四.存储数据 ---------------------------------------分割线:正文-------------------------------- ...

  9. SpringBoot 使用逆向工程 构建Mapper.xml Dao层(持久层) 实体类

    逆向工程 注: 有数据库表即可 第一步为创建数据库表 (可选)使用PowerDesigner设计数据库表,物理模型构建 添加pom.xml 逆向工程生成代码插件 <!--plugin 逆向工程生 ...

  10. 解决IDEA Gradle构建报错"Cause: zip END header not found"

    1 问题描述 某天使用Gradle构建项目时,IDEA报错如下: 2 原因 原因是下载的Gradle,也就是zip压缩包不完整,导致无法使用Gradle构建. 3 解决方法 3.1 删除本地缓存重新下 ...