diff --git a/testing/tools/pngdiffer.py b/testing/tools/pngdiffer.py
index f5b762c..3febf70 100755
--- a/testing/tools/pngdiffer.py
+++ b/testing/tools/pngdiffer.py
@@ -14,9 +14,10 @@
 
 class PNGDiffer():
 
-  def __init__(self, finder):
+  def __init__(self, finder, reverse_byte_order):
     self.pdfium_diff_path = finder.ExecutablePath('pdfium_diff')
     self.os_name = finder.os_name
+    self.reverse_byte_order = reverse_byte_order
 
   def CheckMissingTools(self, regenerate_expected):
     if (regenerate_expected and self.os_name == 'linux' and
@@ -63,15 +64,21 @@
       print "Checking " + actual_path
       sys.stdout.flush()
       if os.path.exists(expected_path):
-        error = common.RunCommand(
-            [self.pdfium_diff_path, expected_path, actual_path])
+        cmd = [self.pdfium_diff_path]
+        if self.reverse_byte_order:
+          cmd.append('--reverse-byte-order')
+        cmd.extend([expected_path, actual_path])
+        error = common.RunCommand(cmd)
       else:
         error = 1
       if error:
         # When failed, we check against platform based results.
         if os.path.exists(platform_expected_path):
-          error = common.RunCommand(
-              [self.pdfium_diff_path, platform_expected_path, actual_path])
+          cmd = [self.pdfium_diff_path]
+          if self.reverse_byte_order:
+            cmd.append('--reverse-byte-order')
+          cmd.extend([platform_expected_path, actual_path])
+          error = common.RunCommand(cmd)
         if error:
           print "FAILURE: " + input_filename + "; " + str(error)
           return True
diff --git a/testing/tools/test_runner.py b/testing/tools/test_runner.py
index 9c61080..69938c9 100644
--- a/testing/tools/test_runner.py
+++ b/testing/tools/test_runner.py
@@ -189,6 +189,9 @@
     if use_ahem:
       cmd_to_run.append('--font-dir=%s' % self.font_dir)
 
+    if self.options.reverse_byte_order:
+      cmd_to_run.append('--reverse-byte-order')
+
     cmd_to_run.append(pdf_path)
     return common.RunCommandExtractHashedFiles(cmd_to_run)
 
@@ -274,6 +277,12 @@
         'expected pngs.')
 
     parser.add_option(
+        '--reverse-byte-order',
+        action='store_true',
+        dest="reverse_byte_order",
+        help='Run image-based tests using --reverse-byte-order.')
+
+    parser.add_option(
         '--ignore_errors',
         action="store_true",
         dest="ignore_errors",
@@ -311,7 +320,8 @@
     self.feature_string = subprocess.check_output(
         [self.pdfium_test_path, '--show-config'])
     self.test_suppressor = suppressor.Suppressor(finder, self.feature_string)
-    self.image_differ = pngdiffer.PNGDiffer(finder)
+    self.image_differ = pngdiffer.PNGDiffer(finder,
+                                            self.options.reverse_byte_order)
     error_message = self.image_differ.CheckMissingTools(
         self.options.regenerate_expected)
     if error_message:
