星空网 > 软件开发 > Java

图片裁切中遇到的小问题

今天使用ImageIO实现裁切图片,遇到了一个错误:

Not a JPEG file: starts with 0xff 0xd9

因为要获取裁剪原点和裁切尺寸,所以我想获取图片宽高,用较小的一个作为裁切尺寸,进而得到一个正方形的图,所以就有了如下代码:

File imageFile = new File(imageFileFullPath);FileInputStream imageFileInputStream = new FileInputStream(imageFile);// 获取原始图片,用于读取宽和高BufferedImage bufferedImage = ImageIO.read(imageFileInputStream);int imageWidth = bufferedImage.getWidth();int imageHeight = bufferedImage.getHeight();if(imageWidth == imageHeight) {//直接返回,不进行裁切}// 取较小的数值为裁剪尺寸int clipSize = imageWidth > imageHeight ? imageHeight : imageWidth;

然而在裁切并输出结果时,又用到了这样的代码:

Iterator<ImageReader> readerIt = ImageIO.getImageReadersByFormatName("jpg");ImageReader reader = readerIt.next();// 获取图片流ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageFileInputStream);reader.setInput(imageInputStream, true);Rectangle rectangle = new Rectangle(0, 0, clipSize, clipSize);    param.setSourceRegion(rectangle);    //读取选取的区域BufferedImage clipedImage = reader.read(0, param);

没过多久我就找到了解决办法,以至于我认为导致错误的原因就是定义了两个BufferedImage。这个解决方法是:去掉获取宽高的BufferedImage对象的定义,改用reader获取原始图片尺寸:

int imageWidth = reader.getWidth(0);int imageHeight = reader.getHeight(0);

这样就能够正常运行了。以目前掌握的知识还不能理解文章开头提到的错误是如何出现的,因为去掉一个BufferedImage的定义就能够正常裁切,所以我想是不是不能定义两个BufferedImage对象的原因,直到我尝试了以下方法:

BufferedImage clipedImage = bufferedImage.getSubimage(0, 0, clipSize, clipSize);

取代上面的那一大段代码,同样用到了两个BufferedImage对象,这种形式就能够很好地去执行。

之后我又继续思考可能导致这个错误的原因,发现了一个可疑之处:

// 获取原始图片,用于读取宽和高BufferedImage bufferedImage = ImageIO.read(imageFileInputStream);

 这个imageFileInputStream对象是已经读取到的图片对象,而ImageIO的read方法还有一个参数就是File,所以我替换了一下:

BufferedImage bufferedImage = ImageIO.read(imageFile);

竟然也裁切成功了!不过还是没有从根本上理解错误出现的原因,暂且记下,以后慢慢发现。

图片裁切的代码参考了:

http://www.oschina.net/code/snippet_857368_14826

再贴一个BufferedImage相关的好文:

http://blog.163.com/yuhua_kui/blog/static/9679964420139118203818/




原标题:图片裁切中遇到的小问题

关键词:图片

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

tiktok ipa下载:https://www.goluckyvip.com/tag/82305.html
tiktok 访问太频繁:https://www.goluckyvip.com/tag/82306.html
tiktok shipping:https://www.goluckyvip.com/tag/82307.html
tiktok apps:https://www.goluckyvip.com/tag/82308.html
tiktok icon:https://www.goluckyvip.com/tag/82309.html
大促前期准备:https://www.goluckyvip.com/tag/8231.html
23点聊电商:新质生产力加速数字贸易发展 卓尔智联集团实现营收利润双增长 :https://www.kjdsnews.com/a/1836411.html
南京浦口都有什么好玩的地方 南京浦口都有什么好玩的地方推荐:https://www.vstour.cn/a/363180.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流