Skip to content

Instantly share code, notes, and snippets.

@balamuru
Created October 12, 2014 19:34
Show Gist options
  • Save balamuru/432f59facb5f3947902d to your computer and use it in GitHub Desktop.
Save balamuru/432f59facb5f3947902d to your computer and use it in GitHub Desktop.
Reading and Writing Images while maintaining compression settings etc
import org.apache.commons.imaging.Imaging;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class ReadAndWrite {
public static void main(String[] args)
throws Exception {
final String inputPath = "/home/vinayb/Downloads/in.tif";
final String outputPath = "/home/vinayb/Downloads/out.tif";
new File(outputPath).delete(); //cleanup
final File inputFile = new File(inputPath);
final File outputFile = new File(outputPath);
//setup reader
final ImageInputStream imageInputStream = ImageIO.createImageInputStream(inputFile);
final ImageReader imageReader = ImageIO.getImageReaders(imageInputStream).next();
imageReader.setInput(imageInputStream);
//read image
final BufferedImage originalBufferedImage = imageReader.read(0);
//get a handle to metadata etc
final IIOImage iioImage = imageReader.readAll(0, null);
//perform some mods to the image
BufferedImage modifiedBufferedImage = addRectangle(originalBufferedImage);
//setup writer based on reader
final ImageWriter imageWriter = ImageIO.getImageWriter(imageReader);
imageWriter.setOutput(ImageIO.createImageOutputStream(outputFile));
//write
imageWriter.write(null, new IIOImage(modifiedBufferedImage, null, iioImage.getMetadata()), imageWriter.getDefaultWriteParam());
// imageWriter.write(null,iioImage, imageWriter.getDefaultWriteParam());
//print info about the input and output images
System.out.println("#### input compression: " + Imaging.getImageInfo(inputFile).getCompressionAlgorithm());
System.out.println("#### in format: " + Imaging.getImageInfo(inputFile).getFormat());
System.out.println("\nThe output settings should match the input settings\n");
System.out.println("#### output compression: " + Imaging.getImageInfo(outputFile).getCompressionAlgorithm());
System.out.println("#### output format: " + Imaging.getImageInfo(outputFile).getFormat());
}
private static BufferedImage addRectangle(BufferedImage originalImage) {
final int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
final int originalImageWidth = originalImage.getWidth();
final int originalImageHeight = originalImage.getHeight();
//prepare graphs for the output
final BufferedImage finalImage = new BufferedImage(originalImageWidth, originalImageHeight, type);
final Graphics2D g = finalImage.createGraphics();
//draw image
g.drawImage(originalImage, 0, 0, originalImageWidth, originalImageHeight, null);
g.setColor(Color.BLACK);
g.fillRect(0, 0, 500, 500);
g.dispose();
return finalImage;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment