WIP
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) {