Skip to content

Commit

Permalink
Merge pull request #37 from jmikola/resize-filters
Browse files Browse the repository at this point in the history
Add Resize and RelativeResize filters
  • Loading branch information
lsmith77 committed Nov 16, 2011
2 parents cbcfc3a + 101b6b8 commit a612b16
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 0 deletions.
29 changes: 29 additions & 0 deletions Imagine/Filter/Loader/RelativeResizeFilterLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace Liip\ImagineBundle\Imagine\Filter\Loader;

use Imagine\Exception\InvalidArgumentException;
use Imagine\Image\ImageInterface;
use Liip\ImagineBundle\Imagine\Filter\RelativeResize;

/**
* Loader for this bundle's relative resize filter.
*
* @author Jeremy Mikola <jmikola@gmail.com>
*/
class RelativeResizeFilterLoader implements LoaderInterface
{
/**
* @see Liip\ImagineBundle\Imagine\Filter\Loader\LoaderInterface::load()
*/
public function load(ImageInterface $image, array $options = array())
{
foreach ($options as $method => $parameter) {
$filter = new RelativeResize($method, $parameter);

return $filter->apply($image);
}

throw new InvalidArgumentException('Expected method/parameter pair, none given');
}
}
26 changes: 26 additions & 0 deletions Imagine/Filter/Loader/ResizeFilterLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Liip\ImagineBundle\Imagine\Filter\Loader;

use Imagine\Filter\Basic\Resize;
use Imagine\Image\Box;

/**
* Loader for Imagine's basic resize filter.
*
* @author Jeremy Mikola <jmikola@gmail.com>
*/
class ResizeFilterLoader implements LoaderInterface
{
/**
* @see Liip\ImagineBundle\Imagine\Filter\Loader\LoaderInterface::load()
*/
public function load(ImageInterface $image, array $options = array())
{
list($width, $height) = $options['size'];

$filter = new Resize(new Box($width, $height));

return $filter->apply($image);
}
}
43 changes: 43 additions & 0 deletions Imagine/Filter/RelativeResize.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace Liip\ImagineBundle\Imagine\Filter;

use Imagine\Exception\InvalidArgumentException;
use Imagine\Filter\FilterInterface;
use Imagine\Image\ImageInterface;
use Imagine\Image\BoxInterface;

/**
* Filter for resizing an image relative to its existing dimensions.
*
* @author Jeremy Mikola <jmikola@gmail.com>
*/
class RelativeResize implements FilterInterface
{
private $method;
private $parameter;

/**
* Constructs a RelativeResize filter with the given method and argument.
*
* @param string $method BoxInterface method
* @param mixed $parameter Parameter for BoxInterface method
*/
public function __construct($method, $parameter)
{
if (!in_array($method, array('heighten', 'increase', 'scale', 'widen'))) {
throw new InvalidArgumentException(sprintf('Unsupported method: ', $method));
}

$this->method = $method;
$this->parameter = $parameter;
}

/**
* @see Imagine\Filter\FilterInterface::apply()
*/
public function apply(ImageInterface $image)
{
return $image->resize(call_user_func(array($image->getSize(), $this->method), $this->parameter));
}
}
10 changes: 10 additions & 0 deletions Resources/config/imagine.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@

<!-- Filter loaders' classes -->

<parameter key="liip_imagine.filter.loader.relative_resize.class">Liip\ImagineBundle\Imagine\Filter\Loader\RelativeResizeFilterLoader</parameter>
<parameter key="liip_imagine.filter.loader.resize.class">Liip\ImagineBundle\Imagine\Filter\Loader\ResizeFilterLoader</parameter>
<parameter key="liip_imagine.filter.loader.thumbnail.class">Liip\ImagineBundle\Imagine\Filter\Loader\ThumbnailFilterLoader</parameter>

<!-- Data loaders' classes -->
Expand Down Expand Up @@ -109,6 +111,14 @@

<!-- Filter loaders -->

<service id="liip_imagine.filter.loader.relative_resize" class="%liip_imagine.filter.loader.relative_resize.class%">
<tag name="liip_imagine.filter.loader" loader="relative_resize" />
</service>

<service id="liip_imagine.filter.loader.resize" class="%liip_imagine.filter.loader.resize.class%">
<tag name="liip_imagine.filter.loader" loader="resize" />
</service>

<service id="liip_imagine.filter.loader.thumbnail" class="%liip_imagine.filter.loader.thumbnail.class%">
<tag name="liip_imagine.filter.loader" loader="thumbnail" />
</service>
Expand Down

0 comments on commit a612b16

Please sign in to comment.