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();
}