MacとJavaと映画と


最近のエントリー


最近のレスポンス
Re: マイクロソフト、ファスト株 92.6%の株主の承認を得る
そうですねー。大株主にはそれなりに越えか...

Re: マイクロソフト、ファスト株 92.6%の株主の承認を得る
M$ですから、かなりの根回しをしたんでし...

Re: 間宮兄弟
うんうん。芸能には疎いんで沢尻エリカは「...

Re: 間宮兄弟
面白いよね、これ。ってか、オレは最初の3...

Re: Microsoft Office2008購入
そうですね。 OpenOfficeもそれなりに使えると...
2月 2006
    1  2  3  4 
 5  6  7  8  9  10  11 
 12  13  14  15  16  17  18 
 19  20  21  22  23  24  25 
 26  27  28     
1  |  今日  |  3





はてなブックマーク数

あわせて読みたい


follow yusukey at http://twitter.com



やっぱりサムネイルの品質もう少しなんとかならないのかってことで調べた。
どうやら ImageWriteParam っていうクラスで指定するらしい。
これを使う場合は ImageIO クラスのスタティックメソッドでカジュアルに書き出すことはできず、以下のように若干冗長になる。

  private static void graphics2dImageOutputStream() throws Exception {
int width = 320;
int height = 240;
FileInputStream fis = new FileInputStream("original.jpg");
BufferedImage image = ImageIO.read(fis);
fis.close();
BufferedImage shrinkImage
= new BufferedImage(width,height, image.getType());
Graphics2D g2d = shrinkImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION
, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING
, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING
, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING
, RenderingHints.VALUE_DITHER_ENABLE);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING
, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING
, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION
, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS
, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL
, RenderingHints.VALUE_STROKE_NORMALIZE);
g2d.drawImage(image, 0, 0, width, height, null);
ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
if (iter.hasNext()) {
writer = (ImageWriter) iter.next();
}
ImageOutputStream ios
= ImageIO.createImageOutputStream(new File("1.0f.jpg"));
writer.setOutput(ios);
JPEGImageWriteParam iwparam
= new JPEGImageWriteParam(Locale.getDefault());
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(1f);

writer.write(null,new IIOImage(shrinkImage,null,null),iwparam);
ios.flush();
writer.dispose();
ios.close();
}

iwparam.setCompressionQuality(1f); の部分で品質を決める。
1.0fが一番品質が高い。
で、パラメータを変えて試した結果がこんなかんじ↓

0.75 : 12KB

0.90 : 20KB

0.95 : 28KB

1.0 : 60KB

0.95f くらいがむやみにファイルサイズがでかすぎず、品質も良い感じ。
体感上、品質によって書き出す速度が特に変わることはなかった。

タグ :



コメント追加

タイトル
本文
HTML : b, i, blockquote, br, p, pre, a href="", ul, ol, li
名前
E-mail
Webサイト
保存しますか? はい  いいえ 

E-mailは公開されません, このエントリーの新規コメント通知が必要なら記入します。(解除可能)

トラックバックURL http://yusuke.homeip.net/diary/.action?entry=1139972587290