- PR -

縮小JPEG画像の高画質化、圧縮率等の変更方法について

投稿者投稿内容
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2005-12-09 10:15
いつもお世話になっています。画像の縮小イメージの作成・保存を行っているのですが、画質が悪いので困っています。現在は他所の見よう見まねで

BufferedImage srcImg = ImageIO.read(inStm);
BufferedImage thmbImg = new BufferedImage((int)(srcImg.getWidth()*rt),(int)(srcImg.getHeight()/,srcImg.getType());
AffineTransformOp at = new AffineTransformOp(AffineTransform.getScaleInstance(rt,rt),AffineTransformOp.TYPE_BILINEAR);
at.filter(srcImg, thmbImg);
ImageIO.write(thmbImg, ext, otStm);

と、アフィン変換を利用して最大幅・高ともに100〜200dot程度の縮小画像を作成しています。AffineTransformOpの第2引数にnullを指定してニアレストネイバー法を利用していたため画質が悪いのか?と思い、バイリニア法に変更してみたのですが、画質は殆ど変わりませんでした。バイキュービック法を試してみようと思いましたが、こちらはJ2SE5.0からサポートのようで、現在私が利用しているJ2SE 1.4.2_08では利用できません。

PhotoShop等ツールで最低圧縮率で作成した同じdot数の画像と比較すると、上記コードで作成された画像はサイズがかなり小さく良いのですが、その分画質が著しく悪いのです。そこでPhotoSop等のツールと同様とまではいかなくても、圧縮率等を上げることにより多少でも画質が向上することができるのであれば、試してみたいと思っております。

この会議室等で、ImageWriterクラスを利用した圧縮パラメータの設定方法などは見つけたのですが、現在私が利用している方法で圧縮率等のパラメータを変更することは可能なのでしょうか?

ご存じの方がおられましたら教示いただけませんでしょうか。


[ メッセージ編集済み 編集者: YB 編集日時 2005-12-09 10:21 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-12-09 10:58
アフィン変換(ピクセル数の縮小)なのかJPEG圧縮(バイト数の縮小)のどちらの話かちょっと良く分からなかったのですが、前者についてならば、過去記事の、
件名:画像の縮小について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20241&forum=12
はどうでしょうか。
ImageFilter でキレイに変換できるそうです。
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2005-12-09 11:48
unibon様

どうもありがとうございます。実はイメージ処理の経験が殆ど無く、私の中ではアフィン変換(ピクセル数の縮小)もJPEG圧縮(バイト数の縮小)もゴッチャになっていました。ご紹介いただいたスレッドは私の検索が悪かったのかヒットしなかったのですが、内容を確認しますと私の悩んでいることと全く同じ質問のようなので、そちらを参考にさせていただくことにいたします。

要らぬスレッドを増やしてしまったようで申し訳ないです。どうもありがとうございました。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-12-09 12:47
縮小だけ(拡大しない)なら「面積平均法」が一番キレイになる。Image.SCALE_AREA_AVERAGING を使ってみたら?
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2005-12-09 22:47
縮小にしか使用しないので「面積平均法」でも構わないのですが、具体的にはどのように記述すればよいのでしょうか?AffineTransformOpの第2引数にそのまま指定するだけなのでしょうか?
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-12-10 11:12
面積平均法のフィルタとして AreaAveragingScaleFilter があります。これは、ImageFilter のサブクラスです。AffineTransformOp は使用しません。
syousuke
会議室デビュー日: 2002/09/27
投稿数: 19
投稿日時: 2005-12-10 18:27
ImageMagickが利用できるかもしれません。

参考SITE
ImageMagick
 http://www.imagemagick.org/
JMagick
 http://www.yeo.id.au/jmagick/
 http://www.yeo.id.au/jmagick/fom-serve/cache/30.html
YB
会議室デビュー日: 2005/11/25
投稿数: 16
投稿日時: 2005-12-10 19:25
未記入様

>>面積平均法のフィルタとして AreaAveragingScaleFilter があります。これは、ImageFilter のサブクラスです。

そうでしたか。知識が至らず申し訳ありませんでした。



[ メッセージ編集済み 編集者: YB 編集日時 2005-12-10 19:26 ]

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