ImageIO.read(File file) 报异常"Unsupported Image Type",不支持CMYK格式图片问题解析和解决方式
2017-10-17 10:13
861 查看
ImageIO.read(File file)报异常"Unsupported Image Type",是因为其内部读取文件的类JPEGImageReader只能读取RGB color model,而你的图片可能被ps过,color model是CMYK。
如果你坚持要读取CMYK图片,你需要转换图片,使用一下代码。
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(imageFile.getInputStream());
} catch (final IOException e) {
if ("Unsupported Image Type".equals(e.getMessage())) {
// Find a suitable ImageReader
final Iterator readers = ImageIO
.getImageReadersByFormatName("JPEG");
ImageReader reader = null;
while (readers.hasNext()) {
reader = (ImageReader) readers.next();
if (reader.canReadRaster()) {
break;
}
}
// Stream the image file (the original CMYK image)
final ImageInputStream input = ImageIO
.createImageInputStream(imageFile.getInputStream());
reader.setInput(input);
// Read the image raster
final Raster raster = reader.readRaster(0, null);
// Create a new RGB image
final BufferedImage bi = new BufferedImage(raster.getWidth(),
raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
// Fill the new image with the old raster
bi.getRaster().setRect(raster);
bufferedImage = bi;
}
}
final int width = bufferedImage.getWidth();
final int height = bufferedImage.getHeight();
如果你坚持要读取CMYK图片,你需要转换图片,使用一下代码。
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(imageFile.getInputStream());
} catch (final IOException e) {
if ("Unsupported Image Type".equals(e.getMessage())) {
// Find a suitable ImageReader
final Iterator readers = ImageIO
.getImageReadersByFormatName("JPEG");
ImageReader reader = null;
while (readers.hasNext()) {
reader = (ImageReader) readers.next();
if (reader.canReadRaster()) {
break;
}
}
// Stream the image file (the original CMYK image)
final ImageInputStream input = ImageIO
.createImageInputStream(imageFile.getInputStream());
reader.setInput(input);
// Read the image raster
final Raster raster = reader.readRaster(0, null);
// Create a new RGB image
final BufferedImage bi = new BufferedImage(raster.getWidth(),
raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
// Fill the new image with the old raster
bi.getRaster().setRect(raster);
bufferedImage = bi;
}
}
final int width = bufferedImage.getWidth();
final int height = bufferedImage.getHeight();
相关文章推荐
- 解决:Tomcat不能加载图片问题.javax.imageio.IIOException: Can't create cache file!
- 处理同一页面中借助form+input[type="file"]上传图片出现的input无法清空问题
- Android WebView 不支持 H5 input type="file" 解决方法
- (转)imageIO异常:Unsupported Image Type, 不支持图像类型
- 关于JFinal的单个input标签type=file的multiple="multiple"多图片上传,每次只接收到一个uploadFile对象的解决办法。
- input type="file" 选取文件路径时出现fakepath问题IE浏览器解决办法
- ImageIO.read()方法读取,截取图片后重写,图片蒙上一层红色的解决 后感
- [UIImage imageWithContentsOfFile:]引发的图片显示异常问题(一半图片是黑的)
- Python PIL Image "image file is truncated"问题解决
- Oracle IO问题解析(八)—— db file parallel read
- Oracle IO问题解析(七)—— db file scattered read
- ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方式
- Android WebView 不支持 H5 input type="file" 解决方法
- ImageIO.write 支持写入的图片格式 Java
- [UIImage imageNamed:@"tab_back"]不显示图片的问题解决
- 用<input type="file" accept="image/*" capture="camera">之后,把图片放到页面上
- .document.execCommand("BackgroundImageCache",false,true)解决ie6下的背景图片缓存问题
- Android WebView 支持H5图片上传<input type="file">
- 处理同一页面中借助form+input[type="file"]上传图片出现的input无法清空问题