diff --git a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
index 66598ef387a5ea25c7e9bb08cec4c4960fa512b3..f2da8343544f6b9178e66d849ea78ac33817cf3b 100644
--- a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
+++ b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
@@ -4025,13 +4025,16 @@ class ContentObjectRenderer implements LoggerAwareInterface
         $imageResource = null;
         if ($file === 'GIFBUILDER') {
             $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-            $theImage = '';
             if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
                 $gifCreator->start($fileArray, $this->data);
                 $theImage = $gifCreator->gifBuild();
+                if (!empty($theImage)) {
+                    // Use absolute path to retrieve image dimension to mitigate path inconsistency in cli context,
+                    // but use the relative path for further processing.
+                    $imageResource = $gifCreator->getImageDimensions(Environment::getPublicPath() . '/' . $theImage);
+                    $imageResource['origFile'] = $theImage;
+                }
             }
-            $imageResource = $gifCreator->getImageDimensions($theImage);
-            $imageResource['origFile'] = $theImage;
         } else {
             if ($file instanceof File) {
                 $fileObject = $file;
diff --git a/typo3/sysext/frontend/Classes/Imaging/GifBuilder.php b/typo3/sysext/frontend/Classes/Imaging/GifBuilder.php
index badd559d9e82eb76f71388b24f839091c6b4c2b0..78ac8522e5ee3c331a0c5081f3fc0e5245716f7a 100644
--- a/typo3/sysext/frontend/Classes/Imaging/GifBuilder.php
+++ b/typo3/sysext/frontend/Classes/Imaging/GifBuilder.php
@@ -346,12 +346,12 @@ class GifBuilder extends GraphicalFunctions
             // Relative to Environment::getPublicPath()
             $gifFileName = $this->fileName('assets/images/');
             // File exists
-            if (!file_exists($gifFileName)) {
+            if (!file_exists(Environment::getPublicPath() . '/' . $gifFileName)) {
                 // Create temporary directory if not done:
                 GeneralUtility::mkdir_deep(Environment::getPublicPath() . '/typo3temp/assets/images/');
                 // Create file:
                 $this->make();
-                $this->output($gifFileName);
+                $this->output(Environment::getPublicPath() . '/' . $gifFileName);
                 $this->destroy();
             }
             return $gifFileName;
diff --git a/typo3/sysext/frontend/Tests/Functional/Imaging/GifBuilderTest.php b/typo3/sysext/frontend/Tests/Functional/Imaging/GifBuilderTest.php
index df2e467f1ce00df662400215636d1c6768e20798..2a5bdf344256b2670910c6cad780c8fac8e21928 100644
--- a/typo3/sysext/frontend/Tests/Functional/Imaging/GifBuilderTest.php
+++ b/typo3/sysext/frontend/Tests/Functional/Imaging/GifBuilderTest.php
@@ -30,6 +30,44 @@ use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
  */
 class GifBuilderTest extends FunctionalTestCase
 {
+    /**
+     * Sets up Environment to simulate Composer mode and a cli request
+     */
+    protected function simulateCliRequestInComposerMode(): void
+    {
+        Environment::initialize(
+            Environment::getContext(),
+            true,
+            true,
+            Environment::getProjectPath(),
+            Environment::getPublicPath() . '/public',
+            Environment::getVarPath(),
+            Environment::getConfigPath(),
+            Environment::getCurrentScript(),
+            Environment::isWindows() ? 'WINDOWS' : 'UNIX'
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function buildImageInCommandLineInterfaceAndComposerContext(): void
+    {
+        $this->simulateCliRequestInComposerMode();
+
+        $fileArray = [
+            'XY' => '10,10',
+            'format' => 'jpg',
+        ];
+
+        $gifBuilder = new GifBuilder();
+        $gifBuilder->start($fileArray, []);
+        $gifFileName = $gifBuilder->gifBuild();
+
+        self::assertFileDoesNotExist(Environment::getProjectPath() . '/' . $gifFileName);
+        self::assertFileExists(Environment::getPublicPath() . '/' . $gifFileName);
+    }
+
     /**
      * Check hashes of Images overlayed with other images are idempotent
      *
@@ -59,8 +97,10 @@ class GifBuilderTest extends FunctionalTestCase
             'quality' => 88,
             '10' => 'IMAGE',
             '10.' => [
-                'file.width' => 300,
                 'file' => $file,
+                'file.' => [
+                    'width' => 300,
+                ],
             ],
             '30' => 'IMAGE',
             '30.' => [