ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何让java的ImageBuffer正确读取PNG文件?

2019-10-07 20:01:01  阅读:287  来源: 互联网

标签:java image image-processing resize crop


出于某种原因,使用ImageBuffer和ImageIO打开一些PNG文件不起作用.这里有一些我正在使用的代码可以很好地调整大小/裁剪JPG:

BufferedImage image = ImageIO.read(new File(location));

BufferedImage croppedImage = image.getSubimage(
    cropInfo.getX(), cropInfo.getY(), cropInfo.getW(), cropInfo.getH());

BufferedImage resizedImage = new BufferedImage(
    TARGET_WIDTH, TARGET_HEIGHT, croppedImage.getType());
Graphics2D g = resizedImage.createGraphics();
g.drawImage(croppedImage, 0, 0, TARGET_WIDTH, TARGET_HEIGHT, null);
g.dispose();

this.changeContentType("image/png", ".png"); // not really relevant. just a property

ImageIO.write(resizedImage, "png", new File(location));

return resizedImage;

此函数的目标是获取给定的任何类型,调整大小并裁剪图像,然后将其保存到具有相同文件名的PNG.

它适用于Windows,但如果我在Linux(lenny)上裁剪/调整大小,它会完全崩溃并抱怨文件的类型(它表示类型为0).

java.lang.IllegalArgumentException: Unknown image type 0
    java.awt.image.BufferedImage.<init>(BufferedImage.java:490)
    trainingdividend.domain.file.ServerImage.resizeImage(ServerImage.java:68)
    trainingdividend.domain.file.ServerImage.cropAndResize(ServerImage.java:80)
    trainingdividend.service.user.UserAccountManagerImpl.cropAvatar(UserAccountManagerImpl.java:155)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

解决方案?

还有另一个我可以使用的图书馆吗?

解决方法:

在Windows上运行我的函数时,croppedImaged.getType()返回值5.因此,简单的“hack”是存储类型,检查它是否为0 ……如果是,则将值设置为5 .

int imageType = croppedImage.getType();
if(imageType == 0) imageType = 5;

然后我们传入imageType,它应该在Linux上运行.

我确信这有一个缺点,如果在其他情况下值为0,它会将其设置为5,这将是错误的.但是,这似乎适用于Linux上的常见图像类型,并没有造成任何问题.

很明显Windows版本的Java 1.6非常好,但是Linux版本中有一个错误.

标签:java,image,image-processing,resize,crop
来源: https://codeday.me/bug/20191007/1868728.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有