Android Кодирует анимированные веб-страницы из списка растровых изображений

#java #android #whatsapp-stickers

Вопрос:

для стикеров whatsapp я создаю анимированный gif с помощью AnimatedGifEncoder и сохраняю его как webp, но whatsapp его не принимает, поэтому мне нужен кто-то, кто научит меня преобразовывать список растровых изображений в анимированный webp без использования ffmpeg или скрывать сгенерированный git в анимированный webp.

попробовал эту библиотеку, но она выдает следующее исключение, не поддерживаемое FourCC: I. C. C. P.

код выглядит следующим образом:

     public boolean transform(List<Bitmap> bitmaps) {

    if (bitmaps == null || bitmaps.isEmpty()) {
        throw new IllegalArgumentException("Bitmaps is empty!");
    }

    //-----------------initiate the encoder----------------------
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    //----------------- encoder.start(bos) ----------------------
    encoder.start(bos);
    encoder.setRepeat(0);
    encoder.setQuality(quality);

    final int size = bitmaps.size();
    Bitmap sourceBmp;
    Bitmap resultBbm;
    for (int i = 0; i < size; i  ) {
        sourceBmp = bitmaps.get(i);
        if (sourceBmp == null) {
            continue;
        }

        // result bitmap
        resultBbm = ThumbnailUtils.extractThumbnail(sourceBmp, sourceBmp.getWidth() / scaleX,
                sourceBmp.getHeight() / scaleY, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

        try {
            encoder.addFrame(resultBbm);
            if (onTransformProgressListener != null) {
                onTransformProgressListener.onProgress(i, size);
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.gc();
            break;
        } finally {
            if (!sourceBmp.isRecycled()) {
                sourceBmp.recycle();
            }
            if (!resultBbm.isRecycled()) {
                resultBbm.recycle();
            }
        }
    }
    //----------------- encoder.finish() ----------------------
    encoder.finish();
    bitmaps.clear();

    byte[] data = bos.toByteArray();
    File saveFile = new File(outputPath);

    if (!saveFile.getParentFile().exists()) {
        saveFile.getParentFile().mkdirs();
    }

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(saveFile);
        fos.write(data);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return saveFile.exists() amp;amp; saveFile.length() > 0;
}
 

Комментарии:

1. Когда вы говорите, что пробовали эту библиотеку, но она не работает, что на самом деле произошло? Можете ли вы показать код и ошибки из этого? Для этого кода вы говорите, что он его не принимает, но что на самом деле происходит? Какую ошибку вы получаете?

2. это вызывает следующее исключение: Не поддерживается FourCC: I. C. C. P.

3. проверьте этот пример github.com/b4rtaz/android-webp-encoder/blob/master/app/src/main/…