调整GIF大小会丢失动画

时间:2013-03-21 18:38:27

标签: graphicsmagick im4java

我正在使用GraphicsMagick(1.3.16)和im4java(1.4.0)来创建GIF的缩略图。在命令行,我可以做类似的事情:

convert original.gif -coalesce -resize 100x100 +profile * thumb.gif

并成功创建缩略图,保留动画。但我的应用程序中的某些内容并未进行翻译,因为看似相同/相似的命令:

- -coalesce -resize 100x100 +profile * gif:- 

创建一个缩略图,仅捕获动画的单个图像。注意:输入是通过管道输入并输出捕获为BufferedImage。

如果有帮助,这里是用于创建我正在使用的上述cmd的代码块:

public static BufferedImage createThumb(byte[] imageFileData)
{
  GMOperation op = new GMOperation();
  op.addImage("-"); // input: stdin
  op.coalesce();
  op.resize(100, 100);
  op.p_profile("*");
  op.addImage("gif:-"); // output: stdout

  ConvertCmd cmd = new ConvertCmd(true); // use GraphicsMagick

  // Pipe the fileData to stdin, to avoid writing to a file first.
  ByteArrayInputStream bais = new ByteArrayInputStream(imageFileData);
  Pipe pipeIn = new Pipe(bais, null);
  cmd.setInputProvider(pipeIn);

  // Capture output from stdout into an image.
  Stream2BufferedImage s2b = new Stream2BufferedImage();
  cmd.setOutputConsumer(s2b);

  // Run the command.
  cmd.run(op);

  // Return the resulting image.
  return s2b.getImage();
}

我缺少什么?!

编辑: 有趣的是,当我改变

op.addImage("gif:-"); // output: stdout

// Save the file instead of returning the bytes
op.addImage("gif:C:\\Pictures\\thumb.gif");

使用动画正确创建图像。

我发现从s2b.getImage()返回的byte []长度只有4,8777个字节(gif作为单个图像),而使用直接文件路径成功创建的gif thumb是190,512个字节,这导致我相信问题在于命令/流的某些设置。

0 个答案:

没有答案