[Telemetry] Apply transparency workaround everywhere

Applies a workaround for transparent PNGs (namely for Fuchsia) that was
present in the numpy/cv2 codepath to the pure Python codepaths. This
fixes the issue where pixel tests on Fuchsia fail when under Python 3
due to having a black background caused by transparency.

Bug: chromium:1198237
Change-Id: Icc809440369fe0aa34568ce226b6fd6fa9f68bcb
Reviewed-on: https://chromium-review.googlesource.com/c/catapult/+/3283331
Auto-Submit: Brian Sheedy <bsheedy@chromium.org>
Commit-Queue: Wenbin Zhang <wenbinzhang@google.com>
Reviewed-by: Wenbin Zhang <wenbinzhang@google.com>
diff --git a/telemetry/telemetry/internal/image_processing/_bitmap.py b/telemetry/telemetry/internal/image_processing/_bitmap.py
index 62a4ef4..5f9d7d2 100644
--- a/telemetry/telemetry/internal/image_processing/_bitmap.py
+++ b/telemetry/telemetry/internal/image_processing/_bitmap.py
@@ -158,6 +158,15 @@
         'Using pure python png decoder, which could be very slow. To speed up, '
         'consider installing numpy & cv2 (OpenCV).')
     width, height, pixels, meta = png.Reader(bytes=png_data).read_flat()
+    # Some platforms set a transparent background. For consistency, we override
+    # transparency to white.
+    if meta['alpha']:
+      for i in range(3, len(pixels), 4):
+        if pixels[i] == 0:
+          pixels[i] = 255
+          pixels[i - 1] = 255
+          pixels[i - 2] = 255
+          pixels[i - 3] = 255
     return Bitmap(4 if meta['alpha'] else 3, width, height, pixels, meta)
 
   @staticmethod
diff --git a/telemetry/telemetry/internal/image_processing/image_util_numpy_impl.py b/telemetry/telemetry/internal/image_processing/image_util_numpy_impl.py
index dc430eb..1f19a47 100644
--- a/telemetry/telemetry/internal/image_processing/image_util_numpy_impl.py
+++ b/telemetry/telemetry/internal/image_processing/image_util_numpy_impl.py
@@ -84,6 +84,14 @@
         'Using pure python png decoder, which could be very slow. To speed up, '
         'consider installing numpy & cv2 (OpenCV).')
     width, height, pixels, meta = png.Reader(bytes=png_data).read_flat()
+    # Same as the cv2 path - override transparent pixels to be white.
+    if meta['alpha']:
+      for i in range(3, len(pixels), 4):
+        if pixels[i] == 0:
+          pixels[i] = 255
+          pixels[i - 1] = 255
+          pixels[i - 2] = 255
+          pixels[i - 3] = 255
     return FromRGBPixels(width, height, pixels, 4 if meta['alpha'] else 3)
 
 def _SimpleDiff(image1, image2):