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