/** * @param string $imageName * @return ImagePreview */ private function extractPreviewData($imageName) { // example: name_500x300.png $regexp = '/(?<name>[^\\/]*?)(_(?<width>\\d+)x(?<height>\\d+))?(\\.(?<extension>[0-9a-z]+))$/i'; preg_match($regexp, $imageName, $imageNameParts); $requiredKeys = ['name', 'width', 'height', 'extension']; foreach ($requiredKeys as $key) { if (!isset($imageNameParts[$key])) { throw new \InvalidArgumentException(sprintf("Info about '%' can't be extracted from image name '%s'", $key, $imageName)); } } $sourcePath = $this->assetsResolver->assetUri(AssetFile::TYPE_IMAGE) . '/' . $imageNameParts['name'] . '.' . $imageNameParts['extension']; $imagePreviewData = new ImagePreview(); $imagePreviewData->setSourceUri($sourcePath)->setTargetName($imageName)->setWidth($imageNameParts['width'])->setHeight($imageNameParts['height']); return $imagePreviewData; }