/** * @param Image $image * * @return ImageMetadata */ public function getImageMetadata(Image $image) { if (!$image->isHydrated()) { throw new ImageManagerException(ImageManager::ERR_NOT_HYDRATED); } if ($image instanceof ImageVariation) { throw new ImageManagerException(self::ERR_SOURCE_IMAGE); } $metadata = new ImageMetadata(); $data_inspector = new DataInspector(); $data = $image->getData(); if ($data_inspector->isPdf($data)) { $format = ImageFormat::PDF(); } else { $format = $data_inspector->getImageFormat($data); } $metadata->setMimetype($data_inspector->guessMimeType($data))->setFormat($format)->setResolution($this->getImageResolution($image))->setOrientation($this->getImageOrientation($image))->setDimensions($this->getImageDimensions($image)); return $metadata; }
/** * 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; }