PHP利用imagick生成组合缩略图

前端之家收集整理的这篇文章主要介绍了PHP利用imagick生成组合缩略图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读:

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

代码如下:

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

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

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

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

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

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

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

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

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

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,'size' => [ 'width' => $width / 2,] ],1 => [ 'to' => [ 'x' => $width / 2,'y' => 0],] ] ]; case 3: // | 0 | 1 | // | 2 | | return [ 0 => [ 'to' => [ 'x' => 0,'height' => $height / 2,2 => [ 'to' => [ 'x' => 0,'y' => $height / 2 ],]; default: // >= 4: // | 0 | 1 | // | 2 | 3 | return [ 0 => [ 'to' => [ 'x' => 0,3 => [ 'to' => [ 'x' => $width / 2,'y' => $height / 2],]; } } }

用个试试:

代码如下:
writeImage($outputDir."/example.jpg");

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

原文链接:https://www.f2er.com/php/20346.html

猜你在找的PHP相关文章