- PR -

JPEGファイルのブロックノイズを減らすには?

1
投稿者投稿内容
A.K.渡邉
常連さん
会議室デビュー日: 2004/11/15
投稿数: 30
投稿日時: 2005-07-14 02:09
JSPを使ってJPEGを生成していますが、出来上がったJPEGにブロックノイズが入り見栄えが良くありません。MAC OSXで表示させるには悪くないのですが、Windowsで表示させるとなぜかノイズの量が増えます。"com.hoge.Jpeg"クラスではGraphics2Dを使い、ストリングのみをdrawしています。Graphics2DのオブジェクトにはsetRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) を使用しています。

スピードよりも画像のクオリティー重視の環境ですので、ブロックノイズをなるべく取り除きたいと思っています。何か良いアイデアがあるでしょうか?

<%@ page language="java" %>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.awt.image.BufferedImage"%>

<jsp:useBean id="jpeg" class="com.hoge.Jpeg" scope="session" />

<%
ServletOutputStream sOStream = response.getOutputStream();
JPEGImageEncoder jIEncoder = JPEGCodec.createJPEGEncoder(sOStream);

BufferedImage image = jpeg.getBufferedImage();

//set quality
JPEGEncodeParam jpegEncodeParam = jIEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setQuality(0.99f, true);
jIEncoder.encode(image, jpegEncodeParam);

jIEncoder.encode(image);

sOStream.flush();
sOStream.close();
%>

Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-07-14 09:02
A.K.渡邉さん、こんにちは。

既にご存知とは思いますが、Stringのように境界がはっきりし
ているものを表現するのは、JPEGには苦手です。

MAC OSでは悪く無いとの事ですが、
GIFとか PNGという選択肢は無いのでしょうか?
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2005-07-14 09:42
A.K.渡邉さん

http://home.comcast.net/~rowland3/TextToJpeg.java
こんなのありましたが...どうなんでしょう?

クオリティは1.0fでも汚いですか?
ブロックノイズではなく、画像の補間方法自体で汚いということはないでしょうか?

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-14 10:16
IE で画像を表示する場合、
HTMLの WIDTH HEIGHT がJPEGと一致しないと
ギザギザが強く出ます。
他のブラウザ表示と比較してみましょう。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-07-14 10:19
unibon です。こんにちわ。

引用:

A.K.渡邉さんの書き込み (2005-07-14 02:09) より:
JSPを使ってJPEGを生成していますが、出来上がったJPEGにブロックノイズが入り見栄えが良くありません。


ブロックノイズでしょうか?モスキートノイズではないですか?

引用:

A.K.渡邉さんの書き込み (2005-07-14 02:09) より:
MAC OSXで表示させるには悪くないのですが、Windowsで表示させるとなぜかノイズの量が増えます。


Mac の表示環境が違うだけで、見栄えがそう見えるだけかもしれません。たとえばコントラストが強いと、ノイズが潰れてノイズが目立たなくなる等が考えられます。Windows と Mac の両方で、スクリーンをキャプチャーしてペイントツールなどで拡大して RGB の輝度を比較されてみてはどうでしょうか。あるいはもっと簡単には、キャプチャーしたものを非圧縮の画像ファイルにして、もう一方の PC 環境で表示してみる等でも比較できます。

引用:

A.K.渡邉さんの書き込み (2005-07-14 02:09) より:
"com.hoge.Jpeg"クラスではGraphics2Dを使い、ストリングのみをdrawしています。Graphics2DのオブジェクトにはsetRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) を使用しています。


アンチエイリアスをオンにすると、その分、情報量が増えるので逆にノイズは出やすいかもしれません。
また、JPEG の圧縮だと色も関係してきます。背景と字のコントラストが低いとノイズは出やすいです。たとえば、背景と字を輝度ではなく色の違いで表示している場合は、ノイズが出やすいです。ためしに、黒地に白字や、白地に黒字でもノイズは出るでしょうか?

#一番いいのは、JPEG 以外にしてしまうことですが...
A.K.渡邉
常連さん
会議室デビュー日: 2004/11/15
投稿数: 30
投稿日時: 2005-07-16 16:33
返信ありがとうございます。

jpeg.jspが一番最初に書いたjspファイルとします。そしてそれを<img src="jpeg.jsp">としてHTML上で表示していました。結果見栄えの悪いJPEGが出来上がりました(JPEGで表示、というのが条件ですのでファイルタイプを変更できません)。しかし

//最初のJSPに追加
File f = new File("xxxxxx/hoge.jpg");
ImageIO.write(image, "jpeg", f);

として最初にローカルに保存し、そしてHTML上では

<img src="./xxxxxx/hoge.jpg" >

とやるとWindowsでもMacでも奇麗に表示することができました。同じBufferedImageオブジェクトを使っているんですけどね。理由が分かりません(笑)。JSPはライブでのファイル生成が苦手、とでも覚えておきます。

返信してくださった方に御礼を申し上げます。Kissingerさんの書き込みは自分には初耳でした。ファイルタイプを選べる場合にはJPEG以外にすることを心がけておきます。
1

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