- 締切済み
【JAVA】画像のサイズを大きく変化させない方法
行き詰ったので質問させてください。 TIFファイル画像があり、それに文字を組み込みたいため以下のようなソースを書きました。 BufferedImage image = null; image = ImageIO.read(file); Graphics graphics = image.createGraphics(); graphics.setColor(Color.RED); graphics.setFont(new Font("MSゴシック", Font.BOLD, 100)); graphics.drowString("TEST",100,200); ImageIO.write(image,"tif", new File(file.toString())); 画像には「TEST」の文字が組み込まれたのですが、ファイルサイズが 50kbから500kb(約10倍)になり、サイズ変化させたくなかったため対策 を練ってます。 JPEGEncoderParamクラスなどを利用し、setQualityメソッドで画質を変えた りもしたのですが、それでも元画像の7倍ほどになり、他の方法を取らざるを得ません。 画像のサイズは元サイズとほぼ変わらないような方法で、プログラムを組むことは できますでしょうか。ちなみに画像は白黒です。 以上、お力添えください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mpro-gram
- ベストアンサー率74% (170/228)
tiffの扱いはあんまり知らないけど、wikiによれば、「TIFFファイルでは、画像データの先頭部分に記録形式についての属性情報が記録される。」なので、実際の画像の形式が何なのかによって、ファイルサイズは大きく変わるようです。 jpegやpng は2色しか使って無くても、1ドットにつき16から24ビット使うので、たとえ圧縮してもファイルサイズは大きくなります。 で、2色しかないなら、ビットマップの白黒モード+圧縮で保存するのがもっともサイズが小さいと思うけど、java でその書き込みができたか不明。 >JPEGEncoderParamクラスなどを利用し、 これだとたぶんtiffの中身もjpegになるし、tiff用の情報付加により、通常のjpeg保存よりもさらに大きいファイルになるようです。 以下のページをさらっと読んだかぎりでは、内部画像をBufferedImage.TYPE_BYTE_BINARY で2値画像で保持してれば、いけるかな??? http://hondou.homedns.org/pukiwiki/pukiwiki.php?JavaSE%20ImageIO%20%A4%C7%20tiff%20%B2%E8%C1%FC%A4%F2%B0%B7%A4%A6 無理なら、windowsのペイントで作っちゃうのが早そうな気がする。 ペイントで作るときも、先に一旦モノクロビットマップで保存しておいてから、保存時ファイル形式をtiffに変更して再保存としないと、tiffの中身は、多色ビットマップで保存されちゃったり、gifやpngだったりしてファイルサイズは大きくなるので要注意。
- teketon
- ベストアンサー率65% (141/215)
Javaでは標準でTIFF形式のファイル書き込みはできなかったと記憶しています。 TIFと言う拡張子の別のファイル形式になっていませんか?
お礼
ありがとうございました
補足
回答ありがとうございます。 TIFへの書き込み及び読み込みはImageIO.getReaderFormatNamesメソッドの結果から対応可能となっております。 graphicsクラスを用いない別の方法でも構わないので、文字を画像に埋め込んで、それを元のサイズに近い状態で画像を保存する方法について、もしご存知でしたらご教示ください。よろしくお願いします。