PHP利用imagick生成组合缩略图
发布:smiling 来源: PHP粉丝网 添加日期:2021-07-10 14:34:07 浏览: 评论:0
这里说的imagick 是 ImageMagick 在PHP下的扩展,本文给大家介绍PHP利用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 (emptyempty($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生成组合缩略图的相关知识,希望对大家有所帮助!
Tags: imagick PHP生成组合缩略图
相关文章
- ·php_imagick实现图片剪切、旋转、锐化、减色或增加特效(2013-11-14)
- ·php利用Imagick把pdf生成png缩略图(2014-08-18)
- ·使用Imagick绘图 文字换行 生成二维码例子(2015-12-24)
- ·PHP使用imagick读取PDF生成png缩略图的两种方法(2020-10-29)
- ·php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法(2021-05-03)
- ·PHP中使用Imagick实现各种图片效果实例(2021-05-08)
- ·PHP中使用Imagick读取pdf并生成png缩略图实例(2021-05-08)
- ·PHP中使用Imagick操作PSD文件实例(2021-05-08)
- ·PHP中使用imagick实现把PDF转成图片(2021-05-08)
- ·php使用Imagick生成图片的方法(2021-06-15)
- ·PHP Imagick完美实现图片裁切、生成缩略图、添加水印(2021-07-10)
- ·PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例(2021-12-16)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)