Подтвердить что ты не робот

Как создать анимированный GIF из JPEG в Android (разработка)

Я ищу простой способ создать анимированный GIF в родном приложении для Android. Исходные файлы должны быть JPEG (с камеры или что когда-либо), и выход должен быть сохранен как GIF на устройстве.

Я не хочу знать, как играть в анимацию или анимированные GIF файлы.

Чтобы быть ясным: я хочу знать, как помещать отдельные изображения по кадре в "фильм", а затем сохранять их как .gif файл.

например. Это приложение может хотеть, что я хочу сделать.

4b9b3361

Ответ 1

Посмотрите это решение.

https://github.com/nbadal/android-gif-encoder

Это версия Android этого сообщения.

http://www.jappit.com/blog/2008/12/04/j2me-animated-gif-encoder/

Чтобы использовать этот класс, вот пример вспомогательного метода для генерации массива байтов GIF. Обратите внимание: функция getBitmapArray() - это метод, позволяющий сразу вернуть все файлы Bitmap в адаптер изображения. Таким образом, ввод всех файлов Bitmap в одном адаптере, выход представляет собой массив байтов, который вы можете записать в файл.

public byte[] generateGIF() {
    ArrayList<Bitmap> bitmaps = adapter.getBitmapArray();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    encoder.start(bos);
    for (Bitmap bitmap : bitmaps) {
        encoder.addFrame(bitmap);
    }
    encoder.finish();
    return bos.toByteArray();
}

Чтобы использовать эту функцию, сделайте следующее, затем вы можете сохранить файл в SD-карту.

FileOutputStream outStream = null;
        try{
            outStream = new FileOutputStream("/sdcard/generate_gif/test.gif");
            outStream.write(generateGIF());
            outStream.close();
        }catch(Exception e){
            e.printStackTrace();
        }

Ответ 3

Если вы хотите отображать только такие растровые изображения, как анимированный gif, вы можете создать AnimatedDrawable с помощью этого кода:

AnimationDrawable animation = new AnimationDrawable();
animation.addFrame(getResources().getDrawable(R.drawable.image1), 10);
animation.addFrame(getResources().getDrawable(R.drawable.image2), 50);
animation.addFrame(getResources().getDrawable(R.drawable.image3), 30);
animation.setOneShot(false);

ImageView imageAnim =  (ImageView) findViewById(R.id.imageView);
imageAnim.setImageDrawable(animation);

// start the animation!
animation.start();

Ответ 4

Это очень хорошо для меня, оно создает файлы быстрых и качественных изображений

//True for dither. Will need more memory and CPU
AnimatedGIFWriter writer = new AnimatedGIFWriter(true);
OutputStream os = new FileOutputStream("animated.gif");
Bitmap bitmap; // Grab the Bitmap whatever way you can
// Use -1 for both logical screen width and height to use the first frame dimension
writer.prepareForWrite(os, -1, -1)
writer.writeFrame(os, bitmap);
// Keep adding frame here
writer.finishWrite(os);
// And you are done!!!

https://github.com/dragon66/android-gif-animated-writer

Ответ 5

Решение 1

Вы видели эту статью?..... с исходным кодом..

Как я знаю, я думаю, что андроид не будет воспроизводить gif анимационный образ. Вы должны использовать webview, который будет воспроизводить gif-анимацию.

http://droid-blog.net/2011/10/14/tutorial-how-to-use-animated-gifs-in-android-part-1/

и если вы можете..

http://androidosbeginning.blogspot.in/2010/09/gif-animation-in-android.html

Решение 2

Android предоставляет Анимированную анимацию.

Ответ 6

Gif - это в основном набор изображений с постоянной задержкой времени в кадрах. Вы не можете напрямую играть в gif в android. Я много работал над воспроизведением анимации gif в андроиде.

  • При игре в gif мы также обрабатываем все вызовы игровых фреймов нашими самостоятельно. Таким образом, это не лучший подход.

  • Если у вас есть набор изображений, просто воспроизводите их с задержкой в ​​кадрах. Что будет все, что вы хотите.

  • Вы также не можете сделать gif в приложении с помощью собственного кода. Есть некоторые недостатки, а также для использования формата gif. Который я столкнулся в своей игре.

  • Если у вас есть набор чертежей, вы можете использовать AnimationDrawable для отображения aanimation, например gif. Он также может установить любой вид.

Я также сделал обычное представление для воспроизведения gif-анимаций. Сначала я загружаю gif и конвертирую его в InputStream, а затем передаю его в свой пользовательский класс просмотра, чтобы играть в gif.

 public class GifWebView extends View {
    private Movie mMovie;
    InputStream mStream;
    long mMoviestart;
    private boolean play;

public GifWebView(Context context, InputStream stream) {
    super(context);
    mStream = stream;
    setPlay(true);
    mMovie = Movie.decodeStream(mStream);
}

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.TRANSPARENT);
    super.onDraw(canvas);
    final long now = SystemClock.uptimeMillis();

    if (mMoviestart == 0) {
        mMoviestart = now;
    }
    final int relTime = (int) ((now - mMoviestart) % mMovie.duration());

    mMovie.setTime(relTime);
    mMovie.draw(canvas, 20, 20);
    if (play) {
        Log.i("reltime", "" + relTime + ",duration:" + mMovie.duration());
        this.invalidate();
    }
}

@Override
public boolean onTouchEvent(android.view.MotionEvent event) {
    return true;
};

public boolean isPlay() {
    return play;
}