0

我正在构建一个 JPEG 图像编码器。就目前而言,为了对图像进行编码,用户输入他们希望编码的文件的名称以及作为结果要创建的文件的名称。

我希望用户能够在命令行中设置编码的质量。我尝试将第二个参数 (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的这个定义,构造函数的第二个参数JpegEncode是一个int.

的类型大概是“args[2]没有工作”,你的意思是“没有编译”。转换为:Stringargs[2]int

Integer.parseInt(args[2]);

这将抛出一个NumberFormatExceptionif args[2]is not a valid int

于 2012-02-29T11:28:49.820 回答
0

使用 .js 设置 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 回答