SLIR is now deprecated in favor of ambroisemaupate/intervention-request library which is based on the strong image-intervention PHP framework. You should consider migrating to this new library which keeps the same Url guidelines.
SLIR (Smart Lencioni Image Resizer) resizes images, intelligently sharpens, crops based on width:height ratios, color fills transparent GIFs and PNGs, and caches variations for optimal performance.
For questions or support, please use the issue tracker.
- Composer
- PHP 5.3.6+
- GD Graphics Library -- must be a version that supports
imageconvolution()
, such as the bundled version
- Download and unpack to a directory in your web root. I recommend putting SLIR in
/slir/
for ease of use. For example, if your website ishttps://yourdomain.com
, then SLIR would be athttps://yourdomain.com/slir/
. - Run
composer install
to generate autoloader and dependencies. - Create your own
SLIRConfig.php
class usingslirconfig-sample.class.php
file. If you want to use a namespaced configuration class, you must defineSLIR_CONFIG_CLASSNAME
global constant with its Full-qualified classname. For example :define('SLIR_CONFIG_CLASSNAME','\MyCompany\Utils\SLIRConfig');
, then SLIR will look for this class to use static configuration. - After you have SLIR configured, visit
https://yourdomain.com/slir/install/
in your favorite web browser.
- Add SLIR to your project
composer.json
as a packagist repository.
{
"require": {
"rezozero/slir": "2.1.*"
}
}
- Run
composer update
to perform vendor changes. Composer will download SLIR to yourvendor/
folder and create a PSR-4 autoloader. - Create your
SLIRConfig
class
namespace MyBundle\Utils;
/**
* SLIR Config Class
*
* @since 2.0
* @author Joe Lencioni <[email protected]>
* @package SLIR
*/
class SLIRConfig extends \SLIR\SLIRConfigDefaults
{
public static function init()
{
static::$garbageCollectDivisor = 400;
static::$garbageCollectFileCacheMaxLifetime = 345600;
static::$browserCacheTTL = 604800; // 7*24*60*60
static::$pathToCacheDir = YOUR_PROJECT_ROOT.'/cache';
static::$pathToErrorLog = YOUR_PROJECT_ROOT.'/files/slir-error-log';
static::$documentRoot = YOUR_PROJECT_ROOT.'/files';
static::$urlToSLIR = '/assets'; // Tell SLIR to listen after "/assets" route
static::$maxMemoryToAllocate = 64;
// This must be the last line of this function
parent::init();
}
}
SLIRConfig::init();
- Create a route handling SLIR
#
# routes.yml
#
SLIRProcess:
path: /assets/{queryString}/{filename}
defaults: { _controller: \MyBundle\Controllers\AssetsController::slirAction }
requirements: { queryString : "[a-zA-Z0-9\-]+", filename : "[a-zA-Z0-9\-_\.\/]+" }
- Create your assets controller
// In AssetsController.php class
/**
* Handle images resize with SLIR vendor
*
* @param string $queryString
* @param string $filename
* @return void
*/
public function slirAction($queryString, $filename)
{
define('SLIR_CONFIG_CLASSNAME','\MyBundle\Utils\SLIRConfig');
$slir = new \SLIR\SLIR();
$slir->processRequestFromURL();
// SLIR handle response by itself
// Do not return anything
}
To use SLIR, place an <img\>
tag with the src
attribute pointing to the path of SLIR (typically "/slir/") followed by the parameters, followed by the path to the source image to resize (e.g. <img src="/slir/w100/path/to/image.jpg"/>
). All parameters follow the pattern of a one-letter code and then the parameter value:
Parameter | Mearning | Example |
---|---|---|
w | Maximum width | /slir/w100/path/to/image.jpg |
h | Maximum height | /slir/h100/path/to/image.jpg |
c | Crop ratio | /slir/c1x1/path/to/image.jpg |
q | Quality | /slir/q60/path/to/image.jpg |
b | Background fill color | /slir/bf00/path/to/image.png |
p | Progressive | /slir/p1/path/to/image.jpg |
g | Grayscale | /slir/g1/path/to/image.jpg |
Separate multiple parameters with a hyphen: /slir/w100-h100-c1x1/path/to/image.jpg
<img src="/slir/w100-h100/path/to/image.jpg"/>
<img src="/slir/w100-h100-c1x1/path/to/image.jpg"/>
To do this, you simply need to make the crop ratio match up with the desired width and height. For example, if you want your image to be exactly 150 pixels wide by 100 pixels high, you could do this:
<img src="/slir/w150-h100-c150x100/path/to/image.jpg"/>
Or, more concisely:
<img src="/slir/w150-h100-c15x10/path/to/image.jpg"/>
However, SLIR will not enlarge images. So, if your source image is smaller than the desired size you will need to use CSS to make it the correct size.
<img src="/slir/w100-p0/path/to/image.jpg"/>
<img src="/slir/b900/path/to/image.png"/>
<img src="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/slir/?w=100&h=100&c=1x1&i=/path/to/image.jpg"/>
<img src="/assets/w150-h100-c15x10/path/to/image.jpg"/>
You can change SLIR request URL to handle it with your own rewrite engine. Just define SLIRConfig::$urlToSLIR
to your relative folder: here /assets
.
Filenames that include special characters must be URL-encoded (e.g. plus sign, +
, should be encoded as %2B
) in order for SLIR to recognize them properly. This can be accomplished by passing your filenames through PHP's rawurlencode()
function.
<img src="/slir/w100/path/to/image%2Bfile.jpg"/>
If you would like to support SLIR or to show your appreciation for the time spent developing this project, please make a financial contribution.
For more documentation, open core/SLIR.php
in your favorite text editor.