openjdk ImageIO.write()時出現Invalid argument to native writeImage


問題:在本地開發時使用的是oracle jdk8,沒有問題,但是生產上面使用的是openjdk-8u252-b09,生成圖片時一直報Invalid argument to native writeImage

javax.imageio.IIOException: Invalid argument to native writeImage
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1067)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:363)
at javax.imageio.ImageWriter.write(ImageWriter.java:615)
at javax.imageio.ImageIO.doWrite(ImageIO.java:1622)
at javax.imageio.ImageIO.write(ImageIO.java:1548)

代碼(報錯diam):

public String exportImg(List<Node> nodes, String piclocation, Font font){
        //1.jpg模板路徑
        Resource resource = new ClassPathResource(piclocation);
        String path = "";
        String fileName = "";
        BufferedImage buffImg = null;
        InputStream inputStream = null;
        try {
            inputStream = resource.getInputStream();
            buffImg = ImageIO.read(inputStream);
            //得到畫筆對象
            Graphics g = buffImg.getGraphics();
            //設置顏色。
            g.setColor(Color.BLACK);
            Graphics2D tip = buffImg.createGraphics();
            tip.setColor(Color.BLACK);
            font = new Font("宋體", Font.PLAIN, 14);
            tip.setFont(font);
            picDraw(nodes, tip);
            g.dispose();
            path = System.getProperty("java.io.tmpdir") + File.separator + File.separator;
            File file = new File(path);
            file.mkdirs();
            fileName = UUID.randomUUID() + ".jpg";
            ImageIO.write(buffImg, "jpg", new File(path + fileName));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //關閉流
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (Exception finalExcp) {
                return finalExcp.getMessage();
            }
        }

        return path + fileName;
    }

 

解決:

將上面紅色的代碼改為:

ImageIO.write(buffImg, "png", new File(path + fileName));

 

參考:

Using ImageIO.write() to create a JPEG creates a 0 byte file

Add JPEG encoder/decoder support to installed OpenJDK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM