php利用imagick生成组合缩略图,imagick缩略图先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读:
这里说的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生成组合缩略图的相关知识,希望对大家有所帮助!
您可能感兴趣的文章:php使用imagick读取pdf生成png缩略图的两种方法php使用imagick模块实现图片缩放、裁剪、压缩示例php基于php_imagick_st-q8.dll实现jpg合成gif图片的方法php中使用imagick读取pdf并生成png缩略图实例php中使用imagick生成psd文件缩略图教程php 使用 imagick 裁切/生成缩略图/添加水印自动检测和处理 gif
http://www.bkjia.com/phpjc/1101297.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1101297.htmltecharticlephp利用imagick生成组合缩略图,imagick缩略图 先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读: 这里说的imagick 是 imagemagick...