/** * {@inheritdoc} */ public function resize(MediaInterface $media, File $in, File $out, $format, array $settings) { if (!isset($settings['width'])) { throw new \RuntimeException(sprintf('Width parameter is missing in context "%s" for provider "%s"', $media->getContext(), $media->getProviderName())); } $image = $this->adapter->load($in->getContent()); $size = $media->getBox(); if (null != $settings['height']) { if ($size->getHeight() > $size->getWidth()) { $higher = $size->getHeight(); $lower = $size->getWidth(); } else { $higher = $size->getWidth(); $lower = $size->getHeight(); } $crop = $higher - $lower; if ($crop > 0) { $point = $higher == $size->getHeight() ? new Point(0, 0) : new Point($crop / 2, 0); $image->crop($point, new Box($lower, $lower)); $size = $image->getSize(); } } $settings['height'] = (int) ($settings['width'] * $size->getHeight() / $size->getWidth()); if ($settings['height'] < $size->getHeight() && $settings['width'] < $size->getWidth()) { $content = $image->thumbnail(new Box($settings['width'], $settings['height']), $this->mode)->get($format, array('quality' => $settings['quality'])); } else { $content = $image->get($format, array('quality' => $settings['quality'])); } $out->setContent($content, $this->metadata->get($media, $out->getName())); }
/** * {@inheritdoc} */ public function getBox(MediaInterface $media, array $settings) { $size = $media->getBox(); $skipBox = false; $constraint = array_key_exists('constraint', $settings) && $settings['constraint'] === false; if ($constraint && $size->getHeight() > $size->getWidth()) { $settings['width'] = $settings['height']; $this->mode = ImageInterface::THUMBNAIL_INSET; $skipBox = true; } $hasWidth = array_key_exists('width', $settings) && $settings['width'] > 0; $hasHeight = array_key_exists('height', $settings) && $settings['height'] > 0; if (!$hasWidth && !$hasHeight) { throw new \RuntimeException(sprintf('Width/Height parameter is missing in context "%s" for provider "%s". Please add at least one parameter.', $media->getContext(), $media->getProviderName())); } if ($hasWidth && $hasHeight && !$skipBox) { return new Box($settings['width'], $settings['height']); } if (!$hasHeight) { $settings['height'] = (int) ($settings['width'] * $size->getHeight() / $size->getWidth()); } if (!$hasWidth) { $settings['width'] = (int) ($settings['height'] * $size->getWidth() / $size->getHeight()); } return $this->computeBox($size, $settings); }
/** * {@inheritdoc} */ public function getBox(MediaInterface $media, array $settings) { $size = $media->getBox(); if ($settings['width'] == null && $settings['height'] == null) { throw new \RuntimeException(sprintf('Width/Height parameter is missing in context "%s" for provider "%s". Please add at least one parameter.', $media->getContext(), $media->getProviderName())); } if ($settings['height'] == null) { $settings['height'] = (int) ($settings['width'] * $size->getHeight() / $size->getWidth()); } if ($settings['width'] == null) { $settings['width'] = (int) ($settings['height'] * $size->getWidth() / $size->getHeight()); } return $this->computeBox($media, $settings); }
/** * @param MediaInterface $metadata * @param string $filename * * @return array */ protected function getAmazonBuilder(MediaInterface $media, $filename) { $adapter = $this->container->get($media->getProviderName())->getFilesystem()->getAdapter(); //handle special Replicate adapter if ($adapter instanceof Replicate) { $adapterClassNames = $adapter->getAdapterClassNames(); } else { $adapterClassNames = array(get_class($adapter)); } //for amazon s3 if (!in_array('Gaufrette\\Adapter\\AmazonS3', $adapterClassNames) || !$this->container->has('sonata.media.metadata.amazon')) { return false; } return $this->container->get('sonata.media.metadata.amazon')->get($media, $filename); }
/** * {@inheritdoc} */ public function getBox(MediaInterface $media, array $settings) { $size = $media->getBox(); $hasWidth = isset($settings['width']) && $settings['width']; $hasHeight = isset($settings['height']) && $settings['height']; if (!$hasWidth && !$hasHeight) { throw new \RuntimeException(sprintf('Width/Height parameter is missing in context "%s" for provider "%s". Please add at least one parameter.', $media->getContext(), $media->getProviderName())); } if ($hasWidth && $hasHeight) { return new Box($settings['width'], $settings['height']); } if (!$hasHeight) { $settings['height'] = intval($settings['width'] * $size->getHeight() / $size->getWidth()); } if (!$hasWidth) { $settings['width'] = intval($settings['height'] * $size->getWidth() / $size->getHeight()); } return $this->computeBox($media, $settings); }
/** * @param MediaInterface $media * * @return MediaProviderInterface */ private function getProvider(MediaInterface $media) { return $this->pool->getProvider($media->getProviderName()); }
/** * @param MediaInterface $media * * @return MediaProviderInterface */ public function getProvider(MediaInterface $media) { return $this->get('sonata.media.pool')->getProvider($media->getProviderName()); }
/** * @param \Sonata\CoreBundle\Validator\ErrorElement $errorElement * @param \Sonata\MediaBundle\Model\MediaInterface $media */ public function validate(ErrorElement $errorElement, MediaInterface $media) { if (!$media->getProviderName()) { return; } $provider = $this->getProvider($media->getProviderName()); $provider->validate($errorElement, $media); }
/** * @param MediaInterface $image * @param SeoPageInterface $seoPage */ protected function addImageInfo(MediaInterface $image, SeoPageInterface $seoPage) { $provider = $this->mediaPool->getProvider($image->getProviderName()); $seoPage->addMeta('property', 'og:image', $provider->generatePublicUrl($image, $this->mediaFormat))->addMeta('property', 'og:image:width', $image->getWidth())->addMeta('property', 'og:image:height', $image->getHeight())->addMeta('property', 'og:image:type', $image->getContentType()); }
/** * @param \Sonata\MediaBundle\Model\MediaInterface $media * @param string $format * @return string */ public function path(MediaInterface $media = null, $format) { if (!$media) { return ''; } $provider = $this->getMediaService() ->getProvider($media->getProviderName()); return $provider->generatePublicUrl($media, $format); }