diff --git a/LottieSample/src/main/assets/Tests/Airbnb400.zip b/LottieSample/src/main/assets/Tests/Airbnb400.zip
new file mode 100644
index 0000000..24021ad
--- /dev/null
+++ b/LottieSample/src/main/assets/Tests/Airbnb400.zip
Binary files differ
diff --git a/LottieSample/src/main/assets/Tests/Airbnb800.zip b/LottieSample/src/main/assets/Tests/Airbnb800.zip
new file mode 100644
index 0000000..97105b5
--- /dev/null
+++ b/LottieSample/src/main/assets/Tests/Airbnb800.zip
Binary files differ
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
index 40d511e..15399a0 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
@@ -14,6 +14,7 @@
 import com.airbnb.lottie.network.NetworkFetcher;
 import com.airbnb.lottie.parser.LottieCompositionParser;
 
+import com.airbnb.lottie.utils.Utils;
 import org.json.JSONObject;
 
 import java.io.IOException;
@@ -314,7 +315,7 @@
     for (Map.Entry<String, Bitmap> e : images.entrySet()) {
       LottieImageAsset imageAsset = findImageAssetForFileName(composition, e.getKey());
       if (imageAsset != null) {
-        imageAsset.setBitmap(e.getValue());
+        imageAsset.setBitmap(Utils.resizeBitmapIfNeeded(e.getValue(), imageAsset.getWidth(), imageAsset.getHeight()));
       }
     }
 
diff --git a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
index aff6f77..f31378d 100644
--- a/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
+++ b/lottie/src/main/java/com/airbnb/lottie/manager/ImageAssetManager.java
@@ -12,6 +12,7 @@
 import com.airbnb.lottie.ImageAssetDelegate;
 import com.airbnb.lottie.LottieImageAsset;
 import com.airbnb.lottie.utils.Logger;
+import com.airbnb.lottie.utils.Utils;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -113,6 +114,7 @@
       return null;
     }
     bitmap = BitmapFactory.decodeStream(is, null, opts);
+    bitmap = Utils.resizeBitmapIfNeeded(bitmap, asset.getWidth(), asset.getHeight());
     return putBitmap(id, bitmap);
   }
 
diff --git a/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java b/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
index cad6e2b..83110b2 100644
--- a/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
+++ b/lottie/src/main/java/com/airbnb/lottie/utils/Utils.java
@@ -228,6 +228,21 @@
   }
 
   /**
+   * Resize the bitmap to exactly the same size as the specified dimension, changing the aspect ratio if needed.
+   * Returns the original bitmap if the dimensions already match.
+   */
+  public static Bitmap resizeBitmapIfNeeded(Bitmap bitmap, int width, int height) {
+    if (bitmap.getWidth() == width && bitmap.getHeight() == height) {
+      return bitmap;
+    }
+    float scaleWidth = ((float) width) / bitmap.getWidth();
+    float scaleHeight = ((float) height) / bitmap.getHeight();
+    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
+    bitmap.recycle();
+    return resizedBitmap;
+  }
+
+  /**
    * For testing purposes only. DO NOT USE IN PRODUCTION.
    */
   public static Bitmap renderPath(Path path) {
