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

I am trying to write a method that takes an image and saves a thumbnail of 100 to 100 from that image. However, when I save the file, it is displayed as an unreadable 0-byte image (with the error "Error interpreting JPEG image file (incorrect call in JPEG library at state 200)") in Ubuntu ImageViewer. My code is as follows:

public boolean scale(){

    String file = filename.substring(filename.lastIndexOf(File.separator)+1);
    File out = new File("data"+File.separator+"thumbnails"+File.separator+file);

    if( out.exists() ) return false;

    BufferedImage bi;
    try{
        bi = ImageIO.read(new File(filename));
    }
    catch(IOException e){
        return false;
    }

    Dimension imgSize = new Dimension(bi.getWidth(), bi.getHeight());
    Dimension bounds = new Dimension(100, 100);
    int newHeight = imgSize.height;
    int newWidth = imgSize.width;

    if( imgSize.width > bounds.width ){
        newWidth = bounds.width;
        newHeight = (newWidth*imgSize.height)/imgSize.width;
    }

    if( imgSize.height > bounds.width ){
        newHeight = bounds.height;
        newWidth = (newHeight*imgSize.width)/imgSize.height;
    }

    Image img = bi.getScaledInstance(newWidth, newHeight, BufferedImage.SCALE_SMOOTH);
    BufferedImage thumb = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics2D g2d = thumb.createGraphics();
    g2d.drawImage(img, 0, 0, null);
    g2d.dispose();

    try{
        ImageIO.write(thumb, "jpg", out);
    }
    catch(IOException e){
        return false;
    }

    return true;
}

Where "filename" is a global variable for the class containing this method, representing the path to the original image. My main problem is that I do not see why I am creating a 0-byte image.

+5
source share
2 answers

, . OpenJDK. -, OpenJDK JPEG, ,

ImageIO.write(thumb, "jpg", out);

; , 0- . ImageIO "png" ( File()) .

+3

, JVM JPG, BufferImage. BufferedImage.TYPE_USHORT_GRAY, , , , 0- . BufferedImage.TYPE_BYTE_GRAY, .

0

All Articles