ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)

本文介绍了在Linux平台使用ImageIO.read()方法读取并重写图片时遇到的问题,包括图片质量下降和运行异常。尝试通过-Djava.awt.headless=true解决异常未果,因需要图形环境支持。最终决定采用ImageMagick结合JMagick在Linux下处理图片,以实现独立于X-11系统。同时提到了Jimi1.0版本的PICT格式写入BUG及ImageIO处理ICC信息不正确的官方BUG链接。
摘要由CSDN通过智能技术生成

1.在项目中为了处理用户上传的图片,会对图片进行重写处理,故使用了类似下面的代码:

		File src = new File("e:/img/google.jpg");
		BufferedImage bi = (BufferedImage)ImageIO.read(src);
		BufferedImage bi_scale = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB );
		Graphics2D g = bi_scale.createGraphics();
		g.drawImage( bi, 0, 0, bi.getWidth(), bi.getHeight(), null );
		g.dispose();
		FileOutputStream fos = new FileOutputStream("e:/img/google2.jpg");
		ImageIO.write(bi_scale, "jpg", fos);
		fos.close();

原图如下:

但发现对于CMYK模式的图片ImageIO.read方法在读取时,会丢失掉ICC信息,从面导致重写后的图片上面蒙受上一层红色如下:


显然对图片质量的影响非常大,在用户体验非常高的互联网上是没法让用户接受的,于是又改用另外一种获取Image对象的方法如下࿱

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值