0

私はJPEG画像エンコーダーを構築しています。現状では、画像をエンコードするために、ユーザーはエンコードしたいファイルの名前と、結果として作成されるファイルの名前を入力します。

ユーザーがコマンド ラインでエンコーディングの品質を設定できるようにしたいと思います。2 番目の引数 (100) の名前を に変更しようとしnew JpegEncoder(image, 100, new FileOutputStream(args[1])); encoder.Compress();ましたargs[2]が、うまくいきませんでした。

public class JPGencoder {

  public static void main ( String[] args ) {
  String[] names = ImageIO.getWriterFormatNames();
  BufferedImage image = null;
  JpegEncoder encoder = null; 

  try {
     image = ImageIO.read( new File( args[0] ) );
      System.err.println("Process image " + args[0]);
      System.err.println(image.toString());
  } catch (Exception e) { 
      System.err.println("Problems with image " + args[0]);
  }

  try {
     encoder = new JpegEncoder(image, 100, new FileOutputStream(args[1]));
     encoder.Compress();
  } catch (Exception e) {
      System.out.println("well that didn't work");
  }

} }

4

2 に答える 2

1

このJpegEncoderの定義に基づいて、コンストラクターの 2 番目の引数JpegEncodeint.

のタイプargs[2]は、Stringおそらく「動作しませんでした」ということで、「コンパイルされませんでした」という意味です。に変換するargs[2]にはint:

Integer.parseInt(args[2]);

NumberFormatExceptionこれは、 if args[2]is not a validをスローしますint

于 2012-02-29T11:28:49.820 に答える
0

を使用してJPG圧縮/品質を設定することは難しくありませんImageIO。以下に、開始するためのスニペットをいくつか示します。

private ImageWriteParam imageWriterParams;
private ImageWriter imageWriter;
File out = new File("some.jpg");
// ...

Iterator it = ImageIO.getImageWritersBySuffix("jpg");
// presume every iterator has precisely 1 writer
imageWriter = (ImageWriter)it.next();
imageWriterParams = imageWriter.getDefaultWriteParam();
if ( imageWriterParams.canWriteCompressed() ) {
    try {
        imageWriterParams.setCompressionMode( ImageWriteParam.MODE_EXPLICIT );
    } catch(Exception e) {
        e.printStackTrace();
    }
} else {
    logger.log(Level.WARNING, "ImageWriter cannot compress!");
}
imageWriterParams.setCompressionQuality(qualF);

FileImageOutputStream fios = new FileImageOutputStream(out);
imageWriter.setOutput(fios);
imageWriter.write(
    null,
    new IIOImage(image,null,null),
    imageWriterParams );
fios.flush();
fios.close();
于 2012-02-29T11:52:30.933 に答える