首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ImageIO TwelveMonkey扩展将PNG转换为PPM

使用ImageIO TwelveMonkey扩展将PNG转换为PPM
EN

Stack Overflow用户
提问于 2022-11-10 12:25:38
回答 1查看 27关注 0票数 0

我需要将PNG文件转换为PPM文件。在同一个项目中,我使用了TwelveMonkey扩展将PPM转换为PNG,结果非常好。但是当尝试相反的方法时,它会导致错误。

输出PPM文件将始终具有height=16和Width=60,因此我还需要找到一种方法来缩小PNG的规模,而不会严重降低质量。

依赖关系:

代码语言:javascript
复制
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-jpeg</artifactId>
            <version>3.9.3</version>
        </dependency>
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-tiff</artifactId>
            <version>3.9.3</version>
        </dependency>
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-pnm</artifactId>
            <version>3.9.3</version>
        </dependency>

代码:

代码语言:javascript
复制
public static File convertPngToPPM(File pngFile, String fileName) {

        File ppmFile=new File(fileName.concat(".ppm"));

        try {
            BufferedImage inputImage=ImageIO.read(pngFile);
            
            int imageHeight=inputImage.getHeight()==16 ? inputImage.getHeight() : 16;
            int imageWidth=inputImage.getWidth() == 60 ? inputImage.getWidth() : 60;

            BufferedImage resizedImage=resizeImage(inputImage, imageWidth, imageHeight);

            ImageIO.write(resizedImage, "ppm", ppmFile);

        } catch (Exception e){
            log.error(e.getMessage());
            log.error("Error reading the PPM file");
        }
        return null;
    }

private static BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
        Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);
        BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
        outputImage.getGraphics().drawImage(resultingImage, 0, 0, null);
        return outputImage;
    }

错误:

代码语言:javascript
复制
2022-11-10 17:42:31.438 ERROR 17389 --- [  XNIO-1 task-1] com.mycompany.utilities.ImageUtilities   : Unsupported data type: 3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 10:22:08

错误消息只是在上下文之外打印异常消息,这并不是很有用。如果您转而打印完整的堆栈跟踪,您将看到它指向代码中的一个位置,上面写着:

代码语言:javascript
复制
// TODO: Support TYPE_INT through conversion, if number of channels is 3 or 4 (TYPE_INT_RGB, TYPE_INT_ARGB)

换句话说,目前不支持BufferedImage.TYPE_INT_RGB

这很容易修复,只需将您的图像转换为TYPE_3BYTE_BGR而不是TYPE_INT_RGB,您的代码就可以正常工作。在resizeImage

代码语言:javascript
复制
BufferedImage outputImage = 
              new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_3BYTE_BGR);

PS:抛出这个异常并不是PNM插件真正的好行为,因为它应该报告它不支持这个输入,并且ImageIO.write应该返回false。所以我觉得这可以归类为窃听器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74388981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档