diff --git a/Imagine/Data/Loader/ExtendedFileSystemLoader.php b/Imagine/Data/Loader/ExtendedFileSystemLoader.php new file mode 100644 index 000000000..3aa0db9eb --- /dev/null +++ b/Imagine/Data/Loader/ExtendedFileSystemLoader.php @@ -0,0 +1,46 @@ +transformers = $transformers; + } + + /** + * Apply transformers to the file + * + * @param $absolutePath + * @return array + */ + protected function getFileInfo($absolutePath) + { + if (!empty($this->transformers)) { + foreach ($this->transformers as $transformer) { + $absolutePath = $transformer->applyTransform($absolutePath); + } + } + return pathinfo($absolutePath); + } +} diff --git a/Imagine/Data/Loader/FileSystemLoader.php b/Imagine/Data/Loader/FileSystemLoader.php index 86e2b10b3..b2b6bd872 100644 --- a/Imagine/Data/Loader/FileSystemLoader.php +++ b/Imagine/Data/Loader/FileSystemLoader.php @@ -91,4 +91,4 @@ public function find($path) return $this->imagine->open($absolutePath); } -} +} \ No newline at end of file diff --git a/Imagine/Data/Transformer/PdfTransformer.php b/Imagine/Data/Transformer/PdfTransformer.php new file mode 100644 index 000000000..570acf171 --- /dev/null +++ b/Imagine/Data/Transformer/PdfTransformer.php @@ -0,0 +1,26 @@ +setImageFormat('png'); + $img->writeImages($absolutePath.'.png', true); + } + //finally update $absolutePath + $absolutePath .= '.png'; + } + return $absolutePath; + } +} \ No newline at end of file diff --git a/README.md b/README.md index 42412215a..6ff76c5c9 100644 --- a/README.md +++ b/README.md @@ -383,6 +383,39 @@ liip_imagine: For an example of a data loader implementation, refer to `Liip\ImagineBundle\Imagine\Data\Loader\FileSystemLoader`. +## Extending the image loader with data transformers + +You can extend a custom data loader to support virtually any file type using transformers. +A data tranformer is intended to transform a file before actually rendering it. You +can refer to `Liip\ImagineBundle\Imagine\Data\Loader\ExtendedFileSystemLoader` and +to `Liip\ImagineBundle\Imagine\Data\Transformer\PdfTransformer` as an example. + +ExtendedFileSystemLoader extends FileSystemLoader and takes, as argument, an array of transformers. +In the example, when a file with the pdf extension is passed to the data loader, +PdfTransformer uses php imagick extension to extract the first page of the document +and returns it to the data loader as a png image. + +To tell the bundle about the transformers, you have to register them as services +with the new loader: + +```yml +services: + acme_custom_transformer: + class: Acme\ImagineBundle\Imagine\Data\Transformer\MyCustomTransformer + custom_loader: + class: Acme\ImagineBundle\Imagine\Data\Loader\MyCustomDataLoader + tags: + - { name: liip_imagine.data.loader, loader: custom_data_loader } + arguments: + - '@liip_imagine' + - %liip_imagine.formats% + - %liip_imagine.data_root% + - [ '@acme_custom_transformer' ] +``` + +Now you can use your custom data loader, with its transformers, setting it +as in the previous section. + ## Custom cache resolver The ImagineBundle allows you to add your custom cache resolver classes. The only diff --git a/Resources/config/imagine.xml b/Resources/config/imagine.xml index fb4e9f4a1..5a37dbcd1 100644 --- a/Resources/config/imagine.xml +++ b/Resources/config/imagine.xml @@ -141,4 +141,4 @@ - + \ No newline at end of file