有些图片裁剪之后变成这样了,
其他很多都不会,但是就是会有这样的图片,裁剪完就变成上面那个鬼样了... 尝试了很多第三方的包也是一样的,就高手解救啊~
以下是我裁剪图片的代码:
BufferedImage src = null; BufferedImage dst = null; URL url; try { url = new URL(picUrl); src = ImageIO.read(url.openStream()); width = width+x > src.getWidth() ? src.getWidth()-x : width; height = height+y > src.getHeight() ? src.getHeight()-y : height; ColorModel dstCM = src.getColorModel(); dst = new BufferedImage(dstCM, dstCM.createCompatibleWritableRaster(width, height), dstCM.isAlphaPremultiplied(), null); Graphics2D g = dst.createGraphics(); g.drawRenderedImage(src, AffineTransform.getTranslateInstance(-x, -y)); g.dispose(); ImageIO.write(dst, "JPEG", new File("D://dest.jpg")); } catch(Exception e){ e.printStackTrace(); }
裁剪用这个吧,更好用 http://www.oschina.net/p/thumbnailator
示例代码:
Java 图片 照片 裁剪 剪切 缩放 偏色 失真 变形
先说点废话:
如果你看到这个问题和这个答案,说明你可能跟我们一样,已经被此问题困惑一阵子了。
大陆互联网的环境较差,分享精神缺失,希望我们每个人都能贡献一份力量,共建一个开放的中文互联网。
回到问题本身:
答案可能有很多种,我们找到了其中一种。
对原始图片进行裁剪操作,一切正常。对上传后的文件进行裁剪,出现偏色现象。调节各种裁剪参数,更换多种裁剪方式,均不奏效。
最后发现,原始图片和上传后的图片,虽然直接打开后视觉效果表现一致,但文件大小变小了。进一步检查发现,图片中的大部分EXIF信息丢失,只剩下最基本的信息。
在上传图片的过程中,使用了集团封装的类库,对文件内容进行安全过滤。我们并不清楚过滤的具体细节,结果由于过度信任而浪费了大量时间。
猜测java的图形处理类库,需要依赖较多的EXIF信息,对此种文件兼容性较差。由于时间原因,未深入探寻。如有更多信息,还望造福众人。
Y29kZW1vbmtleS5jbg==