画像のサイズを変更する

  • Javaで画像の縦横のサイズを変更する方法のサンプルです。
  • gif形式のファイルは、png形式に変更されます。(適切なImageWriterがみつからなかったので)
  • X WindowなしのUNIX環境で動作させるには、以下のいずれかが必要です

 -起動時に-Djava.awt.headless=trueを指定する 
 -PJA
 -Xvfb


import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.imageio.stream.*;

public class Twinspark{
public static void main(String[] args){
if(args.length < 2){
System.out.println("Usage:");
System.out.println(" java Twinspark InputImageFile OutPutWidthInPixel");
System.exit(0);
}

String inputFileName = args[0];

int outputWidth = 0;
try{
outputWidth = Integer.parseInt(args[1]);
}catch(Throwable e){
System.out.println("OutPutWidthInPixel must be in Integer!");
e.printStackTrace();
System.exit(0);
}

if(outputWidth == 0){
System.out.println("OutPutWidthInPixel must be larger than 0!");
}

BufferedImage image = null;
try{
File inputFile = new File(inputFileName);
image = ImageIO.read(inputFile);
}catch(IOException e){
System.out.println("InputFile is not Found!");
e.printStackTrace();
System.exit(0);
}

String extension = inputFileName.substring(inputFileName.lastIndexOf(".") +1);
if(extension.toUpperCase().equals("GIF")){
extension = "png";
inputFileName = inputFileName.toLowerCase().replaceAll("\\.gif",".png");
}
Image outputImage = image.getScaledInstance(outputWidth,-1,Image.SCALE_SMOOTH);

BufferedImage bffImg = new BufferedImage(outputWidth,image.getHeight(null)* outputWidth /image.getWidth(null),BufferedImage.TYPE_3BYTE_BGR);
Graphics offg = bffImg.createGraphics();
offg.drawImage(outputImage, 0, 0, null);


try{
File outputFile = new File("after_" + inputFileName);
FileImageOutputStream fio = new FileImageOutputStream(outputFile);

ImageWriter iw = (ImageWriter) (ImageIO.getImageWritersBySuffix(extension)).next();

iw.setOutput(fio);
iw.write(bffImg);

}catch(Exception e){
e.printStackTrace();
}
}


}