限定しりとり

OracleDBからBLOB型の画像データを取得しています。
本来必要のなかった処理なのですが、DBに入っている画像のデータがおかしいらしく、ピクセルとdpiの値を変更しなければなりません。
いろいろと調べてやってみようと思ったのですが、いきづまってしまいました(><)
みなさんの力をお貸しください。

内容は、
・一度DBからそのまま画像を抽出し、ファイルを作成
・作成したファイルをもう一度BufferedImageに取り込み、サイズ変更処理開始
となっています。

しかし、BufferedImageに取り込む際に、nullが帰ってきてしまい、以降の処理ができません・・・。
また、下記処理はすべてjpgで行っていますが、本当はTiffファイルを作りたいのです。
ImageIOクラスは標準ではTiffは対応していないようなのですが、実際に下記ソースの"jpg"を"tif"に変更しても問題はないのでしょうか?

質問が煩雑で申し訳ないですが、よろしくお願いいたします。

以下ソース抜粋です。

----------------------------------------------------------------
ImageOutNum = (String)rs.get("IMAGEGRPNO"+i)+"_"+(String)rs.get("IMAGENO"+i);

// イメージファイルを作成する。
File imagef = new File(outPath2);
if(!(imagef.exists()))imagef.mkdirs();

InputStream inImage = (InputStream)rs.get("IMAGEFILE"+i);
if (inImage != null) {
FileOutputStream outImage =

new FileOutputStream(outPath2 + ImageOutNum + ".jpg");
//画像書き込み
int j;
while ((j = inImage.read()) != -1) {
outImage.write(j);
}
// 解放
outImage.close();

//イメージ変更処理
InputStream orgImageFile = null;
orgImageFile = new FileInputStream(outPath2 + ImageOutNum + ".jpg");
BufferedImage orgImage = ImageIO.read(orgImageFile);//ここでorgImageにnullが返されてしまいます。
int width = 640;
int height = (int)(((double)width / orgImage.getWidth()) * (double)orgImage.getHeight());

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);
// ここまでリサイズ処理
ImageOutputStream imageStream = ImageIO.createImageOutputStream(new File(outPath2 + ImageOutNum + ".jpg"));
ImageWriter writer = null;
Iterator it = (Iterator) ImageIO.getImageWritersByFormatName("jpg");
writer = (ImageWriter) it.next();
writer.setOutput(imageStream);
JPEGImageWriteParam jpgWriter = new JPEGImageWriteParam(Locale.getDefault());
jpgWriter.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriter.setCompressionQuality(1f);
writer.write(null, new IIOImage(resizeImage, null, null), jpgWriter);
imageStream.flush();
writer.dispose();
imageStream.close();

A 回答 (1件)

画像処理になる前の、前半部分で何をやってんのかよー分からん。

rsって何や?
出力はImageIO.write()を使え。
そして確実にJPEG画像ファイルができてんのか、確認してみ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!