- PR -

javaでのTiffイメージ変換処理

1
投稿者投稿内容
たつ
会議室デビュー日: 2008/12/10
投稿数: 4
投稿日時: 2008-12-10 13:42
@IT初参加です。
いきなりで申し訳ないのですが、皆様にご相談があります。
現在、業務でTIFFファイルの画像変換(ピクセル、dpi値を変更)をしなければならなりません。

Java初心者ながらも四苦八苦してやっと
Tiffファイルのサイズ変更のソースにたどり着いたのですが、
実行してみるととても画質が粗くなっており、
また、ファイルによっては半分ほど画像が削られてしまうという現象があらわれてしまいました。

何か対処法を思いつく方はどうぞよろしくお願いいたします。

以下、ソース抜粋です。

-------------------------------------------------------------------------------
public class ImageConvert {
/** ログ */
private static CCLogUtil log = CCLogUtil.getLogger();
private static String tif = ".tif";
private static String jpg = ".jpg";

public ImageConvert() {
}


public static void tiffconvert(String filename){
try{
//イメージ変更処理
InputStream orgImageFile = null;
orgImageFile = new FileInputStream(filename+tif);
BufferedImage orgImage =
ImageIO.read(orgImageFile);
int width = 413;
int height = 585;
BufferedImage resizeImage = new BufferedImage(width, height,orgImage.getType());
// ↓ここからリサイズ処理
AffineTransformOp ato = null;
ato = new AffineTransformOp(
AffineTransform.getScaleInstance((double)width / orgImage.getWidth(),(double) height / orgImage.getHeight()),null);
ato.filter(orgImage, resizeImage);
// ↑ここまでリサイズ処理
//イメージ書き込み処理
ImageIO.write(resizeImage, "tiff", new File(filename+"after"+tif));


}catch (FileNotFoundException e) {
log.printWarn("データファイルが見つかりません。" + e);
// e.printStackTrace();
System.exit(2);
} catch (IOException e) {
log.printWarn(e, "データファイルの作成に失敗しました。");
System.exit(2);
}


}
}
-------------------------------------------------------------------------------
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-12-10 21:12
Javaでやらずに
ツールを呼び出してみてはいかがでしょうか
たつ
会議室デビュー日: 2008/12/10
投稿数: 4
投稿日時: 2008-12-10 21:15
ご返答ありがとうございます。

ツールのことも考えているのですが、顧客環境で少し問題があるようで
できればJavaでやりたいと思っているのですが・・・。

やはりJavaには限界があるのでしょうか?
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-12-11 10:01
いろいろと作りこんだりすれば可能なはずです。
各クラスの使い方の問題になるのかも。
実際PureJavaな画像ソフトありますし。

いろいろ作り込むのは面倒なので
外部ツールを利用する方が
楽にできるのは確かです
たつ
会議室デビュー日: 2008/12/10
投稿数: 4
投稿日時: 2008-12-11 13:50
コメントありがとうございます。

やはりそのようですね・・・。
外部ツールの使用を考えてみます。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2008-12-15 10:39
AffineTransformOp はデフォルトで最近傍補間を使うので、拡大縮小を行うと画像が粗くなる可能性があります。バイキュービックでやってみたらいかがですか。

コード:
        AffineTransformOp ato = null;
        ato = new AffineTransformOp(
        AffineTransform.getScaleInstance((double)width / orgImage.getWidth(),(double) height / orgImage.getHeight()),null);



ここの部分を以下のように変更します。

コード:
        AffineTransformOp ato
          = new AffineTransformOp(
        AffineTransform.getScaleInstance((double)width / orgImage.getWidth(),(double) height / orgImage.getHeight()), AffineTransformOp.TYPE_BICUBIC);


たつ
会議室デビュー日: 2008/12/10
投稿数: 4
投稿日時: 2008-12-24 14:18
ありがとうございます。
この方法でやってみたいと思います。
また何かわからないことがあれば質問させてください。
1

スキルアップ/キャリアアップ(JOB@IT)