public function getVariation(Field $field, VersionInfo $versionInfo, $variationName, array $parameters = array())
{
/** @var \eZ\Publish\Core\FieldType\Image\Value $imageValue */
$imageValue = $field->value;
$fieldId = $field->id;
$fieldDefIdentifier = $field->fieldDefIdentifier;
if (!$this->supportsValue($imageValue)) {
throw new InvalidArgumentException("Value for field #{$fieldId} ({$fieldDefIdentifier}) cannot be used for image alias generation.");
}
$originalPath = $imageValue->id;
// Create the image alias only if it does not already exist.
if ($variationName !== IORepositoryResolver::VARIATION_ORIGINAL && !$this->ioResolver->isStored($originalPath, $variationName)) {
try {
$originalBinary = $this->dataLoader->find($originalPath);
} catch (NotLoadableException $e) {
throw new SourceImageNotFoundException($originalPath, 0, $e);
}
if ($this->logger) {
$this->logger->debug("Generating '{$variationName}' variation on {$originalPath}, field #{$fieldId} ({$fieldDefIdentifier})");
}
$this->ioResolver->store($this->applyFilter($originalBinary, $variationName), $originalPath, $variationName);
} elseif ($this->logger) {
$this->logger->debug("'{$variationName}' variation on {$originalPath} is already generated. Loading from cache.");
}
try {
$aliasInfo = new SplFileInfo($this->ioResolver->resolve($originalPath, $variationName));
} catch (NotResolvableException $e) {
// If for some reason image alias cannot be resolved, throw the appropriate exception.
throw new InvalidVariationException($variationName, 'image', 0, $e);
}
return new ImageVariation(array('name' => $variationName, 'fileName' => $aliasInfo->getFilename(), 'dirPath' => $aliasInfo->getPath(), 'uri' => $aliasInfo->getPathname(), 'imageId' => $imageValue->imageId));
}