[!!!][TASK] Remove option to generate PNGs limited to 64 colors
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Imaging / GraphicalFunctions.php
index 1d83888..ae0391d 100644 (file)
@@ -14,7 +14,11 @@ namespace TYPO3\CMS\Core\Imaging;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Cache\CacheManager;
+use TYPO3\CMS\Core\Charset\CharsetConverter;
+use TYPO3\CMS\Core\Utility\ArrayUtility;
 use TYPO3\CMS\Core\Utility\CommandUtility;
+use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 
@@ -27,11 +31,11 @@ use TYPO3\CMS\Core\Utility\MathUtility;
 class GraphicalFunctions
 {
     /**
-     * If set, there is no frame pointer prepended to the filenames.
+     * If set, the frame pointer is appended to the filenames.
      *
      * @var bool
      */
-    public $noFramePrepended = 0;
+    public $addFrameSelection = true;
 
     /**
      * This should be changed to 'png' if you want this class to read/make PNG-files instead!
@@ -48,13 +52,6 @@ class GraphicalFunctions
     public $gdlibExtensions = '';
 
     /**
-     * Set to TRUE if generated png's should be truecolor by default
-     *
-     * @var bool
-     */
-    public $png_truecolor = false;
-
-    /**
      * defines the RGB colorspace to use
      *
      * @var string
@@ -66,7 +63,7 @@ class GraphicalFunctions
      *
      * @var array
      */
-    protected $allowedColorSpaceNames = array(
+    protected $allowedColorSpaceNames = [
         'CMY',
         'CMYK',
         'Gray',
@@ -93,7 +90,7 @@ class GraphicalFunctions
         'YIQ',
         'YCbCr',
         'YUV'
-    );
+    ];
 
     /**
      * 16777216 Colors is the maximum value for PNG, JPEG truecolor images (24-bit, 8-bit / Channel)
@@ -125,12 +122,12 @@ class GraphicalFunctions
     /**
      * @var array
      */
-    public $cmds = array(
+    public $cmds = [
         'jpg' => '',
         'jpeg' => '',
         'gif' => '',
-        'png' => '-colors 64'
-    );
+        'png' => ''
+    ];
 
     /**
      * @var string
@@ -140,11 +137,6 @@ class GraphicalFunctions
     /**
      * @var bool
      */
-    public $V5_EFFECTS = 0;
-
-    /**
-     * @var bool
-     */
     public $mayScaleUp = 1;
 
     /**
@@ -196,12 +188,12 @@ class GraphicalFunctions
      *
      * @var array
      */
-    public $IM_commands = array();
+    public $IM_commands = [];
 
     /**
      * @var array
      */
-    public $workArea = array();
+    public $workArea = [];
 
     /**
      * Preserve the alpha transparency layer of read PNG images
@@ -211,13 +203,6 @@ class GraphicalFunctions
     protected $saveAlphaLayer = false;
 
     /**
-     * The temp-directory where to store the files. Normally relative to PATH_site but is allowed to be the absolute path AS LONG AS it is a subdir to PATH_site.
-     *
-     * @var string
-     */
-    public $tempPath = 'typo3temp/';
-
-    /**
      * Prefix for relative paths. Used in "show_item.php" script. Is prefixed the output file name IN imageMagickConvert()
      *
      * @var string
@@ -257,44 +242,73 @@ class GraphicalFunctions
      *
      * @var array
      */
-    public $colMap = array(
-        'aqua' => array(0, 255, 255),
-        'black' => array(0, 0, 0),
-        'blue' => array(0, 0, 255),
-        'fuchsia' => array(255, 0, 255),
-        'gray' => array(128, 128, 128),
-        'green' => array(0, 128, 0),
-        'lime' => array(0, 255, 0),
-        'maroon' => array(128, 0, 0),
-        'navy' => array(0, 0, 128),
-        'olive' => array(128, 128, 0),
-        'purple' => array(128, 0, 128),
-        'red' => array(255, 0, 0),
-        'silver' => array(192, 192, 192),
-        'teal' => array(0, 128, 128),
-        'yellow' => array(255, 255, 0),
-        'white' => array(255, 255, 255)
-    );
+    public $colMap = [
+        'aqua' => [0, 255, 255],
+        'black' => [0, 0, 0],
+        'blue' => [0, 0, 255],
+        'fuchsia' => [255, 0, 255],
+        'gray' => [128, 128, 128],
+        'green' => [0, 128, 0],
+        'lime' => [0, 255, 0],
+        'maroon' => [128, 0, 0],
+        'navy' => [0, 0, 128],
+        'olive' => [128, 128, 0],
+        'purple' => [128, 0, 128],
+        'red' => [255, 0, 0],
+        'silver' => [192, 192, 192],
+        'teal' => [0, 128, 128],
+        'yellow' => [255, 255, 0],
+        'white' => [255, 255, 255]
+    ];
 
     /**
      * Charset conversion object:
      *
-     * @var \TYPO3\CMS\Core\Charset\CharsetConverter
+     * @var CharsetConverter
      */
     public $csConvObj;
 
     /**
-     * Is set to the native character set of the input strings.
-     *
+     * @var int
+     */
+    public $jpegQuality = 85;
+
+    /**
      * @var string
      */
-    public $nativeCharset = '';
+    public $map = '';
+
+    /**
+     * This holds the operational setup.
+     * Basically this is a TypoScript array with properties.
+     *
+     * @var array
+     */
+    public $setup = [];
+
+    /**
+     * @var int
+     */
+    public $w = 0;
+
+    /**
+     * @var int
+     */
+    public $h = 0;
+
+    /**
+     * @var array
+     */
+    public $OFFSET;
+
+    /**
+     * @var resource
+     */
+    protected $im;
 
     /**
      * Init function. Must always call this when using the class.
      * This function will read the configuration information from $GLOBALS['TYPO3_CONF_VARS']['GFX'] can set some values in internal variables.
-     *
-     * @return void
      */
     public function init()
     {
@@ -308,31 +322,17 @@ class GraphicalFunctions
         if (function_exists('imagecreatefromgif') && function_exists('imagegif')) {
             $this->gdlibExtensions .= ',gif';
         }
-        if ($gfxConf['png_truecolor']) {
-            $this->png_truecolor = true;
-        }
 
-        if ($gfxConf['colorspace'] && in_array($gfxConf['colorspace'], $this->allowedColorSpaceNames, true)) {
-            $this->colorspace = $gfxConf['colorspace'];
+        if ($gfxConf['processor_colorspace'] && in_array($gfxConf['processor_colorspace'], $this->allowedColorSpaceNames, true)) {
+            $this->colorspace = $gfxConf['processor_colorspace'];
         }
 
-        if (!$gfxConf['im']) {
+        if (!$gfxConf['processor_enabled']) {
             $this->NO_IMAGE_MAGICK = 1;
         }
-        if (!$this->NO_IMAGE_MAGICK && (!$gfxConf['im_version_5'] || $gfxConf['im_version_5'] === 'im4' || $gfxConf['im_version_5'] === 'im5')) {
-            throw new \RuntimeException('Your TYPO3 installation is configured to use an old version of ImageMagick, which is not supported anymore. ' . 'Please upgrade to ImageMagick version 6 or GraphicksMagick and set $TYPO3_CONF_VARS[\'GFX\'][\'im_version_5\'] appropriately.', 1305059666);
-        }
-        // When GIFBUILDER gets used in truecolor mode
-        // No colors parameter if we generate truecolor images.
-        if ($this->png_truecolor) {
-            $this->cmds['png'] = '';
-        }
         // Setting default JPG parameters:
-        $this->jpegQuality = MathUtility::forceIntegerInRange($gfxConf['jpg_quality'], 10, 100, 75);
-        $this->cmds['jpg'] = ($this->cmds['jpeg'] = '-colorspace ' . $this->colorspace . ' -sharpen 50 -quality ' . $this->jpegQuality);
-        if ($gfxConf['im_noFramePrepended']) {
-            $this->noFramePrepended = 1;
-        }
+        $this->jpegQuality = MathUtility::forceIntegerInRange($gfxConf['jpg_quality'], 10, 100, 85);
+        $this->addFrameSelection = (bool)$gfxConf['processor_allowFrameSelection'];
         if ($gfxConf['gdlib_png']) {
             $this->gifExtension = 'png';
         }
@@ -342,30 +342,19 @@ class GraphicalFunctions
         // Effects in Imagemagick 5+ tends to render very slowly!!
         // - therefore must be disabled in order not to perform sharpen, blurring and such.
         $this->NO_IM_EFFECTS = 1;
-        $this->cmds['jpg'] = ($this->cmds['jpeg'] = '-colorspace ' . $this->colorspace . ' -quality ' . $this->jpegQuality);
+        $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace ' . $this->colorspace . ' -quality ' . $this->jpegQuality;
 
-        // ... but if 'im_v5effects' is set, enable effects
-        if ($gfxConf['im_v5effects']) {
+        // ... but if 'processor_effects' is set, enable effects
+        if ($gfxConf['processor_effects']) {
             $this->NO_IM_EFFECTS = 0;
-            $this->V5_EFFECTS = 1;
-            if ($gfxConf['im_v5effects'] > 0) {
-                $this->cmds['jpg'] = ($this->cmds['jpeg'] = '-colorspace ' . $this->colorspace . ' -quality ' . (int)$gfxConf['jpg_quality'] . $this->v5_sharpen(10));
-            }
+            $this->cmds['jpg'] .= $this->v5_sharpen(10);
+            $this->cmds['jpeg'] .= $this->v5_sharpen(10);
         }
         // Secures that images are not scaled up.
-        if ($gfxConf['im_noScaleUp']) {
+        if (!$gfxConf['processor_allowUpscaling']) {
             $this->mayScaleUp = 0;
         }
-        if (TYPO3_MODE == 'FE') {
-            $this->csConvObj = $GLOBALS['TSFE']->csConvObj;
-        } elseif (is_object($GLOBALS['LANG'])) {
-            // BE assumed:
-            $this->csConvObj = $GLOBALS['LANG']->csConvObj;
-        } else {
-            // The object may not exist yet, so we need to create it now. Happens in the Install Tool for example.
-            $this->csConvObj = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Charset\CharsetConverter::class);
-        }
-        $this->nativeCharset = 'utf-8';
+        $this->csConvObj = GeneralUtility::makeInstance(CharsetConverter::class);
     }
 
     /*************************************************
@@ -381,7 +370,6 @@ class GraphicalFunctions
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function maskImageOntoImage(&$im, $conf, $workArea)
@@ -417,13 +405,13 @@ class GraphicalFunctions
                     $Bcolor = imagecolorallocatealpha($destImg, 0, 0, 0, 127);
                     imagefill($destImg, 0, 0, $Bcolor);
                 } else {
-                    $Bcolor = ImageColorAllocate($destImg, 0, 0, 0);
-                    ImageFilledRectangle($destImg, 0, 0, $w, $h, $Bcolor);
+                    $Bcolor = imagecolorallocate($destImg, 0, 0, 0);
+                    imagefilledrectangle($destImg, 0, 0, $w, $h, $Bcolor);
                 }
                 $this->copyGifOntoGif($destImg, $cpImg, $conf, $workArea);
                 $this->ImageWrite($destImg, $theImage);
-                imageDestroy($cpImg);
-                imageDestroy($destImg);
+                imagedestroy($cpImg);
+                imagedestroy($destImg);
                 // Prepare mask image
                 $cpImg = $this->imageCreateFromFile($BBmask[3]);
                 $destImg = imagecreatetruecolor($w, $h);
@@ -432,23 +420,23 @@ class GraphicalFunctions
                     $Bcolor = imagecolorallocatealpha($destImg, 0, 0, 0, 127);
                     imagefill($destImg, 0, 0, $Bcolor);
                 } else {
-                    $Bcolor = ImageColorAllocate($destImg, 0, 0, 0);
-                    ImageFilledRectangle($destImg, 0, 0, $w, $h, $Bcolor);
+                    $Bcolor = imagecolorallocate($destImg, 0, 0, 0);
+                    imagefilledrectangle($destImg, 0, 0, $w, $h, $Bcolor);
                 }
                 $this->copyGifOntoGif($destImg, $cpImg, $conf, $workArea);
                 $this->ImageWrite($destImg, $theMask);
-                imageDestroy($cpImg);
-                imageDestroy($destImg);
+                imagedestroy($cpImg);
+                imagedestroy($destImg);
                 // Mask the images
                 $this->ImageWrite($im, $theDest);
                 // Let combineExec handle maskNegation
-                $this->combineExec($theDest, $theImage, $theMask, $theDest, true);
+                $this->combineExec($theDest, $theImage, $theMask, $theDest);
                 // The main image is loaded again...
                 $backIm = $this->imageCreateFromFile($theDest);
                 // ... and if nothing went wrong we load it onto the old one.
                 if ($backIm) {
                     if (!$this->saveAlphaLayer) {
-                        ImageColorTransparent($backIm, -1);
+                        imagecolortransparent($backIm, -1);
                     }
                     $im = $backIm;
                 }
@@ -468,7 +456,6 @@ class GraphicalFunctions
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), maskImageOntoImage()
      */
     public function copyImageOntoImage(&$im, $conf, $workArea)
@@ -480,7 +467,7 @@ class GraphicalFunctions
             }
             $cpImg = $this->imageCreateFromFile($conf['file']);
             $this->copyGifOntoGif($im, $cpImg, $conf, $workArea);
-            imageDestroy($cpImg);
+            imagedestroy($cpImg);
         }
     }
 
@@ -491,7 +478,6 @@ class GraphicalFunctions
      * @param resource $cpImg GDlib image pointer, source (top image)
      * @param array $conf TypoScript array with the properties for the IMAGE GIFBUILDER object. Only used for the "tile" property value.
      * @param array $workArea Work area
-     * @return void Works on the $im image pointer
      * @access private
      */
     public function copyGifOntoGif(&$im, $cpImg, $conf, $workArea)
@@ -501,7 +487,7 @@ class GraphicalFunctions
         $tile = GeneralUtility::intExplode(',', $conf['tile']);
         $tile[0] = MathUtility::forceIntegerInRange($tile[0], 1, 20);
         $tile[1] = MathUtility::forceIntegerInRange($tile[1], 1, 20);
-        $cpOff = $this->objPosition($conf, $workArea, array($cpW * $tile[0], $cpH * $tile[1]));
+        $cpOff = $this->objPosition($conf, $workArea, [$cpW * $tile[0], $cpH * $tile[1]]);
         for ($xt = 0; $xt < $tile[0]; $xt++) {
             $Xstart = $cpOff[0] + $cpW * $xt;
             // If this image is inside of the workArea, then go on
@@ -571,7 +557,6 @@ class GraphicalFunctions
      * @param int $dstHeight Destination height
      * @param int $srcWidth Source width
      * @param int $srcHeight Source height
-     * @return void
      * @access private
      */
     public function imagecopyresized(&$dstImg, $srcImg, $dstX, $dstY, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight)
@@ -601,7 +586,6 @@ class GraphicalFunctions
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function makeText(&$im, $conf, $workArea)
@@ -610,7 +594,7 @@ class GraphicalFunctions
         list($spacing, $wordSpacing) = $this->calcWordSpacing($conf);
         // Position
         $txtPos = $this->txtPosition($conf, $workArea, $conf['BBOX']);
-        $theText = $this->recodeString($conf['text']);
+        $theText = $conf['text'];
         if ($conf['imgMap'] && is_array($conf['imgMap.'])) {
             $this->addToMap($this->calcTextCordsForMap($conf['BBOX'][2], $txtPos, $conf['imgMap.']), $conf['imgMap.']);
         }
@@ -619,13 +603,13 @@ class GraphicalFunctions
             $cols = $this->convertColor($conf['fontColor']);
             // NiceText is calculated
             if (!$conf['niceText']) {
-                $Fcolor = ImageColorAllocate($im, $cols[0], $cols[1], $cols[2]);
+                $Fcolor = imagecolorallocate($im, $cols[0], $cols[1], $cols[2]);
                 // antiAliasing is setup:
                 $Fcolor = $conf['antiAlias'] ? $Fcolor : -$Fcolor;
                 for ($a = 0; $a < $conf['iterations']; $a++) {
                     // If any kind of spacing applys, we use this function:
                     if ($spacing || $wordSpacing) {
-                        $this->SpacedImageTTFText($im, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, self::prependAbsolutePath($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.']);
+                        $this->SpacedImageTTFText($im, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, GeneralUtility::getFileAbsFileName($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.']);
                     } else {
                         $this->renderTTFText($im, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, $conf['fontFile'], $theText, $conf['splitRendering.'], $conf);
                     }
@@ -645,37 +629,33 @@ class GraphicalFunctions
                 $newH = ceil($sF * imagesy($im));
                 // Make mask
                 $maskImg = imagecreatetruecolor($newW, $newH);
-                $Bcolor = ImageColorAllocate($maskImg, 255, 255, 255);
-                ImageFilledRectangle($maskImg, 0, 0, $newW, $newH, $Bcolor);
-                $Fcolor = ImageColorAllocate($maskImg, 0, 0, 0);
+                $Bcolor = imagecolorallocate($maskImg, 255, 255, 255);
+                imagefilledrectangle($maskImg, 0, 0, $newW, $newH, $Bcolor);
+                $Fcolor = imagecolorallocate($maskImg, 0, 0, 0);
                 // If any kind of spacing applies, we use this function:
                 if ($spacing || $wordSpacing) {
-                    $this->SpacedImageTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, self::prependAbsolutePath($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.'], $sF);
+                    $this->SpacedImageTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, GeneralUtility::getFileAbsFileName($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.'], $sF);
                 } else {
                     $this->renderTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, $conf['fontFile'], $theText, $conf['splitRendering.'], $conf, $sF);
                 }
                 $this->ImageWrite($maskImg, $fileMask);
-                ImageDestroy($maskImg);
+                imagedestroy($maskImg);
                 // Downscales the mask
                 if ($this->NO_IM_EFFECTS) {
                     $command = trim($this->scalecmd . ' ' . $w . 'x' . $h . '! -negate');
                 } else {
                     $command = trim($conf['niceText.']['before'] . ' ' . $this->scalecmd . ' ' . $w . 'x' . $h . '! ' . $conf['niceText.']['after'] . ' -negate');
                     if ($conf['niceText.']['sharpen']) {
-                        if ($this->V5_EFFECTS) {
-                            $command .= $this->v5_sharpen($conf['niceText.']['sharpen']);
-                        } else {
-                            $command .= ' -sharpen ' . MathUtility::forceIntegerInRange($conf['niceText.']['sharpen'], 1, 99);
-                        }
+                        $command .= $this->v5_sharpen($conf['niceText.']['sharpen']);
                     }
                 }
                 $this->imageMagickExec($fileMask, $fileMask, $command);
                 // Make the color-file
                 $colorImg = imagecreatetruecolor($w, $h);
-                $Ccolor = ImageColorAllocate($colorImg, $cols[0], $cols[1], $cols[2]);
-                ImageFilledRectangle($colorImg, 0, 0, $w, $h, $Ccolor);
+                $Ccolor = imagecolorallocate($colorImg, $cols[0], $cols[1], $cols[2]);
+                imagefilledrectangle($colorImg, 0, 0, $w, $h, $Ccolor);
                 $this->ImageWrite($colorImg, $fileColor);
-                ImageDestroy($colorImg);
+                imagedestroy($colorImg);
                 // The mask is applied
                 // The main pictures is saved temporarily
                 $this->ImageWrite($im, $fileMenu);
@@ -685,7 +665,7 @@ class GraphicalFunctions
                 // ... and if nothing went wrong we load it onto the old one.
                 if ($backIm) {
                     if (!$this->saveAlphaLayer) {
-                        ImageColorTransparent($backIm, -1);
+                        imagecolortransparent($backIm, -1);
                     }
                     $im = $backIm;
                 }
@@ -703,7 +683,7 @@ class GraphicalFunctions
      * Calculates text position for printing the text onto the image based on configuration like alignment and workarea.
      *
      * @param array $conf TypoScript array for the TEXT GIFBUILDER object
-     * @param array $workArea Workarea definition
+     * @param array $workArea Work area definition
      * @param array $BB Bounding box information, was set in \TYPO3\CMS\Frontend\Imaging\GifBuilder::start()
      * @return array [0]=x, [1]=y, [2]=w, [3]=h
      * @access private
@@ -716,7 +696,7 @@ class GraphicalFunctions
         $straightBB = $this->calcBBox($conf);
         // offset, align, valign, workarea
         // [0]=x, [1]=y, [2]=w, [3]=h
-        $result = array();
+        $result = [];
         $result[2] = $BB[0];
         $result[3] = $BB[1];
         $w = $workArea[2];
@@ -764,12 +744,12 @@ class GraphicalFunctions
     {
         $sF = $this->getTextScalFactor($conf);
         list($spacing, $wordSpacing) = $this->calcWordSpacing($conf, $sF);
-        $theText = $this->recodeString($conf['text']);
+        $theText = $conf['text'];
         $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $theText, $conf['splitRendering.'], $sF);
         $theBBoxInfo = $charInf;
         if ($conf['angle']) {
-            $xArr = array($charInf[0], $charInf[2], $charInf[4], $charInf[6]);
-            $yArr = array($charInf[1], $charInf[3], $charInf[5], $charInf[7]);
+            $xArr = [$charInf[0], $charInf[2], $charInf[4], $charInf[6]];
+            $yArr = [$charInf[1], $charInf[3], $charInf[5], $charInf[7]];
             $x = max($xArr) - min($xArr);
             $y = max($yArr) - min($yArr);
         } else {
@@ -790,12 +770,12 @@ class GraphicalFunctions
                     $x += $wordW + $wordSpacing;
                 }
             } else {
-                $utf8Chars = $this->singleChars($theText);
+                $utf8Chars = $this->csConvObj->utf8_to_numberarray($theText);
                 // For each UTF-8 char, do:
                 foreach ($utf8Chars as $char) {
                     $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $char, $conf['splitRendering.'], $sF);
                     $charW = $charInf[2] - $charInf[0];
-                    $x += $charW + ($char == ' ' ? $wordSpacing : $spacing);
+                    $x += $charW + ($char === ' ' ? $wordSpacing : $spacing);
                 }
             }
         } elseif (isset($conf['breakWidth']) && $conf['breakWidth'] && $this->getRenderedTextWidth($conf['text'], $conf) > $conf['breakWidth']) {
@@ -828,7 +808,7 @@ class GraphicalFunctions
                 unset($value);
             }
         }
-        return array($x, $y, $theBBoxInfo);
+        return [$x, $y, $theBBoxInfo];
     }
 
     /**
@@ -836,7 +816,6 @@ class GraphicalFunctions
      *
      * @param array $cords Coordinates for a polygon image map as created by ->calcTextCordsForMap()
      * @param array $conf Configuration for "imgMap." property of a TEXT GIFBUILDER object.
-     * @return void
      * @access private
      * @see makeText(), calcTextCordsForMap()
      */
@@ -890,7 +869,6 @@ class GraphicalFunctions
      * @param int $wordSpacing The spacing of words in pixels
      * @param array $splitRenderingConf Array
      * @param int $sF Scale factor
-     * @return void
      * @access private
      */
     public function SpacedImageTTFText(&$im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $text, $spacing, $wordSpacing, $splitRenderingConf, $sF = 1)
@@ -907,13 +885,13 @@ class GraphicalFunctions
                 $x += $wordW + $wordSpacing;
             }
         } else {
-            $utf8Chars = $this->singleChars($text);
+            $utf8Chars = $this->csConvObj->utf8_to_numberarray($text);
             // For each UTF-8 char, do:
             foreach ($utf8Chars as $char) {
                 $charInf = $this->ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $char, $splitRenderingConf, $sF);
                 $charW = $charInf[2] - $charInf[0];
                 $this->ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $char, $splitRenderingConf, $sF);
-                $x += $charW + ($char == ' ' ? $wordSpacing : $spacing);
+                $x += $charW + ($char === ' ' ? $wordSpacing : $spacing);
             }
         }
     }
@@ -935,25 +913,23 @@ class GraphicalFunctions
             // If any kind of spacing applys, we use this function:
             if ($spacing || $wordSpacing) {
                 return $conf['fontSize'];
-            } else {
-                do {
-                    // Determine bounding box.
-                    $bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $this->recodeString($conf['text']), $conf['splitRendering.']);
-                    if ($conf['angle'] < 0) {
-                        $pixelWidth = abs($bounds[4] - $bounds[0]);
-                    } elseif ($conf['angle'] > 0) {
-                        $pixelWidth = abs($bounds[2] - $bounds[6]);
-                    } else {
-                        $pixelWidth = abs($bounds[4] - $bounds[6]);
-                    }
-                    // Size is fine, exit:
-                    if ($pixelWidth <= $maxWidth) {
-                        break;
-                    } else {
-                        $conf['fontSize']--;
-                    }
-                } while ($conf['fontSize'] > 1);
             }
+            do {
+                // Determine bounding box.
+                $bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $conf['text'], $conf['splitRendering.']);
+                if ($conf['angle'] < 0) {
+                    $pixelWidth = abs($bounds[4] - $bounds[0]);
+                } elseif ($conf['angle'] > 0) {
+                    $pixelWidth = abs($bounds[2] - $bounds[6]);
+                } else {
+                    $pixelWidth = abs($bounds[4] - $bounds[6]);
+                }
+                // Size is fine, exit:
+                if ($pixelWidth <= $maxWidth) {
+                    break;
+                }
+                $conf['fontSize']--;
+            } while ($conf['fontSize'] > 1);
         }
         return $conf['fontSize'];
     }
@@ -972,11 +948,11 @@ class GraphicalFunctions
     public function ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $string, $splitRendering, $sF = 1)
     {
         // Initialize:
-        $offsetInfo = array();
+        $offsetInfo = [];
         $stringParts = $this->splitString($string, $splitRendering, $fontSize, $fontFile);
         // Traverse string parts:
         foreach ($stringParts as $strCfg) {
-            $fontFile = self::prependAbsolutePath($strCfg['fontFile']);
+            $fontFile = GeneralUtility::getFileAbsFileName($strCfg['fontFile']);
             if (is_readable($fontFile)) {
                 /**
                  * Calculate Bounding Box for part.
@@ -987,7 +963,7 @@ class GraphicalFunctions
                  */
                 $try = 0;
                 do {
-                    $calc = ImageTTFBBox(GeneralUtility::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, $fontFile, $strCfg['str']);
+                    $calc = imagettfbbox($this->compensateFontSizeiBasedOnFreetypeDpi($sF * $strCfg['fontSize']), $angle, $fontFile, $strCfg['str']);
                 } while ($calc[2] < 0 && $try++ < 10);
                 // Calculate offsets:
                 if (empty($offsetInfo)) {
@@ -1000,7 +976,7 @@ class GraphicalFunctions
                     $offsetInfo[5] += $calc[5] - $calc[7] - (int)$splitRendering['compY'] - (int)$strCfg['ySpaceBefore'] - (int)$strCfg['ySpaceAfter'];
                 }
             } else {
-                debug('cannot read file: ' . $fontFile, \TYPO3\CMS\Core\Imaging\GraphicalFunctions::class . '::ImageTTFBBoxWrapper()');
+                debug('cannot read file: ' . $fontFile, self::class . '::ImageTTFBBoxWrapper()');
             }
         }
         return $offsetInfo;
@@ -1019,7 +995,6 @@ class GraphicalFunctions
      * @param string $string (See argument for PHP function imageTTFtext()). UTF-8 string, possibly with entities in.
      * @param array $splitRendering Split-rendering configuration
      * @param int $sF Scale factor
-     * @return void
      */
     public function ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $color, $fontFile, $string, $splitRendering, $sF = 1)
     {
@@ -1034,7 +1009,7 @@ class GraphicalFunctions
             // Set custom color if any (only when niceText is off):
             if ($strCfg['color'] && $sF == 1) {
                 $cols = $this->convertColor($strCfg['color']);
-                $colorIndex = ImageColorAllocate($im, $cols[0], $cols[1], $cols[2]);
+                $colorIndex = imagecolorallocate($im, $cols[0], $cols[1], $cols[2]);
                 $colorIndex = $color >= 0 ? $colorIndex : -$colorIndex;
             }
             // Setting xSpaceBefore
@@ -1042,16 +1017,16 @@ class GraphicalFunctions
                 $x += (int)$strCfg['xSpaceBefore'];
                 $y -= (int)$strCfg['ySpaceBefore'];
             }
-            $fontFile = self::prependAbsolutePath($strCfg['fontFile']);
+            $fontFile = GeneralUtility::getFileAbsFileName($strCfg['fontFile']);
             if (is_readable($fontFile)) {
                 // Render part:
-                ImageTTFText($im, GeneralUtility::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, $x, $y, $colorIndex, $fontFile, $strCfg['str']);
+                imagettftext($im, $this->compensateFontSizeiBasedOnFreetypeDpi($sF * $strCfg['fontSize']), $angle, $x, $y, $colorIndex, $fontFile, $strCfg['str']);
                 // Calculate offset to apply:
-                $wordInf = ImageTTFBBox(GeneralUtility::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, self::prependAbsolutePath($strCfg['fontFile']), $strCfg['str']);
+                $wordInf = imagettfbbox($this->compensateFontSizeiBasedOnFreetypeDpi($sF * $strCfg['fontSize']), $angle, GeneralUtility::getFileAbsFileName($strCfg['fontFile']), $strCfg['str']);
                 $x += $wordInf[2] - $wordInf[0] + (int)$splitRendering['compX'] + (int)$strCfg['xSpaceAfter'];
                 $y += $wordInf[5] - $wordInf[7] - (int)$splitRendering['compY'] - (int)$strCfg['ySpaceAfter'];
             } else {
-                debug('cannot read file: ' . $fontFile, \TYPO3\CMS\Core\Imaging\GraphicalFunctions::class . '::ImageTTFTextWrapper()');
+                debug('cannot read file: ' . $fontFile, self::class . '::ImageTTFTextWrapper()');
             }
         }
     }
@@ -1068,16 +1043,16 @@ class GraphicalFunctions
     public function splitString($string, $splitRendering, $fontSize, $fontFile)
     {
         // Initialize by setting the whole string and default configuration as the first entry.
-        $result = array();
-        $result[] = array(
+        $result = [];
+        $result[] = [
             'str' => $string,
             'fontSize' => $fontSize,
             'fontFile' => $fontFile
-        );
+        ];
         // Traverse the split-rendering configuration:
         // Splitting will create more entries in $result with individual configurations.
         if (is_array($splitRendering)) {
-            $sKeyArray = \TYPO3\CMS\Core\TypoScript\TemplateService::sortedKeyList($splitRendering);
+            $sKeyArray = ArrayUtility::filterAndSortByNumericKeys($splitRendering);
             // Traverse configured options:
             foreach ($sKeyArray as $key) {
                 $cfg = $splitRendering[$key . '.'];
@@ -1085,17 +1060,17 @@ class GraphicalFunctions
                 switch ((string)$splitRendering[$key]) {
                     case 'highlightWord':
                         if ((string)$cfg['value'] !== '') {
-                            $newResult = array();
+                            $newResult = [];
                             // Traverse the current parts of the result array:
                             foreach ($result as $part) {
                                 // Explode the string value by the word value to highlight:
                                 $explodedParts = explode($cfg['value'], $part['str']);
                                 foreach ($explodedParts as $c => $expValue) {
                                     if ((string)$expValue !== '') {
-                                        $newResult[] = array_merge($part, array('str' => $expValue));
+                                        $newResult[] = array_merge($part, ['str' => $expValue]);
                                     }
                                     if ($c + 1 < count($explodedParts)) {
-                                        $newResult[] = array(
+                                        $newResult[] = [
                                             'str' => $cfg['value'],
                                             'fontSize' => $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
                                             'fontFile' => $cfg['fontFile'] ? $cfg['fontFile'] : $part['fontFile'],
@@ -1104,7 +1079,7 @@ class GraphicalFunctions
                                             'xSpaceAfter' => $cfg['xSpaceAfter'],
                                             'ySpaceBefore' => $cfg['ySpaceBefore'],
                                             'ySpaceAfter' => $cfg['ySpaceAfter']
-                                        );
+                                        ];
                                     }
                                 }
                             }
@@ -1124,14 +1099,14 @@ class GraphicalFunctions
                                     $ranges[$i][1] = $ranges[$i][0];
                                 }
                             }
-                            $newResult = array();
+                            $newResult = [];
                             // Traverse the current parts of the result array:
                             foreach ($result as $part) {
                                 // Initialize:
                                 $currentState = -1;
                                 $bankAccum = '';
                                 // Explode the string value by the word value to highlight:
-                                $utf8Chars = $this->singleChars($part['str']);
+                                $utf8Chars = $this->csConvObj->utf8_to_numberarray($part['str']);
                                 foreach ($utf8Chars as $utfChar) {
                                     // Find number and evaluate position:
                                     $uNumber = (int)$this->csConvObj->utf8CharToUnumber($utfChar);
@@ -1150,7 +1125,7 @@ class GraphicalFunctions
                                     if ($inRange != $currentState && $uNumber !== 9 && $uNumber !== 10 && $uNumber !== 13 && $uNumber !== 32) {
                                         // Set result:
                                         if ($bankAccum !== '') {
-                                            $newResult[] = array(
+                                            $newResult[] = [
                                                 'str' => $bankAccum,
                                                 'fontSize' => $currentState && $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
                                                 'fontFile' => $currentState && $cfg['fontFile'] ? $cfg['fontFile'] : $part['fontFile'],
@@ -1159,7 +1134,7 @@ class GraphicalFunctions
                                                 'xSpaceAfter' => $currentState ? $cfg['xSpaceAfter'] : '',
                                                 'ySpaceBefore' => $currentState ? $cfg['ySpaceBefore'] : '',
                                                 'ySpaceAfter' => $currentState ? $cfg['ySpaceAfter'] : ''
-                                            );
+                                            ];
                                         }
                                         // Initialize new settings:
                                         $currentState = $inRange;
@@ -1170,7 +1145,7 @@ class GraphicalFunctions
                                 }
                                 // Set result for FINAL part:
                                 if ($bankAccum !== '') {
-                                    $newResult[] = array(
+                                    $newResult[] = [
                                         'str' => $bankAccum,
                                         'fontSize' => $currentState && $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
                                         'fontFile' => $currentState && $cfg['fontFile'] ? $cfg['fontFile'] : $part['fontFile'],
@@ -1179,7 +1154,7 @@ class GraphicalFunctions
                                         'xSpaceAfter' => $currentState ? $cfg['xSpaceAfter'] : '',
                                         'ySpaceBefore' => $currentState ? $cfg['ySpaceBefore'] : '',
                                         'ySpaceAfter' => $currentState ? $cfg['ySpaceAfter'] : ''
-                                    );
+                                    ];
                                 }
                             }
                             // Set the new result as result array:
@@ -1210,7 +1185,7 @@ class GraphicalFunctions
         $wordSpacing = $wordSpacing ?: $spacing * 2;
         $spacing *= $scaleFactor;
         $wordSpacing *= $scaleFactor;
-        return array($spacing, $wordSpacing);
+        return [$spacing, $wordSpacing];
     }
 
     /**
@@ -1245,7 +1220,6 @@ class GraphicalFunctions
      * @param array $splitRendering Split-rendering configuration
      * @param array $conf The configuration
      * @param int $sF Scale factor
-     * @return void
      */
     protected function renderTTFText(&$im, $fontSize, $angle, $x, $y, $color, $fontFile, $string, $splitRendering, $conf, $sF = 1)
     {
@@ -1288,7 +1262,7 @@ class GraphicalFunctions
      */
     protected function getWordPairsForLineBreak($string)
     {
-        $wordPairs = array();
+        $wordPairs = [];
         $wordsArray = preg_split('#([- .,!:]+)#', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
         $wordsCount = count($wordsArray);
         for ($index = 0; $index < $wordsCount; $index += 2) {
@@ -1298,15 +1272,15 @@ class GraphicalFunctions
     }
 
     /**
-     * Gets the rendered text width.
+     * Gets the rendered text width
      *
      * @param string $text
      * @param array $conf
-     * @param int
+     * @return int
      */
     protected function getRenderedTextWidth($text, $conf)
     {
-        $bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $this->recodeString($text), $conf['splitRendering.']);
+        $bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $text, $conf['splitRendering.']);
         if ($conf['angle'] < 0) {
             $pixelWidth = abs($bounds[4] - $bounds[0]);
         } elseif ($conf['angle'] > 0) {
@@ -1350,7 +1324,6 @@ class GraphicalFunctions
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
      * @param array $txtConf TypoScript array with configuration for the associated TEXT GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), makeText()
      */
     public function makeOutline(&$im, $conf, $workArea, $txtConf)
@@ -1385,7 +1358,7 @@ class GraphicalFunctions
      */
     public function circleOffset($distance, $iterations)
     {
-        $res = array();
+        $res = [];
         if ($distance && $iterations) {
             for ($a = 0; $a < $iterations; $a++) {
                 $yOff = round(sin((2 * pi() / $iterations * ($a + 1))) * 100 * $distance);
@@ -1396,7 +1369,7 @@ class GraphicalFunctions
                 if ($xOff) {
                     $xOff = (int)(ceil(abs(($xOff / 100))) * ($xOff / abs($xOff)));
                 }
-                $res[$a] = array($xOff, $yOff);
+                $res[$a] = [$xOff, $yOff];
             }
         }
         return $res;
@@ -1409,7 +1382,6 @@ class GraphicalFunctions
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
      * @param array $txtConf TypoScript array with configuration for the associated TEXT GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), makeShadow()
      */
     public function makeEmboss(&$im, $conf, $workArea, $txtConf)
@@ -1432,7 +1404,6 @@ class GraphicalFunctions
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
      * @param array $txtConf TypoScript array with configuration for the associated TEXT GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), makeText(), makeEmboss()
      */
     public function makeShadow(&$im, $conf, $workArea, $txtConf)
@@ -1455,37 +1426,23 @@ class GraphicalFunctions
             // BlurColor Image laves
             $blurColImg = imagecreatetruecolor($w, $h);
             $bcols = $this->convertColor($conf['color']);
-            $Bcolor = ImageColorAllocate($blurColImg, $bcols[0], $bcols[1], $bcols[2]);
-            ImageFilledRectangle($blurColImg, 0, 0, $w, $h, $Bcolor);
+            $Bcolor = imagecolorallocate($blurColImg, $bcols[0], $bcols[1], $bcols[2]);
+            imagefilledrectangle($blurColImg, 0, 0, $w, $h, $Bcolor);
             $this->ImageWrite($blurColImg, $fileColor);
-            ImageDestroy($blurColImg);
+            imagedestroy($blurColImg);
             // The mask is made: BlurTextImage
             $blurTextImg = imagecreatetruecolor($w + $blurBorder * 2, $h + $blurBorder * 2);
             // Black background
-            $Bcolor = ImageColorAllocate($blurTextImg, 0, 0, 0);
-            ImageFilledRectangle($blurTextImg, 0, 0, $w + $blurBorder * 2, $h + $blurBorder * 2, $Bcolor);
+            $Bcolor = imagecolorallocate($blurTextImg, 0, 0, 0);
+            imagefilledrectangle($blurTextImg, 0, 0, $w + $blurBorder * 2, $h + $blurBorder * 2, $Bcolor);
             $txtConf['fontColor'] = 'white';
-            $blurBordArr = array($blurBorder, $blurBorder);
+            $blurBordArr = [$blurBorder, $blurBorder];
             $this->makeText($blurTextImg, $txtConf, $this->applyOffset($workArea, $blurBordArr));
             // Dump to temporary file
             $this->ImageWrite($blurTextImg, $fileMask);
             // Destroy
-            ImageDestroy($blurTextImg);
-            $command = '';
-            if ($this->V5_EFFECTS) {
-                $command .= $this->v5_blur($blurRate + 1);
-            } else {
-                // Blurring of the mask
-                // How many blur-commands that is executed. Min = 1;
-                $times = ceil($blurRate / 10);
-                // Here I boost the blur-rate so that it is 100 already at 25. The rest is done by up to 99 iterations of the blur-command.
-                $newBlurRate = $blurRate * 4;
-                $newBlurRate = MathUtility::forceIntegerInRange($newBlurRate, 1, 99);
-                // Building blur-command
-                for ($a = 0; $a < $times; $a++) {
-                    $command .= ' -blur ' . $blurRate;
-                }
-            }
+            imagedestroy($blurTextImg);
+            $command = $this->v5_blur($blurRate + 1);
             $this->imageMagickExec($fileMask, $fileMask, $command . ' +matte');
             // The mask is loaded again
             $blurTextImg_tmp = $this->imageCreateFromFile($fileMask);
@@ -1495,7 +1452,7 @@ class GraphicalFunctions
                 $blurTextImg = imagecreatetruecolor($w, $h);
                 $this->imagecopyresized($blurTextImg, $blurTextImg_tmp, 0, 0, $blurBorder, $blurBorder, $w, $h, $w, $h);
                 // Destroy the temporary mask
-                ImageDestroy($blurTextImg_tmp);
+                imagedestroy($blurTextImg_tmp);
                 // Adjust the mask
                 $intensity = 40;
                 if ($conf['intensity']) {
@@ -1512,7 +1469,7 @@ class GraphicalFunctions
                 // Dump the mask again
                 $this->ImageWrite($blurTextImg, $fileMask);
                 // Destroy the mask
-                ImageDestroy($blurTextImg);
+                imagedestroy($blurTextImg);
                 // The pictures are combined
                 // The main pictures is saved temporarily
                 $this->ImageWrite($im, $fileMenu);
@@ -1522,7 +1479,7 @@ class GraphicalFunctions
                 // ... and if nothing went wrong we load it onto the old one.
                 if ($backIm) {
                     if (!$this->saveAlphaLayer) {
-                        ImageColorTransparent($backIm, -1);
+                        imagecolortransparent($backIm, -1);
                     }
                     $im = $backIm;
                 }
@@ -1547,14 +1504,13 @@ class GraphicalFunctions
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function makeBox(&$im, $conf, $workArea)
     {
         $cords = GeneralUtility::intExplode(',', $conf['dimensions'] . ',,,');
         $conf['offset'] = $cords[0] . ',' . $cords[1];
-        $cords = $this->objPosition($conf, $workArea, array($cords[2], $cords[3]));
+        $cords = $this->objPosition($conf, $workArea, [$cords[2], $cords[3]]);
         $cols = $this->convertColor($conf['color']);
         $opacity = 0;
         if (isset($conf['opacity'])) {
@@ -1565,7 +1521,7 @@ class GraphicalFunctions
             $opacity = abs($opacity - 100);
             $opacity = round(127 * $opacity / 100);
         }
-        $tmpColor = ImageColorAllocateAlpha($im, $cols[0], $cols[1], $cols[2], $opacity);
+        $tmpColor = imagecolorallocatealpha($im, $cols[0], $cols[1], $cols[2], $opacity);
         imagefilledrectangle($im, $cords[0], $cords[1], $cords[0] + $cords[2] - 1, $cords[1] + $cords[3] - 1, $tmpColor);
     }
 
@@ -1587,7 +1543,6 @@ class GraphicalFunctions
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
      * @param array $workArea The current working area coordinates.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function makeEllipse(&$im, array $conf, array $workArea)
@@ -1596,7 +1551,7 @@ class GraphicalFunctions
         // Ellipse offset inside workArea (x/y)
         $conf['offset'] = $ellipseConfiguration[0] . ',' . $ellipseConfiguration[1];
         // @see objPosition
-        $imageCoordinates = $this->objPosition($conf, $workArea, array($ellipseConfiguration[2], $ellipseConfiguration[3]));
+        $imageCoordinates = $this->objPosition($conf, $workArea, [$ellipseConfiguration[2], $ellipseConfiguration[3]]);
         $color = $this->convertColor($conf['color']);
         $fillingColor = imagecolorallocate($im, $color[0], $color[1], $color[2]);
         imagefilledellipse($im, $imageCoordinates[0], $imageCoordinates[1], $imageCoordinates[2], $imageCoordinates[3], $fillingColor);
@@ -1608,7 +1563,6 @@ class GraphicalFunctions
      *
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), applyImageMagickToPHPGif()
      */
     public function makeEffect(&$im, $conf)
@@ -1640,24 +1594,16 @@ class GraphicalFunctions
             $effect = strtolower(trim($pairs[0]));
             switch ($effect) {
                 case 'gamma':
-                    $commands .= ' -gamma ' . doubleval($value);
+                    $commands .= ' -gamma ' . (float)$value;
                     break;
                 case 'blur':
                     if (!$this->NO_IM_EFFECTS) {
-                        if ($this->V5_EFFECTS) {
-                            $commands .= $this->v5_blur($value);
-                        } else {
-                            $commands .= ' -blur ' . MathUtility::forceIntegerInRange($value, 1, 99);
-                        }
+                        $commands .= $this->v5_blur($value);
                     }
                     break;
                 case 'sharpen':
                     if (!$this->NO_IM_EFFECTS) {
-                        if ($this->V5_EFFECTS) {
-                            $commands .= $this->v5_sharpen($value);
-                        } else {
-                            $commands .= ' -sharpen ' . MathUtility::forceIntegerInRange($value, 1, 99);
-                        }
+                        $commands .= $this->v5_sharpen($value);
                     }
                     break;
                 case 'rotate':
@@ -1710,14 +1656,13 @@ class GraphicalFunctions
      *
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make(), autoLevels(), outputLevels(), inputLevels()
      */
     public function adjust(&$im, $conf)
     {
         $setup = $conf['value'];
         if (!trim($setup)) {
-            return '';
+            return;
         }
         $effects = explode('|', $setup);
         foreach ($effects as $val) {
@@ -1735,7 +1680,7 @@ class GraphicalFunctions
                     $this->outputLevels($im, $params[0], $params[1]);
                     break;
                 case 'autolevels':
-                    $this->autoLevels($im);
+                    $this->autolevels($im);
                     break;
             }
         }
@@ -1746,7 +1691,6 @@ class GraphicalFunctions
      *
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function crop(&$im, $conf)
@@ -1755,13 +1699,13 @@ class GraphicalFunctions
         $this->setWorkArea('');
         $cords = GeneralUtility::intExplode(',', $conf['crop'] . ',,,');
         $conf['offset'] = $cords[0] . ',' . $cords[1];
-        $cords = $this->objPosition($conf, $this->workArea, array($cords[2], $cords[3]));
+        $cords = $this->objPosition($conf, $this->workArea, [$cords[2], $cords[3]]);
         $newIm = imagecreatetruecolor($cords[2], $cords[3]);
         $cols = $this->convertColor($conf['backColor'] ? $conf['backColor'] : $this->setup['backColor']);
-        $Bcolor = ImageColorAllocate($newIm, $cols[0], $cols[1], $cols[2]);
-        ImageFilledRectangle($newIm, 0, 0, $cords[2], $cords[3], $Bcolor);
-        $newConf = array();
-        $workArea = array(0, 0, $cords[2], $cords[3]);
+        $Bcolor = imagecolorallocate($newIm, $cols[0], $cols[1], $cols[2]);
+        imagefilledrectangle($newIm, 0, 0, $cords[2], $cords[3], $Bcolor);
+        $newConf = [];
+        $workArea = [0, 0, $cords[2], $cords[3]];
         if ($cords[0] < 0) {
             $workArea[0] = abs($cords[0]);
         } else {
@@ -1785,7 +1729,6 @@ class GraphicalFunctions
      *
      * @param resource $im GDlib image pointer
      * @param array $conf TypoScript array with configuration for the GIFBUILDER object.
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
     public function scale(&$im, $conf)
@@ -1797,7 +1740,7 @@ class GraphicalFunctions
             $theNewFile = $this->imageMagickConvert($theFile, $this->gifExtension, $conf['width'], $conf['height'], $conf['params']);
             $tmpImg = $this->imageCreateFromFile($theNewFile[3]);
             if ($tmpImg) {
-                ImageDestroy($im);
+                imagedestroy($im);
                 $im = $tmpImg;
                 $this->w = imagesx($im);
                 $this->h = imagesy($im);
@@ -1818,7 +1761,6 @@ class GraphicalFunctions
      * Setting internal working area boundaries (->workArea)
      *
      * @param string $workArea Working area dimensions, comma separated
-     * @return void
      * @access private
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::make()
      */
@@ -1842,16 +1784,14 @@ class GraphicalFunctions
     /**
      * Apply auto-levels to input image pointer
      *
-     * @param int $im GDlib Image Pointer
-     * @return void
+     * @param resource $im GDlib Image Pointer
      */
     public function autolevels(&$im)
     {
-        $totalCols = ImageColorsTotal($im);
-        $min = 255;
-        $max = 0;
+        $totalCols = imagecolorstotal($im);
+        $grayArr = [];
         for ($c = 0; $c < $totalCols; $c++) {
-            $cols = ImageColorsForIndex($im, $c);
+            $cols = imagecolorsforindex($im, $c);
             $grayArr[] = round(($cols['red'] + $cols['green'] + $cols['blue']) / 3);
         }
         $min = min($grayArr);
@@ -1859,11 +1799,11 @@ class GraphicalFunctions
         $delta = $max - $min;
         if ($delta) {
             for ($c = 0; $c < $totalCols; $c++) {
-                $cols = ImageColorsForIndex($im, $c);
+                $cols = imagecolorsforindex($im, $c);
                 $cols['red'] = floor(($cols['red'] - $min) / $delta * 255);
                 $cols['green'] = floor(($cols['green'] - $min) / $delta * 255);
                 $cols['blue'] = floor(($cols['blue'] - $min) / $delta * 255);
-                ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
+                imagecolorset($im, $c, $cols['red'], $cols['green'], $cols['blue']);
             }
         }
     }
@@ -1871,13 +1811,12 @@ class GraphicalFunctions
     /**
      * Apply output levels to input image pointer (decreasing contrast)
      *
-     * @param int $im GDlib Image Pointer
+     * @param resource $im GDlib Image Pointer
      * @param int $low The "low" value (close to 0)
      * @param int $high The "high" value (close to 255)
      * @param bool $swap If swap, then low and high are swapped. (Useful for negated masks...)
-     * @return void
      */
-    public function outputLevels(&$im, $low, $high, $swap = '')
+    public function outputLevels(&$im, $low, $high, $swap = false)
     {
         if ($low < $high) {
             $low = MathUtility::forceIntegerInRange($low, 0, 255);
@@ -1888,13 +1827,13 @@ class GraphicalFunctions
                 $high = 255 - $temp;
             }
             $delta = $high - $low;
-            $totalCols = ImageColorsTotal($im);
+            $totalCols = imagecolorstotal($im);
             for ($c = 0; $c < $totalCols; $c++) {
-                $cols = ImageColorsForIndex($im, $c);
+                $cols = imagecolorsforindex($im, $c);
                 $cols['red'] = $low + floor($cols['red'] / 255 * $delta);
                 $cols['green'] = $low + floor($cols['green'] / 255 * $delta);
                 $cols['blue'] = $low + floor($cols['blue'] / 255 * $delta);
-                ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
+                imagecolorset($im, $c, $cols['red'], $cols['green'], $cols['blue']);
             }
         }
     }
@@ -1902,10 +1841,9 @@ class GraphicalFunctions
     /**
      * Apply input levels to input image pointer (increasing contrast)
      *
-     * @param int $im GDlib Image Pointer
+     * @param resource $im GDlib Image Pointer
      * @param int $low The "low" value (close to 0)
      * @param int $high The "high" value (close to 255)
-     * @return void
      */
     public function inputLevels(&$im, $low, $high)
     {
@@ -1913,13 +1851,13 @@ class GraphicalFunctions
             $low = MathUtility::forceIntegerInRange($low, 0, 255);
             $high = MathUtility::forceIntegerInRange($high, 0, 255);
             $delta = $high - $low;
-            $totalCols = ImageColorsTotal($im);
+            $totalCols = imagecolorstotal($im);
             for ($c = 0; $c < $totalCols; $c++) {
-                $cols = ImageColorsForIndex($im, $c);
+                $cols = imagecolorsforindex($im, $c);
                 $cols['red'] = MathUtility::forceIntegerInRange(($cols['red'] - $low) / $delta * 255, 0, 255);
                 $cols['green'] = MathUtility::forceIntegerInRange(($cols['green'] - $low) / $delta * 255, 0, 255);
                 $cols['blue'] = MathUtility::forceIntegerInRange(($cols['blue'] - $low) / $delta * 255, 0, 255);
-                ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
+                imagecolorset($im, $c, $cols['red'], $cols['green'], $cols['blue']);
             }
         }
     }
@@ -1936,14 +1874,13 @@ class GraphicalFunctions
         $fI = GeneralUtility::split_fileref($file);
         $ext = strtolower($fI['fileext']);
         $result = $this->randomName() . '.' . $ext;
-        if (($reduce = MathUtility::forceIntegerInRange($cols, 0, $ext == 'gif' ? 256 : $this->truecolorColors, 0)) > 0) {
+        $reduce = MathUtility::forceIntegerInRange($cols, 0, $ext === 'gif' ? 256 : $this->truecolorColors, 0);
+        if ($reduce > 0) {
             $params = ' -colors ' . $reduce;
             if ($reduce <= 256) {
                 $params .= ' -type Palette';
             }
-            if ($ext == 'png' && $reduce <= 256) {
-                $prefix = 'png8:';
-            }
+            $prefix = $ext === 'png' && $reduce <= 256 ? 'png8:' : '';
             $this->imageMagickExec($file, $prefix . $result, $params);
             if ($result) {
                 return $result;
@@ -1958,22 +1895,7 @@ class GraphicalFunctions
      *
      *********************************/
     /**
-     * Checks if the $fontFile is already at an absolute path and if not, prepends the correct path.
-     * Use PATH_site unless we are in the backend.
-     * Call it by \TYPO3\CMS\Core\Imaging\GraphicalFunctions::prependAbsolutePath()
-     *
-     * @param string $fontFile The font file
-     * @return string The font file with absolute path.
-     */
-    public function prependAbsolutePath($fontFile)
-    {
-        $absPath = defined('PATH_typo3') ? dirname(PATH_thisScript) . '/' : PATH_site;
-        $fontFile = GeneralUtility::isAbsPath($fontFile) ? $fontFile : GeneralUtility::resolveBackPath($absPath . $fontFile);
-        return $fontFile;
-    }
-
-    /**
-     * Returns the IM command for sharpening with ImageMagick 5 (when $this->V5_EFFECTS is set).
+     * Returns the IM command for sharpening with ImageMagick 5
      * Uses $this->im5fx_sharpenSteps for translation of the factor to an actual command.
      *
      * @param int $factor The sharpening factor, 0-100 (effectively in 10 steps)
@@ -1986,13 +1908,13 @@ class GraphicalFunctions
         $sharpenArr = explode(',', ',' . $this->im5fx_sharpenSteps);
         $sharpenF = trim($sharpenArr[$factor]);
         if ($sharpenF) {
-            $cmd = ' -sharpen ' . $sharpenF;
-            return $cmd;
+            return ' -sharpen ' . $sharpenF;
         }
+        return '';
     }
 
     /**
-     * Returns the IM command for blurring with ImageMagick 5 (when $this->V5_EFFECTS is set).
+     * Returns the IM command for blurring with ImageMagick 5.
      * Uses $this->im5fx_blurSteps for translation of the factor to an actual command.
      *
      * @param int $factor The blurring factor, 0-100 (effectively in 10 steps)
@@ -2005,21 +1927,21 @@ class GraphicalFunctions
         $blurArr = explode(',', ',' . $this->im5fx_blurSteps);
         $blurF = trim($blurArr[$factor]);
         if ($blurF) {
-            $cmd = ' -blur ' . $blurF;
-            return $cmd;
+            return ' -blur ' . $blurF;
         }
+        return '';
     }
 
     /**
-     * Returns a random filename prefixed with "temp_" and then 32 char md5 hash (without extension) from $this->tempPath.
-     * Used by functions in this class to create truely temporary files for the on-the-fly processing. These files will most likely be deleted right away.
+     * Returns a random filename prefixed with "temp_" and then 32 char md5 hash (without extension).
+     * Used by functions in this class to create truly temporary files for the on-the-fly processing. These files will most likely be deleted right away.
      *
      * @return string
      */
     public function randomName()
     {
-        $this->createTempSubDir('temp/');
-        return $this->tempPath . 'temp/' . md5(uniqid('', true));
+        GeneralUtility::mkdir_deep(PATH_site . 'typo3temp/var/transient/');
+        return PATH_site . 'typo3temp/var/transient/' . md5(uniqid('', true));
     }
 
     /**
@@ -2046,15 +1968,15 @@ class GraphicalFunctions
      */
     public function convertColor($string)
     {
-        $col = array();
+        $col = [];
         $cParts = explode(':', $string, 2);
         // Finding the RGB definitions of the color:
         $string = $cParts[0];
         if (strstr($string, '#')) {
             $string = preg_replace('/[^A-Fa-f0-9]*/', '', $string);
-            $col[] = HexDec(substr($string, 0, 2));
-            $col[] = HexDec(substr($string, 2, 2));
-            $col[] = HexDec(substr($string, 4, 2));
+            $col[] = hexdec(substr($string, 0, 2));
+            $col[] = hexdec(substr($string, 2, 2));
+            $col[] = hexdec(substr($string, 4, 2));
         } elseif (strstr($string, ',')) {
             $string = preg_replace('/[^,0-9]*/', '', $string);
             $strArr = explode(',', $string);
@@ -2066,14 +1988,14 @@ class GraphicalFunctions
             if ($this->colMap[$string]) {
                 $col = $this->colMap[$string];
             } else {
-                $col = array(0, 0, 0);
+                $col = [0, 0, 0];
             }
         }
         // ... and possibly recalculating the value
         if (trim($cParts[1])) {
             $cParts[1] = trim($cParts[1]);
             if ($cParts[1][0] === '*') {
-                $val = doubleval(substr($cParts[1], 1));
+                $val = (float)substr($cParts[1], 1);
                 $col[0] = MathUtility::forceIntegerInRange($col[0] * $val, 0, 255);
                 $col[1] = MathUtility::forceIntegerInRange($col[1] * $val, 0, 255);
                 $col[2] = MathUtility::forceIntegerInRange($col[2] * $val, 0, 255);
@@ -2088,50 +2010,10 @@ class GraphicalFunctions
     }
 
     /**
-     * Recode string
-     * Used with text strings for fonts when languages has other character sets.
-     *
-     * @param string The text to recode
-     * @return string The recoded string. Should be UTF-8 output. MAY contain entities (eg. &#123; or &#quot; which should render as real chars).
-     */
-    public function recodeString($string)
-    {
-        // Recode string to UTF-8 from $this->nativeCharset:
-        if ($this->nativeCharset && $this->nativeCharset != 'utf-8') {
-            // Convert to UTF-8
-            $string = $this->csConvObj->utf8_encode($string, $this->nativeCharset);
-        }
-        return $string;
-    }
-
-    /**
-     * Split a string into an array of individual characters
-     * The function will look at $this->nativeCharset and if that is set, the input string is expected to be UTF-8 encoded, possibly with entities in it. Otherwise the string is supposed to be a single-byte charset which is just splitted by a for-loop.
-     *
-     * @param string $theText The text string to split
-     * @param bool $returnUnicodeNumber Return Unicode numbers instead of chars.
-     * @return array Numerical array with a char as each value.
-     */
-    public function singleChars($theText, $returnUnicodeNumber = false)
-    {
-        if ($this->nativeCharset) {
-            // Get an array of separated UTF-8 chars
-            return $this->csConvObj->utf8_to_numberarray($theText, 1, $returnUnicodeNumber ? 0 : 1);
-        } else {
-            $output = array();
-            $c = strlen($theText);
-            for ($a = 0; $a < $c; $a++) {
-                $output[] = substr($theText, $a, 1);
-            }
-            return $output;
-        }
-    }
-
-    /**
      * Create an array with object position/boundaries based on input TypoScript configuration (such as the "align" property is used), the work area definition and $BB array
      *
      * @param array $conf TypoScript configuration for a GIFBUILDER object
-     * @param array makeBox Workarea definition
+     * @param array $workArea Workarea definition
      * @param array $BB BB (Bounding box) array. Not just used for TEXT objects but also for others
      * @return array [0]=x, [1]=y, [2]=w, [3]=h
      * @access private
@@ -2140,7 +2022,7 @@ class GraphicalFunctions
     public function objPosition($conf, $workArea, $BB)
     {
         // offset, align, valign, workarea
-        $result = array();
+        $result = [];
         $result[2] = $BB[0];
         $result[3] = $BB[1];
         $w = $workArea[2];
@@ -2190,106 +2072,107 @@ class GraphicalFunctions
      * @param string $frame Refers to which frame-number to select in the image. '' or 0 will select the first frame, 1 will select the next and so on...
      * @param array $options An array with options passed to getImageScale (see this function).
      * @param bool $mustCreate If set, then another image than the input imagefile MUST be returned. Otherwise you can risk that the input image is good enough regarding messures etc and is of course not rendered to a new, temporary file in typo3temp/. But this option will force it to.
-     * @return array [0]/[1] is w/h, [2] is file extension and [3] is the filename.
+     * @return array|null [0]/[1] is w/h, [2] is file extension and [3] is the filename.
      * @see getImageScale(), typo3/show_item.php, fileList_ext::renderImage(), \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::getImgResource(), SC_tslib_showpic::show(), maskImageOntoImage(), copyImageOntoImage(), scale()
      */
-    public function imageMagickConvert($imagefile, $newExt = '', $w = '', $h = '', $params = '', $frame = '', $options = array(), $mustCreate = false)
+    public function imageMagickConvert($imagefile, $newExt = '', $w = '', $h = '', $params = '', $frame = '', $options = [], $mustCreate = false)
     {
         if ($this->NO_IMAGE_MAGICK) {
             // Returning file info right away
             return $this->getImageDimensions($imagefile);
         }
-        if ($info = $this->getImageDimensions($imagefile)) {
-            $newExt = strtolower(trim($newExt));
-            // If no extension is given the original extension is used
-            if (!$newExt) {
+        $info = $this->getImageDimensions($imagefile);
+        if (!$info) {
+            return null;
+        }
+
+        $newExt = strtolower(trim($newExt));
+        // If no extension is given the original extension is used
+        if (!$newExt) {
+            $newExt = $info[2];
+        }
+        if ($newExt === 'web') {
+            if (GeneralUtility::inList($this->webImageExt, $info[2])) {
                 $newExt = $info[2];
-            }
-            if ($newExt == 'web') {
-                if (GeneralUtility::inList($this->webImageExt, $info[2])) {
-                    $newExt = $info[2];
-                } else {
-                    $newExt = $this->gif_or_jpg($info[2], $info[0], $info[1]);
-                    if (!$params) {
-                        $params = $this->cmds[$newExt];
-                    }
+            } else {
+                $newExt = $this->gif_or_jpg($info[2], $info[0], $info[1]);
+                if (!$params) {
+                    $params = $this->cmds[$newExt];
                 }
             }
-            if (GeneralUtility::inList($this->imageFileExt, $newExt)) {
-                if (strstr($w . $h, 'm')) {
-                    $max = 1;
-                } else {
-                    $max = 0;
-                }
-                $data = $this->getImageScale($info, $w, $h, $options);
-                $w = $data['origW'];
-                $h = $data['origH'];
-                // If no conversion should be performed
-                // this flag is TRUE if the width / height does NOT dictate
-                // the image to be scaled!! (that is if no width / height is
-                // given or if the destination w/h matches the original image
-                // dimensions or if the option to not scale the image is set)
-                $noScale = !$w && !$h || $data[0] == $info[0] && $data[1] == $info[1] || !empty($options['noScale']);
-                if ($noScale && !$data['crs'] && !$params && !$frame && $newExt == $info[2] && !$mustCreate) {
-                    // Set the new width and height before returning,
-                    // if the noScale option is set
-                    if (!empty($options['noScale'])) {
-                        $info[0] = $data[0];
-                        $info[1] = $data[1];
-                    }
-                    $info[3] = $imagefile;
-                    return $info;
-                }
+        }
+        if (!GeneralUtility::inList($this->imageFileExt, $newExt)) {
+            return null;
+        }
+
+        $data = $this->getImageScale($info, $w, $h, $options);
+        $w = $data['origW'];
+        $h = $data['origH'];
+        // If no conversion should be performed
+        // this flag is TRUE if the width / height does NOT dictate
+        // the image to be scaled!! (that is if no width / height is
+        // given or if the destination w/h matches the original image
+        // dimensions or if the option to not scale the image is set)
+        $noScale = !$w && !$h || $data[0] == $info[0] && $data[1] == $info[1] || !empty($options['noScale']);
+        if ($noScale && !$data['crs'] && !$params && !$frame && $newExt == $info[2] && !$mustCreate) {
+            // Set the new width and height before returning,
+            // if the noScale option is set
+            if (!empty($options['noScale'])) {
                 $info[0] = $data[0];
                 $info[1] = $data[1];
-                $frame = $this->noFramePrepended ? '' : (int)$frame;
-                if (!$params) {
-                    $params = $this->cmds[$newExt];
-                }
-                // Cropscaling:
-                if ($data['crs']) {
-                    if (!$data['origW']) {
-                        $data['origW'] = $data[0];
-                    }
-                    if (!$data['origH']) {
-                        $data['origH'] = $data[1];
-                    }
-                    $offsetX = (int)(($data[0] - $data['origW']) * ($data['cropH'] + 100) / 200);
-                    $offsetY = (int)(($data[1] - $data['origH']) * ($data['cropV'] + 100) / 200);
-                    $params .= ' -crop ' . $data['origW'] . 'x' . $data['origH'] . '+' . $offsetX . '+' . $offsetY . '! ';
-                }
-                $command = $this->scalecmd . ' ' . $info[0] . 'x' . $info[1] . '! ' . $params . ' ';
-                $cropscale = $data['crs'] ? 'crs-V' . $data['cropV'] . 'H' . $data['cropH'] : '';
-                if ($this->alternativeOutputKey) {
-                    $theOutputName = GeneralUtility::shortMD5($command . $cropscale . basename($imagefile) . $this->alternativeOutputKey . '[' . $frame . ']');
-                } else {
-                    $theOutputName = GeneralUtility::shortMD5($command . $cropscale . $imagefile . filemtime($imagefile) . '[' . $frame . ']');
-                }
-                if ($this->imageMagickConvert_forceFileNameBody) {
-                    $theOutputName = $this->imageMagickConvert_forceFileNameBody;
-                    $this->imageMagickConvert_forceFileNameBody = '';
-                }
-                // Making the temporary filename:
-                $this->createTempSubDir('pics/');
-                $output = $this->absPrefix . $this->tempPath . 'pics/' . $this->filenamePrefix . $theOutputName . '.' . $newExt;
-                if ($this->dontCheckForExistingTempFile || !file_exists($output)) {
-                    $this->imageMagickExec($imagefile, $output, $command, $frame);
-                }
-                if (file_exists($output)) {
-                    $info[3] = $output;
-                    $info[2] = $newExt;
-                    // params might change some image data!
-                    if ($params) {
-                        $info = $this->getImageDimensions($info[3]);
-                    }
-                    if ($info[2] == $this->gifExtension && !$this->dontCompress) {
-                        // Compress with IM (lzw) or GD (rle)  (Workaround for the absence of lzw-compression in GD)
-                        self::gifCompress($info[3], '');
-                    }
-                    return $info;
-                }
             }
+            $info[3] = $imagefile;
+            return $info;
+        }
+        $info[0] = $data[0];
+        $info[1] = $data[1];
+        $frame = $this->addFrameSelection ? (int)$frame : '';
+        if (!$params) {
+            $params = $this->cmds[$newExt];
+        }
+        // Cropscaling:
+        if ($data['crs']) {
+            if (!$data['origW']) {
+                $data['origW'] = $data[0];
+            }
+            if (!$data['origH']) {
+                $data['origH'] = $data[1];
+            }
+            $offsetX = (int)(($data[0] - $data['origW']) * ($data['cropH'] + 100) / 200);
+            $offsetY = (int)(($data[1] - $data['origH']) * ($data['cropV'] + 100) / 200);
+            $params .= ' -crop ' . $data['origW'] . 'x' . $data['origH'] . '+' . $offsetX . '+' . $offsetY . '! ';
+        }
+        $command = $this->scalecmd . ' ' . $info[0] . 'x' . $info[1] . '! ' . $params . ' ';
+        $cropscale = $data['crs'] ? 'crs-V' . $data['cropV'] . 'H' . $data['cropH'] : '';
+        if ($this->alternativeOutputKey) {
+            $theOutputName = GeneralUtility::shortMD5($command . $cropscale . basename($imagefile) . $this->alternativeOutputKey . '[' . $frame . ']');
+        } else {
+            $theOutputName = GeneralUtility::shortMD5($command . $cropscale . $imagefile . filemtime($imagefile) . '[' . $frame . ']');
         }
+        if ($this->imageMagickConvert_forceFileNameBody) {
+            $theOutputName = $this->imageMagickConvert_forceFileNameBody;
+            $this->imageMagickConvert_forceFileNameBody = '';
+        }
+        // Making the temporary filename:
+        GeneralUtility::mkdir_deep(PATH_site . 'typo3temp/assets/images/');
+        $output = $this->absPrefix . 'typo3temp/assets/images/' . $this->filenamePrefix . $theOutputName . '.' . $newExt;
+        if ($this->dontCheckForExistingTempFile || !file_exists($output)) {
+            $this->imageMagickExec($imagefile, $output, $command, $frame);
+        }
+        if (file_exists($output)) {
+            $info[3] = $output;
+            $info[2] = $newExt;
+            // params might change some image data!
+            if ($params) {
+                $info = $this->getImageDimensions($info[3]);
+            }
+            if ($info[2] == $this->gifExtension && !$this->dontCompress) {
+                // Compress with IM (lzw) or GD (rle)  (Workaround for the absence of lzw-compression in GD)
+                self::gifCompress($info[3], '');
+            }
+            return $info;
+        }
+        return null;
     }
 
     /**
@@ -2305,16 +2188,15 @@ class GraphicalFunctions
         if (file_exists($imageFile) && GeneralUtility::inList($this->imageFileExt, strtolower($reg[0]))) {
             if ($returnArr = $this->getCachedImageDimensions($imageFile)) {
                 return $returnArr;
+            }
+            if ($temp = @getimagesize($imageFile)) {
+                $returnArr = [$temp[0], $temp[1], strtolower($reg[0]), $imageFile];
             } else {
-                if ($temp = @getimagesize($imageFile)) {
-                    $returnArr = array($temp[0], $temp[1], strtolower($reg[0]), $imageFile);
-                } else {
-                    $returnArr = $this->imageMagickIdentify($imageFile);
-                }
-                if ($returnArr) {
-                    $this->cacheImageDimensions($returnArr);
-                    return $returnArr;
-                }
+                $returnArr = $this->imageMagickIdentify($imageFile);
+            }
+            if ($returnArr) {
+                $this->cacheImageDimensions($returnArr);
+                return $returnArr;
             }
         }
         return null;
@@ -2334,12 +2216,12 @@ class GraphicalFunctions
         $identifier = $this->generateCacheKeyForImageFile($filePath);
 
         /** @var \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend $cache */
-        $cache = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Cache\CacheManager::class)->getCache('cache_imagesizes');
-        $imageDimensions = array(
+        $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_imagesizes');
+        $imageDimensions = [
             'hash'        => $statusHash,
             'imagewidth'  => $identifyResult[0],
             'imageheight' => $identifyResult[1],
-        );
+        ];
         $cache->set($identifier, $imageDimensions);
 
         return true;
@@ -2358,7 +2240,7 @@ class GraphicalFunctions
         $statusHash = $this->generateStatusHashForImageFile($filePath);
         $identifier = $this->generateCacheKeyForImageFile($filePath);
         /** @var \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend $cache */
-        $cache = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Cache\CacheManager::class)->getCache('cache_imagesizes');
+        $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('cache_imagesizes');
         $cachedImageDimensions = $cache->get($identifier);
         if (!isset($cachedImageDimensions['hash'])) {
             return false;
@@ -2370,12 +2252,12 @@ class GraphicalFunctions
             $result = false;
         } else {
             preg_match('/([^\\.]*)$/', $filePath, $imageExtension);
-            $result = array(
+            $result = [
                 (int)$cachedImageDimensions['imagewidth'],
                 (int)$cachedImageDimensions['imageheight'],
                 strtolower($imageExtension[0]),
                 $filePath
-            );
+            ];
         }
 
         return $result;
@@ -2537,39 +2419,42 @@ class GraphicalFunctions
      *
      ***********************************/
     /**
-     * Returns an array where [0]/[1] is w/h, [2] is extension and [3] is the filename.
-     * Using ImageMagick
+     * Call the identify command
      *
      * @param string $imagefile The relative (to PATH_site) image filepath
-     * @return array
+     * @return array|null Returns an array where [0]/[1] is w/h, [2] is extension and [3] is the filename.
      */
     public function imageMagickIdentify($imagefile)
     {
-        if (!$this->NO_IMAGE_MAGICK) {
-            $frame = $this->noFramePrepended ? '' : '[0]';
-            $cmd = GeneralUtility::imageMagickCommand('identify', CommandUtility::escapeShellArgument($imagefile) . $frame);
-            $returnVal = array();
-            \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd, $returnVal);
-            $splitstring = array_pop($returnVal);
-            $this->IM_commands[] = array('identify', $cmd, $splitstring);
-            if ($splitstring) {
-                preg_match('/([^\\.]*)$/', $imagefile, $reg);
-                $splitinfo = explode(' ', $splitstring);
-                foreach ($splitinfo as $key => $val) {
-                    $temp = '';
-                    if ($val) {
-                        $temp = explode('x', $val);
-                    }
-                    if ((int)$temp[0] && (int)$temp[1]) {
-                        $dim = $temp;
-                        break;
-                    }
+        if ($this->NO_IMAGE_MAGICK) {
+            return null;
+        }
+
+        $frame = $this->addFrameSelection ? '[0]' : '';
+        $cmd = CommandUtility::imageMagickCommand('identify', CommandUtility::escapeShellArgument($imagefile) . $frame);
+        $returnVal = [];
+        CommandUtility::exec($cmd, $returnVal);
+        $splitstring = array_pop($returnVal);
+        $this->IM_commands[] = ['identify', $cmd, $splitstring];
+        if ($splitstring) {
+            preg_match('/([^\\.]*)$/', $imagefile, $reg);
+            $splitinfo = explode(' ', $splitstring);
+            $dim = false;
+            foreach ($splitinfo as $key => $val) {
+                $temp = '';
+                if ($val) {
+                    $temp = explode('x', $val);
                 }
-                if ($dim[0] && $dim[1]) {
-                    return array($dim[0], $dim[1], strtolower($reg[0]), $imagefile);
+                if ((int)$temp[0] && (int)$temp[1]) {
+                    $dim = $temp;
+                    break;
                 }
             }
+            if (!empty($dim[0]) && !empty($dim[1])) {
+                return [$dim[0], $dim[1], strtolower($reg[0]), $imagefile];
+            }
         }
+        return null;
     }
 
     /**
@@ -2584,21 +2469,18 @@ class GraphicalFunctions
      */
     public function imageMagickExec($input, $output, $params, $frame = 0)
     {
-        if (!$this->NO_IMAGE_MAGICK) {
-            // Unless noFramePrepended is set in the Install Tool, a frame number is added to
-            // select a specific page of the image (by default this will be the first page)
-            if (!$this->noFramePrepended) {
-                $frame = '[' . (int)$frame . ']';
-            } else {
-                $frame = '';
-            }
-            $cmd = GeneralUtility::imageMagickCommand('convert', $params . ' ' . CommandUtility::escapeShellArgument($input . $frame) . ' ' . CommandUtility::escapeShellArgument($output));
-            $this->IM_commands[] = array($output, $cmd);
-            $ret = \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
-            // Change the permissions of the file
-            GeneralUtility::fixPermissions($output);
-            return $ret;
+        if ($this->NO_IMAGE_MAGICK) {
+            return '';
         }
+        // If addFrameSelection is set in the Install Tool, a frame number is added to
+        // select a specific page of the image (by default this will be the first page)
+        $frame  = $this->addFrameSelection ? '[' . (int)$frame . ']' : '';
+        $cmd = CommandUtility::imageMagickCommand('convert', $params . ' ' . CommandUtility::escapeShellArgument($input . $frame) . ' ' . CommandUtility::escapeShellArgument($output));
+        $this->IM_commands[] = [$output, $cmd];
+        $ret = CommandUtility::exec($cmd);
+        // Change the permissions of the file
+        GeneralUtility::fixPermissions($output);
+        return $ret;
     }
 
     /**
@@ -2609,26 +2491,31 @@ class GraphicalFunctions
      * @param string $overlay The relative (to PATH_site) image filepath, overlay file (top)
      * @param string $mask The relative (to PATH_site) image filepath, the mask file (grayscale)
      * @param string $output The relative (to PATH_site) image filepath, output filename (written to)
-     * @param bool $handleNegation
-     * @return void
-     */
-    public function combineExec($input, $overlay, $mask, $output, $handleNegation = false)
-    {
-        if (!$this->NO_IMAGE_MAGICK) {
-            $params = '-colorspace GRAY +matte';
-            $theMask = $this->randomName() . '.' . $this->gifExtension;
-            $this->imageMagickExec($mask, $theMask, $params);
-            $cmd = GeneralUtility::imageMagickCommand('combine', '-compose over +matte ' . CommandUtility::escapeShellArgument($input) . ' ' . CommandUtility::escapeShellArgument($overlay) . ' ' . CommandUtility::escapeShellArgument($theMask) . ' ' . CommandUtility::escapeShellArgument($output));
-            // +matte = no alpha layer in output
-            $this->IM_commands[] = array($output, $cmd);
-            $ret = \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
-            // Change the permissions of the file
-            GeneralUtility::fixPermissions($output);
-            if (is_file($theMask)) {
-                @unlink($theMask);
-            }
-            return $ret;
+     * @return string
+     */
+    public function combineExec($input, $overlay, $mask, $output)
+    {
+        if ($this->NO_IMAGE_MAGICK) {
+            return '';
         }
+        $theMask = $this->randomName() . '.' . $this->gifExtension;
+        // +matte = no alpha layer in output
+        $this->imageMagickExec($mask, $theMask, '-colorspace GRAY +matte');
+
+        $parameters = '-compose over +matte '
+                      . CommandUtility::escapeShellArgument($input) . ' '
+                      . CommandUtility::escapeShellArgument($overlay) . ' '
+                      . CommandUtility::escapeShellArgument($theMask) . ' '
+                      . CommandUtility::escapeShellArgument($output);
+        $cmd = CommandUtility::imageMagickCommand('combine', $parameters);
+        $this->IM_commands[] = [$output, $cmd];
+        $ret = CommandUtility::exec($cmd);
+        // Change the permissions of the file
+        GeneralUtility::fixPermissions($output);
+        if (is_file($theMask)) {
+            @unlink($theMask);
+        }
+        return $ret;
     }
 
     /**
@@ -2637,7 +2524,7 @@ class GraphicalFunctions
      *
      * The function takes a file-reference, $theFile, and saves it again through GD or ImageMagick in order to compress the file
      * GIF:
-     * If $type is not set, the compression is done with ImageMagick (provided that $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path_lzw'] is pointing to the path of a lzw-enabled version of 'convert') else with GD (should be RLE-enabled!)
+     * If $type is not set, the compression is done with ImageMagick (provided that $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path_lzw'] is pointing to the path of a lzw-enabled version of 'convert') else with GD (should be RLE-enabled!)
      * If $type is set to either 'IM' or 'GD' the compression is done with ImageMagick and GD respectively
      * PNG:
      * No changes.
@@ -2656,12 +2543,12 @@ class GraphicalFunctions
             return '';
         }
 
-        if (($type === 'IM' || !$type) && $gfxConf['im'] && $gfxConf['im_path_lzw']) {
+        if (($type === 'IM' || !$type) && $gfxConf['processor_enabled'] && $gfxConf['processor_path_lzw']) {
             // Use temporary file to prevent problems with read and write lock on same file on network file systems
             $temporaryName = dirname($theFile) . '/' . md5(uniqid('', true)) . '.gif';
             // Rename could fail, if a simultaneous thread is currently working on the same thing
             if (@rename($theFile, $temporaryName)) {
-                $cmd = GeneralUtility::imageMagickCommand('convert', '"' . $temporaryName . '" "' . $theFile . '"', $gfxConf['im_path_lzw']);
+                $cmd = CommandUtility::imageMagickCommand('convert', '"' . $temporaryName . '" "' . $theFile . '"', $gfxConf['processor_path_lzw']);
                 CommandUtility::exec($cmd);
                 unlink($temporaryName);
             }
@@ -2670,9 +2557,9 @@ class GraphicalFunctions
                 GeneralUtility::fixPermissions($theFile);
             }
         } elseif (($type === 'GD' || !$type) && $gfxConf['gdlib'] && !$gfxConf['gdlib_png']) {
-            $tempImage = imageCreateFromGif($theFile);
-            imageGif($tempImage, $theFile);
-            imageDestroy($tempImage);
+            $tempImage = imagecreatefromgif($theFile);
+            imagegif($tempImage, $theFile);
+            imagedestroy($tempImage);
             $returnCode = 'GD';
             if (@is_file($theFile)) {
                 GeneralUtility::fixPermissions($theFile);
@@ -2685,20 +2572,6 @@ class GraphicalFunctions
     }
 
     /**
-     * Converts a png file to gif.
-     * This converts a png file to gif IF the FLAG $GLOBALS['TYPO3_CONF_VARS']['FE']['png_to_gif'] is set TRUE.
-     *
-     * @param string $theFile The filename with path
-     * @return string New filename or the old file name if no conversion happened
-     * @deprecated since TYPO3 CMS 7, will be removed with TYPO3 CMS 8, as the png_to_gif option has been removed with TYPO3 CMS 7
-     */
-    public static function pngToGifByImagemagick($theFile)
-    {
-        GeneralUtility::logDeprecatedFunction();
-        return $theFile;
-    }
-
-    /**
      * Returns filename of the png/gif version of the input file (which can be png or gif).
      * If input file type does not match the wanted output type a conversion is made and temp-filename returned.
      *
@@ -2708,21 +2581,23 @@ class GraphicalFunctions
      */
     public static function readPngGif($theFile, $output_png = false)
     {
-        if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['im'] || !@is_file($theFile)) {
+        if (!$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_enabled'] || !@is_file($theFile)) {
             return null;
         }
 
         $ext = strtolower(substr($theFile, -4, 4));
-        if ((string)$ext == '.png' && $output_png || (string)$ext == '.gif' && !$output_png) {
+        if ((string)$ext === '.png' && $output_png || (string)$ext === '.gif' && !$output_png) {
             return $theFile;
         }
 
-        if (!@is_dir(PATH_site . 'typo3temp/GraphicalResources/')) {
-            GeneralUtility::mkdir(PATH_site . 'typo3temp/GraphicalResources/');
+        if (!@is_dir(PATH_site . 'typo3temp/assets/images/')) {
+            GeneralUtility::mkdir_deep(PATH_site . 'typo3temp/assets/images/');
         }
-        $newFile = PATH_site . 'typo3temp/GraphicalResources/' . md5($theFile . '|' . filemtime($theFile)) . ($output_png ? '.png' : '.gif');
-        $cmd = GeneralUtility::imageMagickCommand(
-            'convert', '"' . $theFile . '" "' . $newFile . '"', $GLOBALS['TYPO3_CONF_VARS']['GFX']['im_path']
+        $newFile = PATH_site . 'typo3temp/assets/images/' . md5($theFile . '|' . filemtime($theFile)) . ($output_png ? '.png' : '.gif');
+        $cmd = CommandUtility::imageMagickCommand(
+            'convert',
+            '"' . $theFile . '" "' . $newFile . '"',
+            $GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path']
         );
         CommandUtility::exec($cmd);
         if (@is_file($newFile)) {
@@ -2737,47 +2612,12 @@ class GraphicalFunctions
      * Various IO functions
      *
      ***********************************/
-    /**
-     * Returns TRUE if the input file existed
-     *
-     * @param string $file Input file to check
-     * @return string Returns the filename if the file existed, otherwise empty.
-     */
-    public function checkFile($file)
-    {
-        if (@is_file($file)) {
-            return $file;
-        } else {
-            return '';
-        }
-    }
-
-    /**
-     * Creates subdirectory in typo3temp/ if not already found.
-     *
-     * @param string $dirName Name of sub directory
-     * @return bool Result of \TYPO3\CMS\Core\Utility\GeneralUtility::mkdir(), TRUE if it went well.
-     */
-    public function createTempSubDir($dirName)
-    {
-        // Checking if the this->tempPath is already prefixed with PATH_site and if not, prefix it with that constant.
-        if (GeneralUtility::isFirstPartOfStr($this->tempPath, PATH_site)) {
-            $tmpPath = $this->tempPath;
-        } else {
-            $tmpPath = PATH_site . $this->tempPath;
-        }
-        // Making the temporary filename:
-        if (!@is_dir(($tmpPath . $dirName))) {
-            return GeneralUtility::mkdir($tmpPath . $dirName);
-        }
-    }
 
     /**
      * Applies an ImageMagick parameter to a GDlib image pointer resource by writing the resource to file, performing an IM operation upon it and reading back the result into the ImagePointer.
      *
      * @param resource $im The image pointer (reference)
      * @param string $command The ImageMagick parameters. Like effects, scaling etc.
-     * @return void
      */
     public function applyImageMagickToPHPGif(&$im, $command)
     {
@@ -2787,7 +2627,7 @@ class GraphicalFunctions
         $this->imageMagickExec($theFile, $theFile, $command);
         $tmpImg = $this->imageCreateFromFile($theFile);
         if ($tmpImg) {
-            ImageDestroy($im);
+            imagedestroy($im);
             $im = $tmpImg;
             $this->w = imagesx($im);
             $this->h = imagesy($im);
@@ -2808,11 +2648,10 @@ class GraphicalFunctions
      */
     public function gif_or_jpg($type, $w, $h)
     {
-        if ($type == 'ai' || $w * $h < $this->pixelLimitGif) {
+        if ($type === 'ai' || $w * $h < $this->pixelLimitGif) {
             return $this->gifExtension;
-        } else {
-            return 'jpg';
         }
+        return 'jpg';
     }
 
     /**
@@ -2827,16 +2666,15 @@ class GraphicalFunctions
     public function output($file)
     {
         if ($file) {
-            $reg = array();
+            $reg = [];
             preg_match('/([^\\.]*)$/', $file, $reg);
             $ext = strtolower($reg[0]);
             switch ($ext) {
                 case 'gif':
-
                 case 'png':
                     if ($this->ImageWrite($this->im, $file)) {
                         // ImageMagick operations
-                        if ($this->setup['reduceColors'] || !$this->png_truecolor) {
+                        if ($this->setup['reduceColors']) {
                             $reduced = $this->IMreduceColors($file, MathUtility::forceIntegerInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256));
                             if ($reduced) {
                                 @copy($reduced, $file);
@@ -2849,15 +2687,13 @@ class GraphicalFunctions
                     }
                     break;
                 case 'jpg':
-
                 case 'jpeg':
                     // Use the default
                     $quality = 0;
                     if ($this->setup['quality']) {
                         $quality = MathUtility::forceIntegerInRange($this->setup['quality'], 10, 100);
                     }
-                    if ($this->ImageWrite($this->im, $file, $quality)) {
-                    }
+                    $this->ImageWrite($this->im, $file, $quality);
                     break;
             }
         }
@@ -2867,12 +2703,11 @@ class GraphicalFunctions
     /**
      * Destroy internal image pointer, $this->im
      *
-     * @return void
      * @see \TYPO3\CMS\Frontend\Imaging\GifBuilder::gifBuild()
      */
     public function destroy()
     {
-        ImageDestroy($this->im);
+        imagedestroy($this->im);
     }
 
     /**
@@ -2904,22 +2739,22 @@ class GraphicalFunctions
             case 'jpg':
 
             case 'jpeg':
-                if (function_exists('imageJpeg')) {
+                if (function_exists('imagejpeg')) {
                     if ($quality == 0) {
                         $quality = $this->jpegQuality;
                     }
-                    $result = imageJpeg($destImg, $theImage, $quality);
+                    $result = imagejpeg($destImg, $theImage, $quality);
                 }
                 break;
             case 'gif':
-                if (function_exists('imageGif')) {
+                if (function_exists('imagegif')) {
                     imagetruecolortopalette($destImg, true, 256);
-                    $result = imageGif($destImg, $theImage);
+                    $result = imagegif($destImg, $theImage);
                 }
                 break;
             case 'png':
-                if (function_exists('imagePng')) {
-                    $result = ImagePng($destImg, $theImage);
+                if (function_exists('imagepng')) {
+                    $result = imagepng($destImg, $theImage);
                 }
                 break;
         }
@@ -2943,12 +2778,12 @@ class GraphicalFunctions
         switch ($ext) {
             case 'gif':
                 if (function_exists('imagecreatefromgif')) {
-                    return imageCreateFromGif($sourceImg);
+                    return imagecreatefromgif($sourceImg);
                 }
                 break;
             case 'png':
                 if (function_exists('imagecreatefrompng')) {
-                    $imageHandle = imageCreateFromPng($sourceImg);
+                    $imageHandle = imagecreatefrompng($sourceImg);
                     if ($this->saveAlphaLayer) {
                         imagesavealpha($imageHandle, true);
                     }
@@ -2959,35 +2794,35 @@ class GraphicalFunctions
 
             case 'jpeg':
                 if (function_exists('imagecreatefromjpeg')) {
-                    return imageCreateFromJpeg($sourceImg);
+                    return imagecreatefromjpeg($sourceImg);
                 }
                 break;
         }
         // If non of the above:
         $i = @getimagesize($sourceImg);
         $im = imagecreatetruecolor($i[0], $i[1]);
-        $Bcolor = ImageColorAllocate($im, 128, 128, 128);
-        ImageFilledRectangle($im, 0, 0, $i[0], $i[1], $Bcolor);
+        $Bcolor = imagecolorallocate($im, 128, 128, 128);
+        imagefilledrectangle($im, 0, 0, $i[0], $i[1], $Bcolor);
         return $im;
     }
 
     /**
      * Returns the HEX color value for an RGB color array
      *
-     * @param array RGB color array
+     * @param array $color RGB color array
      * @return string HEX color value
      */
-    public function hexColor($col)
+    public function hexColor($color)
     {
-        $r = dechex($col[0]);
+        $r = dechex($color[0]);
         if (strlen($r) < 2) {
             $r = '0' . $r;
         }
-        $g = dechex($col[1]);
+        $g = dechex($color[1]);
         if (strlen($g) < 2) {
             $g = '0' . $g;
         }
-        $b = dechex($col[2]);
+        $b = dechex($color[2]);
         if (strlen($b) < 2) {
             $b = '0' . $b;
         }
@@ -3008,10 +2843,11 @@ class GraphicalFunctions
         if (is_array($colArr) && !empty($colArr) && function_exists('imagepng') && function_exists('imagecreatefrompng')) {
             $firstCol = array_shift($colArr);
             $firstColArr = $this->convertColor($firstCol);
+            $origName = $preName = $this->randomName() . '.png';
+            $postName = $this->randomName() . '.png';
+            $tmpImg = null;
             if (count($colArr) > 1) {
-                $origName = ($preName = $this->randomName() . '.png');
-                $postName = $this->randomName() . '.png';
-                $this->imageWrite($img, $preName);
+                $this->ImageWrite($img, $preName);
                 $firstCol = $this->hexColor($firstColArr);
                 foreach ($colArr as $transparentColor) {
                     $transparentColor = $this->convertColor($transparentColor);
@@ -3030,9 +2866,9 @@ class GraphicalFunctions
             if ($tmpImg) {
                 $img = $tmpImg;
                 if ($closest) {
-                    $retCol = ImageColorClosest($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
+                    $retCol = imagecolorclosest($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
                 } else {
-                    $retCol = ImageColorExact($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
+                    $retCol = imagecolorexact($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
                 }
             }
             // Unlink files from process
@@ -3057,7 +2893,6 @@ class GraphicalFunctions
      * @param string $textline1 Text line 1
      * @param string $textline2 Text line 2
      * @param string $textline3 Text line 3
-     * @return void
      * @throws \RuntimeException
      */
     public function getTemporaryImageWithText($filename, $textline1, $textline2, $textline3)
@@ -3066,35 +2901,47 @@ class GraphicalFunctions
             throw new \RuntimeException('TYPO3 Fatal Error: No gdlib. ' . $textline1 . ' ' . $textline2 . ' ' . $textline3, 1270853952);
         }
         // Creates the basis for the error image
-        $basePath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('core') . 'Resources/Public/Images/';
+        $basePath = ExtensionManagementUtility::extPath('core') . 'Resources/Public/Images/';
         if (!empty($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'])) {
             $im = imagecreatefrompng($basePath . 'NotFound.png');
         } else {
             $im = imagecreatefromgif($basePath . 'NotFound.gif');
         }
         // Sets background color and print color.
-        $white = imageColorAllocate($im, 255, 255, 255);
-        $black = imageColorAllocate($im, 0, 0, 0);
+        $white = imagecolorallocate($im, 255, 255, 255);
+        $black = imagecolorallocate($im, 0, 0, 0);
         // Prints the text strings with the build-in font functions of GD
         $x = 0;
         $font = 0;
         if ($textline1) {
             imagefilledrectangle($im, $x, 9, 56, 16, $white);
-            imageString($im, $font, $x, 9, $textline1, $black);
+            imagestring($im, $font, $x, 9, $textline1, $black);
         }
         if ($textline2) {
             imagefilledrectangle($im, $x, 19, 56, 26, $white);
-            imageString($im, $font, $x, 19, $textline2, $black);
+            imagestring($im, $font, $x, 19, $textline2, $black);
         }
         if ($textline3) {
             imagefilledrectangle($im, $x, 29, 56, 36, $white);
-            imageString($im, $font, $x, 29, substr($textline3, -14), $black);
+            imagestring($im, $font, $x, 29, substr($textline3, -14), $black);
         }
         // Outputting the image stream and exit
         if (!empty($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'])) {
-            imagePng($im, $filename);
+            imagepng($im, $filename);
         } else {
-            imageGif($im, $filename);
+            imagegif($im, $filename);
         }
     }
+
+    /**
+     * Function to compensate for DPI resolution.
+     * FreeType 2 always has 96 dpi, so it is hard-coded at this place.
+     *
+     * @param float $fontSize font size for freetype function call
+     * @return float compensated font size based on 96 dpi
+     */
+    protected function compensateFontSizeiBasedOnFreetypeDpi($fontSize)
+    {
+        return $fontSize / 96.0 * 72;
+    }
 }