Cuando estoy usando archivos webp para paquetes de pegatinas animadas, se rechazan, pero si uso los mismos archivos para pegatinas estáticas, se exceptúan. Después de mirar todos los códigos, me di cuenta de que este es el último punto en el que esos archivos se vuelven problemáticos. Pero no sé cómo identificar si los archivos webp permanecen como webp animados después de guardarlos. Por favor comparte tu pensamiento.
pd: estoy usando estos archivos webp para los paquetes de pegatinas de whatsapp. hay una bandera "animated_sticker_pack". tenemos que decirle a whatsapp que este paquete contiene solo webp animado con formato adecuado. Si lo configuro como falso, se agregará el paquete de pegatinas (deje que sea webp estático o animado). Pero si configuro ese indicador como verdadero, esos webp animados serán rechazados por el paquete que muestra el error de que hay un problema con este paquete... . Entonces podría ser que los marcos sean menores de lo requerido. Se acepta como estático, lo que significa que puede tener un solo cuadro. Para evitar problemas relacionados con el tipo de archivo, el formato, el tamaño y todo lo demás, estoy usando los archivos de muestra de la aplicación de muestra de WhatsApp
Código:
public static void SaveImage(Bitmap finalBitmap, String name, String identifier) { String root = path + "/" + identifier; File myDir = new File(root); myDir.mkdirs(); String fname = name; File file = new File(myDir, fname); if (file.exists()){ file.delete(); } try { // FileOutputStream FileOutputStream out = new FileOutputStream(file); // Bitmap.compress finalBitmap.compress(Bitmap.CompressFormat.WEBP, 100, out); // close out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } ////////////////////Other methods before saving images private Bitmap downloadImageBitmap(String sUrl, String sIdentifier, String sName) { imageFileName = getLastBitFromUrl(sUrl).replace(".png", ".webp"); identifier = sIdentifier; name = sName; Bitmap bitmap = null; try { InputStream inputStream = new URL(sUrl).openStream(); // Download Image from URL bitmap = BitmapFactory.decodeStream(inputStream); // Decode Bitmap inputStream.close(); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected Bitmap doInBackground(String... params) { return downloadImageBitmap(params[0], params[1], params[2]); } protected void onPostExecute(Bitmap result) { SaveImage(result, imageFileName, identifier); }Puedes descargar y guardar en doInBackground()
InputStream inputStream = new URL(sUrl).openStream(); // Download Image from URL FileOutputStream out = new FileOutputStream(file);Luego haga un bucle donde lea bytes en un búfer desde el flujo de entrada y escriba en el flujo de salida.
No olvide cerrar todas las transmisiones cuando haya terminado.