[web] Fix paragraph positioning (#18329)

* Fix text positioning
* Update golden locks
diff --git a/lib/web_ui/dev/goldens_lock.yaml b/lib/web_ui/dev/goldens_lock.yaml
index 7fa819e..b3e80ab 100644
--- a/lib/web_ui/dev/goldens_lock.yaml
+++ b/lib/web_ui/dev/goldens_lock.yaml
@@ -1,2 +1,2 @@
 repository: https://github.com/flutter/goldens.git
-revision: b38daf293027908861f16362b378ca6865518ded
+revision: 33b24a20bb9717699b847f633278f2b7bffde875
diff --git a/lib/web_ui/lib/src/engine/bitmap_canvas.dart b/lib/web_ui/lib/src/engine/bitmap_canvas.dart
index cc87fdc..ea1441a 100644
--- a/lib/web_ui/lib/src/engine/bitmap_canvas.dart
+++ b/lib/web_ui/lib/src/engine/bitmap_canvas.dart
@@ -714,6 +714,10 @@
       rootElement.append(paragraphElement);
     }
     _children.add(paragraphElement);
+    // If there is a prior sibling such as img prevent left/top shift.
+    paragraphElement.style
+      ..left = "0px"
+      ..top = "0px";
     _closeCurrentCanvas();
   }
 
diff --git a/lib/web_ui/test/golden_tests/engine/canvas_image_blend_mode_test.dart b/lib/web_ui/test/golden_tests/engine/canvas_image_blend_mode_test.dart
index 2753863..ca30387 100644
--- a/lib/web_ui/test/golden_tests/engine/canvas_image_blend_mode_test.dart
+++ b/lib/web_ui/test/golden_tests/engine/canvas_image_blend_mode_test.dart
@@ -105,8 +105,43 @@
           maxDiffRatePercent: 8.0);
     });
   }
+
+  // Regression test for https://github.com/flutter/flutter/issues/56971
+  test('Draws image and paragraph at same vertical position', () async {
+    final RecordingCanvas rc = RecordingCanvas(
+        const Rect.fromLTRB(0, 0, 400, 400));
+    rc.save();
+    rc.drawRect(Rect.fromLTWH(0, 50, 200, 50), Paint()
+      ..color = white);
+    rc.drawImage(createTestImage(), Offset(0, 50),
+        Paint()
+          ..colorFilter = EngineColorFilter.mode(red, BlendMode.srcIn));
+
+    final Paragraph paragraph = createTestParagraph();
+    const double textLeft = 80.0;
+    const double textTop = 50.0;
+    const double widthConstraint = 300.0;
+    paragraph.layout(const ParagraphConstraints(width: widthConstraint));
+    rc.drawParagraph(paragraph, const Offset(textLeft, textTop));
+
+    rc.restore();
+    await _checkScreenshot(rc, 'canvas_image_blend_and_text',
+        maxDiffRatePercent: 8.0);
+  });
 }
 
+Paragraph createTestParagraph() {
+  final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle(
+    fontFamily: 'Ahem',
+    fontStyle: FontStyle.normal,
+    fontWeight: FontWeight.normal,
+    fontSize: 14.0,
+  ));
+  builder.addText('FOO');
+  return builder.build();
+}
+
+
 // 50x50 pixel flutter logo image.
 const String _flutterLogoBase64 =
     'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAKRlWElm'