polycast / polycast-filter-imagesize
此包已被废弃且不再维护。未建议替代包。
使用不同策略调整图片大小的 Zend_Filter 实现。
dev-master
2012-11-29 15:39 UTC
Requires
- php: >=5.2.4
- ext-gd: *
- zendframework/zendframework1: >=1.10
This package is not auto-updated.
Last update: 2024-05-25 12:16:56 UTC
README
提供使用不同策略调整图片大小的过滤器功能的 Zend Framework 扩展。
最小示例
<?php
require_once 'Polycast/Filter/ImageSize.php';
$filter = new Polycast_Filter_ImageSize();
$filter->getConfig()
->setHeight(100)
->setWidth(200);
$outputPath = $filter->filter('./orig.jpg');
header('Content-Type: image/jpeg');
$fh = fopen($outputPath, 'r');
fpassthru($fh);
fclose($fh);
?>
复杂示例
- 裁剪图片而不是将其适应到边界框中。
- 以 JPEG 格式输出(实际上这与上面相同,因为它是默认格式)
- 设置特定的输出目录
(默认 = ./)
- 使用缓存,即仅在源图片比缩略图新时才覆盖
[markdown 语法很愚蠢]
<?php
require_once 'Polycast/Filter/ImageSize.php';
require_once 'Polycast/Filter/ImageSize/Strategy/Crop.php';
require_once 'Polycast/Filter/ImageSize/PathBuilder/Standard.php';
$filter = new Polycast_Filter_ImageSize();
$filter->setOutputPathBuilder(
new Polycast_Filter_ImageSize_PathBuilder_Standard('images/thumbnails'));
$filter->getConfig()
->setHeight(100)
->setWidth(200)
->setQuality(75)
->setOverwriteMode(Polycast_Filter_ImageSize::OVERWRITE_ALL)
->setOutputImageType(Polycast_Filter_ImageSize::TYPE_JPEG)
->setStrategy(new Polycast_Filter_ImageSize_Strategy_Crop());
$output = $filter->filter('./orig.jpg');
header('Content-Type: image/jpeg');
$fh = fopen($output, 'r');
fpassthru($fh);
fclose($fh);
?>
巨大的示例
class NamedConfig extends Polycast_Filter_ImageSize_Configuration_Standard
{
protected $_templateName = null;
public function __construct($templateName)
{
$this->_templateName = $templateName;
}
public function getTemplateName()
{
return $this->_templateName;
}
}
class CustomPathBuilder implements Polycast_Filter_ImageSize_PathBuilder_Interface
{
private $_outputDir = null;
public function __construct($outputDir)
{
$this->_outputDir = $outputDir;
}
public function buildPath($filename, Polycast_Filter_ImageSize_Configuration_Interface $config)
{
$chunks = explode('.', strrev(basename($filename)), 2);
$basename = strrev(array_pop($chunks));
$ext = strrev(array_pop($chunks));
switch($config->getOutputImageType()) {
case 'jpeg': $ext = '.jpg'; break;
case 'gif': $ext = '.gif'; break;
case 'png': $ext = '.png'; break;
case 'auto':
case null:
default:
$ext = ".$ext";
}
if ($config instanceof NamedConfig) {
$postfix = $config->getTemplateName();
} else {
$postfix = sprintf('%sx%s-q%s', $config->getWidth(), $config->getHeight(), $config->getQuality());
}
$path = sprintf('%s/%s-%s%s',
$this->_outputDir,
$basename,
$postfix,
$ext
);
return $path;
}
}
$filter = new Polycast_Filter_ImageSize();
$config = $filter->getConfig();
$config = new NamedConfig('product-thumbnail-100x100');
$config
->setWidth(100)
->setHeight(100)
->setQuality(50)
->setStrategy(new Polycast_Filter_ImageSize_Strategy_Crop())
->setOverwriteMode(Polycast_Filter_ImageSize::OVERWRITE_ALL)
;
$filter->setConfig($config);
$filter->setOutputPathBuilder(new CustomPathBuilder('images/thumbnails/'));
$outputPath = $filter->filter('./rick.jpg');
更多示例
请参阅 tests/ExamplesTest.php
,它演示了如何实现自己的路径构建器和配置。
安装
composer
如果您想在项目中使用此库,请调整您的 composer.json
如下
"require": {
"polycast/polycast-filter-imagesize": "master-dev"
},
如果您想为此库工作,请使用以下命令,这将从 github 检出项目并安装所有开发所需的依赖项。
composer create-project --dev polycast/polycast-filter-imagesize polycast-filter-imagesize