Есть ли способ изменить скорость Gif - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы попытаться сохранить сохранение на gifspeed, возможно, вызвать окно с выбором скорости, хотя я не совсем уверен, как изменить скорость GIF с помощью Java.

Я посмотрел этовверх, но безрезультатно.Я новичок, поэтому прошу прощения, если это вопрос, и я просто не нашел его


import base.AnimationExporter;
import java.awt.Dimension;
import java.awt.Graphics;
import settings.GuiDrawer;

public class SaveButton extends GuiElement
{
  public SaveButton(GuiMenu parent)
  {
    super(parent);
  }

  public void releasedOn(int posX, int posY, int button)
  {
    if (heldDown) {
      heldDown = false;
      AnimationExporter.saveAnimation(true);
    }
  }

}

Редактировать: Мой плохой ересь AnimationExporter

   try {
     ImageWriter gifWriter = (ImageWriter)ImageIO.getImageWritersByFormatName("gif").next();
     ImageOutputStream outputStream = ImageIO.createImageOutputStream(outputFile);
     gifWriter.setOutput(outputStream);

     ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromBufferedImageType(2);
     IIOMetadata metadata = gifWriter.getDefaultImageMetadata(imageType, null);
     IIOMetadataNode nodeTree = (IIOMetadataNode)metadata.getAsTree(metadata.getNativeMetadataFormatName());

     IIOMetadataNode appExtensionsNode = getNode("ApplicationExtensions", nodeTree);
     IIOMetadataNode child = new IIOMetadataNode("ApplicationExtension");
     child.setAttribute("applicationID", "NETSCAPE");
     child.setAttribute("authenticationCode", "2.0");

     child.setUserObject(new byte[] { 1, (byte)((Editing.animationLoop ? 0 : 1) & 0xFF), (byte)((Editing.animationLoop ? 0 : 1) >> 8 & 0xFF) });
     appExtensionsNode.appendChild(child);

     metadata.setFromTree(metadata.getNativeMetadataFormatName(), nodeTree);

     gifWriter.prepareWriteSequence(null);
     for (Frame frame : animation.Animation.frames) {
       IIOMetadata imageMetadata = gifWriter.getDefaultImageMetadata(imageType, null);
       IIOMetadataNode imageNodeTree = (IIOMetadataNode)imageMetadata.getAsTree(imageMetadata.getNativeMetadataFormatName());
       IIOMetadataNode graphicNode = getNode("GraphicControlExtension", imageNodeTree);
       graphicNode.setAttribute("disposalMethod", "none");
       graphicNode.setAttribute("userInputFlag", "FALSE");
       graphicNode.setAttribute("delayTime", Integer.toString(delay));

       imageMetadata.setFromTree(imageMetadata.getNativeMetadataFormatName(), imageNodeTree);

       IIOImage currentImage = new IIOImage(frame.getEntireFrame(), null, imageMetadata);
       gifWriter.writeToSequence(currentImage, null);
     }
     gifWriter.endWriteSequence();
     outputStream.close();
   } catch (Exception e) {
     e.printStackTrace();
   }
 }```

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Ах, извините, я подумал, что я меньше переписал, теперь я чувствую себя глупо, delayTime вот,

public int delay = Editing.frameDelay; Я предполагаю, что frameDelay - это то, что я должен изменить public static int frameDelay = 100;

0 голосов
/ 13 февраля 2019

Частота кадров «GIF» встроена.Тем не менее, вы можете ускорить или замедлить его с помощью внешних инструментов.Фотошоп может работать лучше всего. Этот инструмент может вам помочь.Если вам нужны динамические изменения частоты кадров, нам нужна дополнительная информация о библиотеках, которые вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...