/** * {@inheritdoc} */ public function resize(ImageInterface $image, ResizeConfigurationInterface $config, ResizeOptionsInterface $options) { if (!empty($GLOBALS['TL_HOOKS']['executeResize']) && is_array($GLOBALS['TL_HOOKS']['executeResize']) || !empty($GLOBALS['TL_HOOKS']['getImage']) && is_array($GLOBALS['TL_HOOKS']['getImage'])) { @trigger_error('Using the executeResize and getImage hooks has been deprecated and will no longer work in Contao 5.0. Replace the contao.image.resizer service instead.', E_USER_DEPRECATED); $this->legacyImage = null; $legacyPath = $image->getPath(); if (0 === strpos($legacyPath, TL_ROOT . '/') || 0 === strpos($legacyPath, TL_ROOT . '\\')) { $legacyPath = substr($legacyPath, strlen(TL_ROOT) + 1); $this->legacyImage = new LegacyImage(new File($legacyPath)); $this->legacyImage->setTargetWidth($config->getWidth()); $this->legacyImage->setTargetHeight($config->getHeight()); $this->legacyImage->setResizeMode($config->getMode()); $this->legacyImage->setZoomLevel($config->getZoomLevel()); if ($options->getTargetPath() && (0 === strpos($options->getTargetPath(), TL_ROOT . '/') || 0 === strpos($options->getTargetPath(), TL_ROOT . '\\'))) { $this->legacyImage->setTargetPath(substr($options->getTargetPath(), strlen(TL_ROOT) + 1)); } $importantPart = $image->getImportantPart(); $this->legacyImage->setImportantPart(['x' => $importantPart->getPosition()->getX(), 'y' => $importantPart->getPosition()->getY(), 'width' => $importantPart->getSize()->getWidth(), 'height' => $importantPart->getSize()->getHeight()]); } } if (isset($GLOBALS['TL_HOOKS']['executeResize']) && is_array($GLOBALS['TL_HOOKS']['executeResize']) && $this->legacyImage) { foreach ($GLOBALS['TL_HOOKS']['executeResize'] as $callback) { $return = System::importStatic($callback[0])->{$callback[1]}($this->legacyImage); if (is_string($return)) { return $this->createImage($image, TL_ROOT . '/' . $return); } } } return parent::resize($image, $config, $options); }
/** * Creates a new image instance for the specified path. * * @param ImageInterface $image * @param string $path * * @return ImageInterface * * @internal Do not call this method in your code; it will be made private in a future version */ protected function createImage(ImageInterface $image, $path) { return new Image($path, $image->getImagine(), $this->filesystem); }
/** * {@inheritdoc} */ public function getImportantPartFromLegacyMode(ImageInterface $image, $mode) { if (1 !== substr_count($mode, '_')) { throw new \InvalidArgumentException(sprintf('"%s" is not a legacy resize mode', $mode)); } $importantPart = [0, 0, $image->getDimensions()->getSize()->getWidth(), $image->getDimensions()->getSize()->getHeight()]; list($modeX, $modeY) = explode('_', $mode); if ('left' === $modeX) { $importantPart[2] = 1; } elseif ('right' === $modeX) { $importantPart[0] = $importantPart[2] - 1; $importantPart[2] = 1; } if ('top' === $modeY) { $importantPart[3] = 1; } elseif ('bottom' === $modeY) { $importantPart[1] = $importantPart[3] - 1; $importantPart[3] = 1; } return new ImportantPart(new Point($importantPart[0], $importantPart[1]), new Box($importantPart[2], $importantPart[3])); }