/** * Hydrate and render an image variation with parent data. * * You can use this to create a variation with a source image * * @param Image $parent * @param ImageVariation $variation * * @return ImageVariation * * @throws BadImageException * @throws ImageManagerException */ protected function hydrateVariation(Image $parent, ImageVariation &$variation) { if (!$parent->isHydrated()) { throw new ImageManagerException('Parent: ' . self::ERR_NOT_HYDRATED); } $quality = $variation->getQuality() ?: 90; if ($quality < 1) { $quality = 1; } elseif ($quality > 100) { $quality = 100; } $variation->setData(null); $input = $parent->getData(); foreach ($this->encoders as $encoder) { if ($encoder->supports($input)) { $encoder->setData($input); $variation->setData($encoder->createVariation($variation->getFormat(), $quality, $variation->getDimensions(), $variation->getCropDimensions())); $encoder->setData(null); break; } } if (!$variation->getData()) { throw new NoSupportedEncoderException('There is no known encoder for this data type'); } return $variation; }