non penso che ad IIOImage interessi molto da dove arriva la RenderedImage (BufferedImage in questo caso, che la implementa) iniziale, basta che sia tale.

Per il resizing BufferedImage eredita da Image getScaledInstance. Quindi dalla BufferedImage iniziale puoi tirarti fuori una BufferedImage ridimensionata e quindi applicare il resampling necessario a mantenere le dimensioni (peso) accettabili

EDIT / AGGIUNTA
ho visto il codice della pagina che hai linkato e mi sembra davvero tanta roba
Prova magari con questo:

http://pavel.tcholakov.net/2008/12/q...-java-imageio/

EDIT 2: CODICE
Combinando le due cose
codice:
public static void main (String[] args) throws Exception {
        
        BufferedImage bimg = ImageIO.read(new File(src));        
        Iterator<ImageWriter> i = ImageIO.getImageWritersByFormatName("jpeg"); 
        
        // Just get the first JPEG writer available  
        ImageWriter jpegWriter = i.next();  
        
        // Resize:
        Image thumbnail = bimg.getScaledInstance(bimg.getWidth()/4, -1, Image.SCALE_SMOOTH);
        BufferedImage bufferedThumbnail = new BufferedImage(
                thumbnail.getWidth(null), 
                thumbnail.getHeight(null),
                BufferedImage.TYPE_INT_RGB
                );
        
        bufferedThumbnail.getGraphics().drawImage(thumbnail, 0, 0, null);
        
        // Set the compression quality to 0.2  
        ImageWriteParam param = jpegWriter.getDefaultWriteParam();  
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);  
        param.setCompressionQuality(0.2f); 
        
        // Write the image to a file 
        
        FileImageOutputStream out = new FileImageOutputStream(new File(dest));  
        jpegWriter.setOutput(out);  
        //jpegWriter.write(null, new IIOImage(bimg, null, null), param);  
        jpegWriter.write(null, new IIOImage(bufferedThumbnail, null, null), param); 
        jpegWriter.dispose();  
        out.close();         
    }