}
public static void writeImage(RenderedImage image, String format,
Properties properties, OutputStream os) throws IOException {
ImageWriter writer = getPreferredImageWriter(format);
if (writer == null)
throw new IOException(ImageGraphics2D.class
+ ": No writer for format '" + format + "'.");
// get the parameters for this format
UserProperties user = new UserProperties(properties);
ImageWriteParam param = writer.getDefaultWriteParam();
if (param instanceof ImageParamConverter) {
param = ((ImageParamConverter) param).getWriteParam(user);
}
// now set the standard write parameters
String formatKey = rootKey + "." + format;
if (param.canWriteCompressed()) {
if (user.isProperty(formatKey + COMPRESS)) {
if (user.getProperty(formatKey + COMPRESS_MODE).equals("")) {
param.setCompressionMode(ImageWriteParam.MODE_DEFAULT);
} else {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType(user.getProperty(formatKey
+ COMPRESS_MODE));
param.setCompressionQuality(user.getPropertyFloat(formatKey
+ COMPRESS_QUALITY));
}
} else {
if (canWriteUncompressed(format)) {
param.setCompressionMode(ImageWriteParam.MODE_DISABLED);
}
}
}
if (param.canWriteProgressive()) {
if (user.isProperty(formatKey + PROGRESSIVE)) {
param.setProgressiveMode(ImageWriteParam.MODE_DEFAULT);
} else {
param.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
}
}
// write the image
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null), param);
writer.dispose();
ios.close();
}