Javaでtifとbmpの内容を比較する(Sanselan,Image I/O)
Pythonでtifが上手く読み込めなかったので、Javaで
チャレンジすることに。
Java Image I/O(JAI)を使えばできることはわかっていたので、
あえて別な手段で。
http://d.hatena.ne.jp/rabbit2go/20081001/1222866752
こちらの記事を参考に、Sanselanを使ってみましたが・・・
tifの読み込みでエラーになりました。
tifは多彩なフォーマットを許容しているので、特殊な形式
(今回はスキャナで取り込んだFax G4)は読めないのかも。
結局、JAIを使いました。
ソースはこんな感じ。
■MainProccess.java
package fujishinko.tif;
import java.awt.image.BufferedImage;
import java.io.*;
//import java.util.Arrays;
import javax.imageio.ImageIO;
public class MainProccess {
public static void main(String[] args) throws Exception {
System.out.println("検証開始");
doCheck("sample.tif", "converted.bmp");
System.out.println("検証完了");
}
public static void doCheck(String tif, String bmp) throws Exception {
File tifFile = new File(tif);
File bmpFile = new File(bmp);
BufferedImage tifImage = ImageIO.read(tifFile);
BufferedImage bmpImage = ImageIO.read(bmpFile);
int width = tifImage.getWidth();
int height = tifImage.getHeight();
if (width != bmpImage.getWidth()){
System.out.println("ERROR:横幅不一致:" + tif);
return;
}
if (height != bmpImage.getHeight()){
System.out.println("ERROR:縦幅不一致:" + tif);
return;
}
int[] tifpixs = tifImage.getData().getPixels(0, 0, width, height, (int[])null);
int[] bmppixs = bmpImage.getData().getPixels(0, 0, width, height, (int[])null);
for (int i = 0; i < tifpixs.length; i++){
if (tifpixs[i] != bmppixs[i]){
System.out.println("ERROR:ピクセル不一致:"+tif);
return;
}
}
/* OutOfMemoryErrorで落ちる・・・
if (!Arrays.equals(tifpixs , bmppixs)){
System.out.println("ERROR:ピクセル不一致:"+tif);
return;
}
*/
System.out.println("検証通過:"+tif);
}
}
Sun提供モノは強いです(^^;
もどる