polycast/polycast-filter-imagesize

此包已被废弃且不再维护。未建议替代包。

使用不同策略调整图片大小的 Zend_Filter 实现。

dev-master 2012-11-29 15:39 UTC

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