• 技术文章 >后端开发 >php教程

    PHP利用imagick生成组合缩略图_PHP

    2016-05-28 11:48:45原创280
    先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读:

    这里说的imagick 是 ImageMagick 在PHP下的扩展。使用pecl安装起来那叫一个轻松简单一条命令就搞定:

    代码如下:


    sudo pecl install imagick

    (扩展装好后还是要在php.ini中加上extension=imagick.so,然后记得重启apache或php-fpm服务。)

    最近有个需求是要把多张图片组合起来生成缩略图,刚好用用这个强大的imagick扩展。

    这个需求是要这样生成缩略图:

    1.如果有1张图片,就直接生成这张图片的缩略图;

    2.如果有2张图片,则一张在左边一张在右边,各一半;

    3.如果有3张图片,则两张左边平均分配,一张独占右边;

    4.如果有4张图片,则像田字格一样平均分配空间;

    5.更多张图片,则只取前4张,按田字格方式生成缩略图。

    这规则还真不少,不过还不算太过复杂,很快搞出来了:

    namespace \clarence\thumbnail;
    class Thumbnail extends \Imagick
    {
    /**
    * @param array $images
    * @param int $width
    * @param int $height
    * @return static
    * @throws ThumbnailException
    */
    public static function createFromImages($images, $width, $height){
    if (empty($images)){
    throw new ThumbnailException("No images!");
    }
    $thumbnail = new static();
    $thumbnail->newImage($width, $height, 'white', 'jpg');
    $thumbnail->compositeImages($images);
    return $thumbnail;
    }
    public function compositeImages($images){
    $imagesKeys = array_keys($images);
    $compositeConfig = $this->calcCompositeImagesPosAndSize($images);
    foreach ($compositeConfig as $index => $cfg){
    $imgKey = $imagesKeys[$index];
    $img = new \Imagick($images[$imgKey]);
    $img = $this->makeCompositeThumbnail($img, $cfg);
    $this->compositeImage($img, self::COMPOSITE_OVER, $cfg['to']['x'], $cfg['to']['y']);
    }
    }
    protected function makeCompositeThumbnail(\Imagick $img, $cfg){
    $img->cropThumbnailImage($cfg['size']['width'], $cfg['size']['height']);
    return $img;
    }
    protected function calcCompositeImagesPosAndSize($images){
    $width = $this->getImageWidth();
    $height = $this->getImageHeight();
    switch(count($images)){
    case 0:
    throw new ThumbnailException("No images!");
    case 1:
    // | 0 |
    return [
    0 => [
    'to' => [ 'x' => 0, 'y' => 0 ],
    'size' => [
    'width' => $width,
    'height' => $height,
    ]
    ]
    ];
    case 2:
    // | 0 | 1 |
    return [
    0 => [
    'to' => [ 'x' => 0, 'y' => 0 ],
    'size' => [
    'width' => $width / 2,
    'height' => $height,
    ]
    ],
    1 => [
    'to' => [ 'x' => $width / 2, 'y' => 0],
    'size' => [
    'width' => $width / 2,
    'height' => $height,
    ]
    ]
    ];
    case 3:
    // | 0 | 1 |
    // | 2 | |
    return [
    0 => [
    'to' => [ 'x' => 0, 'y' => 0 ],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    1 => [
    'to' => [ 'x' => $width / 2, 'y' => 0],
    'size' => [
    'width' => $width / 2,
    'height' => $height,
    ]
    ],
    2 => [
    'to' => [ 'x' => 0, 'y' => $height / 2 ],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    ];
    default:
    // >= 4:
    // | 0 | 1 |
    // | 2 | 3 |
    return [
    0 => [
    'to' => [ 'x' => 0, 'y' => 0 ],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    1 => [
    'to' => [ 'x' => $width / 2, 'y' => 0],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    2 => [
    'to' => [ 'x' => 0, 'y' => $height / 2 ],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    3 => [
    'to' => [ 'x' => $width / 2, 'y' => $height / 2],
    'size' => [
    'width' => $width / 2,
    'height' => $height / 2,
    ]
    ],
    ];
    }
    }
    }

    用个试试:

    代码如下:


    $thumbnail = \clarence\thumbnail\Thumbnail::createFromImages($srcImages, 240, 320);
    $thumbnail->writeImage($outputDir."/example.jpg");

    以上内容给大家介绍了PHP利用imagick生成组合缩略图的相关知识,希望对大家有所帮助!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP实现查询两个数组中不同元素的方法_PHP 下一篇:PHP Imagick完美实现图片裁切、生成缩略图、添加水印_PHP
    PHP编程就业班

    相关文章推荐

    • PHP 安装配置教程大全(最新)• 详解win10下PHP的安装配置(以php5.6为例)• YII 的源码分析(3)• 检测旋钮所在行 • PHP5.4无法安装sphinx扩展,该怎么解决

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网