加入收藏 | 设为首页 | 会员中心 | 我要投稿 阳江站长网 (https://www.0662zz.cn/)- 办公协同、云通信、区块链、物联平台、高性能计算!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP利用imagick生成组合缩略图

发布时间:2022-07-18 09:40:46 所属栏目:PHP教程 来源:互联网
导读:这里说的imagick 是 ImageMagick 在PHP下的扩展,本文给大家介绍PHP利用imagick生成组合缩略图,需要的朋友参考下。 先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读: 这里说的imagick 是 ImageMagick 在PHP下的扩展,使用pecl安装起来那叫一个
  这里说的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 clarencethumbnail;
  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 = clarencethumbnailThumbnail::createFromImages($srcImages, 240, 320);
 
  $thumbnail->writeImage($outputDir."/example.jpg");
 
  以上内容给大家介绍了PHP利用imagick生成组合缩略图的相关知识,希望对大家有所帮助!

(编辑:阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读