Thumbnails在下载个别图片的时候报上面的错误,根据提示猜测是图片格式问题。经查看网上相关资料,发现是因为个别图片格式是CMYK导致的。java的api无法解析cmyk格式的图片,只能解析rgb格式的。所以需要将cmyk格式的图片转成rgb格式的。代码如下:

import javax.imageio.IIOException;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.color.ColorSpace;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;/*** @project: cunkongjian* @description: CMYK格式图片转RGB格式图片的处理,因为Thumbnails无法处理CMYK格式图片* @author: zhaoyujie* @create: 2019-03-04 17:17*/
public class CMYKUtil {public static BufferedImage readImage(File file) throws IOException {return readImage(ImageIO.createImageInputStream(file));}public static BufferedImage readImage(InputStream stream) throws IOException {return readImage(ImageIO.createImageInputStream(stream));}public static BufferedImage readImage(ImageInputStream input) throws IOException {Iterator<?> readers = ImageIO.getImageReaders(input);if (readers == null || !readers.hasNext()) {return null;}ImageReader reader = (ImageReader) readers.next();reader.setInput(input);BufferedImage image;try {// 尝试读取图片 (包括颜色的转换).image = reader.read(0); //RGB} catch (IIOException e) {// 读取Raster (没有颜色的转换).Raster raster = reader.readRaster(0, null);//CMYKimage = createJPEG4(raster);}return image;}private static BufferedImage createJPEG4(Raster raster) {int w = raster.getWidth();int h = raster.getHeight();byte[] rgb = new byte[w * h * 3];//彩色空间转换float[] Y = raster.getSamples(0, 0, w, h, 0, (float[]) null);float[] Cb = raster.getSamples(0, 0, w, h, 1, (float[]) null);float[] Cr = raster.getSamples(0, 0, w, h, 2, (float[]) null);float[] K = raster.getSamples(0, 0, w, h, 3, (float[]) null);for (int i = 0, imax = Y.length, base = 0; i < imax; i++, base += 3) {float k = 220 - K[i], y = 255 - Y[i], cb = 255 - Cb[i],cr = 255 - Cr[i];double val = y + 1.402 * (cr - 128) - k;val = (val - 128) * .65f + 128;rgb[base] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff: (byte) (val + 0.5);val = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128) - k;val = (val - 128) * .65f + 128;rgb[base + 1] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff: (byte) (val + 0.5);val = y + 1.772 * (cb - 128) - k;val = (val - 128) * .65f + 128;rgb[base + 2] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff: (byte) (val + 0.5);}raster = Raster.createInterleavedRaster(new DataBufferByte(rgb, rgb.length), w, h, w * 3, 3, new int[]{0, 1, 2}, null);ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);return new BufferedImage(cm, (WritableRaster) raster, true, null);}
}

也就是如果读取图片失败,则直接转格式处理。然后使用Thumbnails下载即可。

Thumbnails.of(CMYKUtil.readImage(new URL(url).openStream())).scale(1f).outputQuality(0.25f).toFile("C:\\Users\\zyj\\Desktop\\t8.jpg");

Thumbnails.of Could not obtain image from URL(javax.imageio.IIOException: Unsupported Image Type)相关推荐

  1. URL(获取指定网址里的图片)

    一.概述 URL,说白了就是一个网络地址(网址),通常一个网址里包含很多内容,这里要讲的不是如何从一个包括很多内容(比如很多图片)的网址里找到自己感兴趣的内容(比如说某一张图片),而是从一个带有图片格 ...

  2. ios 用浏览器打开html,iOS开发:调起Safari浏览器打开Url(对中文等特殊字符进行处理)...

    开发语言:Swift 开发生态:iOS 本人Android 小白一枚~ 这里以调起百度网页为例. 先对中文等特殊字符进行处理 let urlString = "https://www.bai ...

  3. 详解URL(为后续写Ajax做准备)

    统一资源标识符(Uniform Resource Identifier,URI) 统一资源定位符(Uniform Resource Locator,URL) 是互联网上用来标识某一处资源的地址.以下面 ...

  4. Go 学习笔记(50)— Go 标准库之 net/url(查询转义、查询参数增/删/改/查、解析URL)

    1. URL 概述 import "net/url" url 包解析 URL 并实现了查询的转码.URL 提供了一种定位因特网上任意资源的手段,但这些资源是可以通过各种不同的方案( ...

  5. CSS 使用@import url()与link href 的区别

    @import url(/css/a.css) 很简单但出现了兼容问题,在ff下无法调用样式,大家都以为是@import搞的怪,但用link后问题依然出现.经过一番讨论原来是绝对路径在ff下是不认的. ...

  6. URL(统一资源定位符)

    互联网上各种信息都有,并散布在各个服务器站点中,但是资源却有着唯一标识它们的地址值.如果想得到某个资源,这时候就需要知道该资源在互联网中的唯一的地址,也就是统一的资源定位符(URL). 统一资源定位符 ...

  7. Java魔法堂:URI、URL(含URL Protocol Handler)和URN

    转载自   Java魔法堂:URI.URL(含URL Protocol Handler)和URN 一.前言 过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记,以便日 ...

  8. django——url(路由)配置

    URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除此之外的任何URL都不被 ...

  9. URL(待整合到HTTP书中哦)

    一:scheme://host.domain:port/path/filename scheme - 定义因特网服务的类型.最常见的类型是 http host - 定义域主机(http 的默认主机是 ...

最新文章

  1. Python中的元编程(Meta-Programming)
  2. Xen虚拟化之一:Xen环境组件详解
  3. 【Android 插件化】VAHunt 检测插件化引擎的具体细节
  4. 微服务网关实现用户访问权限识别拦截
  5. 如何将xml的String字符串转化标准格式的String字符串
  6. Ruby中的类与对象(一)
  7. Windows系统服务器配置SSH服务
  8. 思维导图怎么制作?这些制作技巧,支持一键模板套用,建议收藏
  9. Chrome 配置samesite=none方式
  10. 5分+细胞器基因组好文!多线南蜥线粒体基因组及比较基因组研究
  11. python读txt文件-python读取文本文件数据
  12. 67 Ways to Increase Conversion with Cognitive Biases
  13. 别做被大公司毁掉的年轻人
  14. IntelliJ IDEA删除项目
  15. 松鼠分松果解题 c++
  16. xnio-nio解决方法
  17. java获取长度_获取java长度
  18. go开发环境搭建以及运行一个完整的beego网站项目
  19. 浅析城市交通现状及问题
  20. P2PSIP 技术专业博客

热门文章

  1. Qt创建的工程,无法编译,提示找到不文件Cannot find file,是怎么回事
  2. JAVA:实现Knuth-Morris-Pratt算法(附完整源码)
  3. $timeformat、$time、$realtime用法
  4. 深入解析消息推送平台的设计原理,百万门店同时推送消息是如何实现的?
  5. 关于微信小程序图片不显示的问题解决方案
  6. 高等数学之可微,可导,可积与连续之间的关系
  7. 【转载】408计算机学科专业基础综合参考书目
  8. 2021年 408计算机学科专业基础综合考试大纲
  9. 工程小白问题:数采网关、智慧网关、物联网关、工业网关、DTU透传网关、边缘网关、协议网关、通讯管理机、中控网关、LORA网关、PROFIBUS网关、HART网关,都啥区别?如何判断是否符合工程要求?
  10. 用螺旋理论分析Sarrus机构的自由度及其性质