it-swarm.com.de

Wie erstelle ich ein animiertes GIF aus JPEGs in Android (Entwicklung)

Ich suche nach einer einfachen Möglichkeit, create ein animiertes GIF in einer nativen Android -Anwendung zu erstellen. Die Quelldateien sollten JPEG sein (von der Kamera oder was auch immer) und die Ausgabe sollte als GIF auf dem Gerät gespeichert werden.

Ich möchte nicht wissen, wie man Animationen oder animierte GIF-Dateien abspielt.

Um es klar auszudrücken: Ich möchte wissen, wie einzelne Bilder Bild für Bild in einen "Film" eingefügt und dann als GIF-Datei gespeichert werden.

z.B. Diese App kann ich machen wollen ich will machen.

43
StinsonMaster

Siehe diese Lösung.

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

Es ist eine Android Version dieses Beitrags.

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

Um diese Klasse zu verwenden, finden Sie hier ein Beispiel für eine Hilfsmethode zum Generieren eines GIF-Byte-Arrays. Beachten Sie, dass die Funktion getBitmapArray () eine Methode ist, um alle Bitmap-Dateien in einem Bildadapter gleichzeitig zurückzugeben. Die Eingabe sind also alle Bitmap-Dateien in einem Adapter, die Ausgabe ist ein Byte-Array, das Sie in die Datei schreiben können.

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();
}

Führen Sie die folgenden Schritte aus, um diese Funktion zu verwenden. Anschließend können Sie die Datei auf der SD-Karte speichern.

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

Das könnte dir helfen. Es ist eine Klasse, die zum Generieren von GIF-Dateien verwendet wird.

http://elliot.kroo.net/software/Java/GifSequenceWriter/

6
Jatin Malwal

Es hat sich sehr gut für mich gemacht. Es erstellt Dateien schnell und in guter Qualität

//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

4
Đăng Huân

Wenn Sie diese Bitmaps nur als animiertes GIF anzeigen möchten, können Sie mit folgendem Code ein Animated Drawable erstellen:

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();
3
Abeer Iqbal

Lösung 1

Hast du diesen Artikel gesehen? ..... es ist mit Quellcode ..

Wie ich weiß, denke ich, dass Android kein GIF-Animationsbild wiedergibt. Sie sollten Webview verwenden, das GIF-Animationen wiedergibt.

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

und wenn du kannst ..

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

Lösung 2

Android bietet Drawable Animation .

1
Bhavesh Hirpara

Gif ist im Grunde eine Reihe von Bildern mit einer konstanten Zeitverzögerung in Bildern. Sie können nicht direkt GIF in Android spielen. Ich habe viel an der Wiedergabe von GIF-Animationen in Android gearbeitet.

  • Wenn wir GIF spielen, erledigen wir auch alle Aufrufe, Frames zu spielen, selbst. Das ist also nicht der beste Ansatz

  • Wenn Sie eine Reihe von Bildern eingestellt haben, spielen Sie diese nur mit einer Verzögerung in Bildern ab. Das wäre alles was du willst.

  • Sie können GIF in der Anwendung auch nicht mit nativem Code erstellen. Es gibt auch einige Nachteile bei der Verwendung des GIF-Formats. Dem ich mich in meinem Spiel gestellt hatte.

  • Wenn Sie Zeichensätze haben, können Sie AnimationDrawable verwenden, um auch eine Animation wie gif anzuzeigen. Es kann auch eine beliebige Ansicht eingestellt werden.

Ich hatte auch eine benutzerdefinierte Ansicht erstellt, um GIF-Animationen abzuspielen. Zuerst lade ich GIF und konvertiere es in InputStream, dann übergebe ich es an meine benutzerdefinierte Ansichtsklasse, um das GIF abzuspielen.

 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;
}
0
Jatin Malwal