Created
October 12, 2014 19:34
-
-
Save balamuru/432f59facb5f3947902d to your computer and use it in GitHub Desktop.
Reading and Writing Images while maintaining compression settings etc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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