当前位置:首页 > PHP教程 > php图像处理 > 列表

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张,按田字格方式生成缩略图。

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

  1. namespace \clarence\thumbnail; 
  2. class Thumbnail extends \Imagick 
  3. /** 
  4. * @param array $images 
  5. * @param int $width 
  6. * @param int $height 
  7. * @return static 
  8. * @throws ThumbnailException 
  9. */ 
  10. public static function createFromImages($images$width$height){ 
  11. if (emptyempty($images)){ 
  12. throw new ThumbnailException("No images!"); 
  13. $thumbnail = new static(); 
  14. $thumbnail->newImage($width$height'white''jpg'); 
  15. $thumbnail->compositeImages($images); 
  16. return $thumbnail
  17. public function compositeImages($images){ 
  18. $imagesKeys = array_keys($images); 
  19. $compositeConfig = $this->calcCompositeImagesPosAndSize($images); 
  20. foreach ($compositeConfig as $index => $cfg){ 
  21. $imgKey = $imagesKeys[$index]; 
  22. $img = new \Imagick($images[$imgKey]); 
  23. $img = $this->makeCompositeThumbnail($img$cfg); 
  24. $this->compositeImage($img, self::COMPOSITE_OVER, $cfg['to']['x'], $cfg['to']['y']); 
  25. protected function makeCompositeThumbnail(\Imagick $img$cfg){ 
  26. $img->cropThumbnailImage($cfg['size']['width'], $cfg['size']['height']); 
  27. return $img
  28. protected function calcCompositeImagesPosAndSize($images){ 
  29. $width = $this->getImageWidth(); 
  30. $height = $this->getImageHeight(); 
  31. switch(count($images)){ 
  32. case 0: 
  33. throw new ThumbnailException("No images!"); 
  34. case 1: 
  35. // | 0 | 
  36. return [ 
  37. 0 => [ 
  38. 'to' => [ 'x' => 0, 'y' => 0 ], 
  39. 'size' => [ 
  40. 'width' => $width
  41. 'height' => $height
  42. ]; 
  43. case 2: 
  44. // | 0 | 1 | 
  45. return [ 
  46. 0 => [ 
  47. 'to' => [ 'x' => 0, 'y' => 0 ], 
  48. 'size' => [ 
  49. 'width' => $width / 2, 
  50. 'height' => $height
  51. ], 
  52. 1 => [ 
  53. 'to' => [ 'x' => $width / 2, 'y' => 0], 
  54. 'size' => [ 
  55. 'width' => $width / 2, 
  56. 'height' => $height
  57. ]; 
  58. case 3: 
  59. // | 0 | 1 | 
  60. // | 2 | | 
  61. return [ 
  62. 0 => [ 
  63. 'to' => [ 'x' => 0, 'y' => 0 ], 
  64. 'size' => [ 
  65. 'width' => $width / 2, 
  66. 'height' => $height / 2, 
  67. ], 
  68. 1 => [ 
  69. 'to' => [ 'x' => $width / 2, 'y' => 0], 
  70. 'size' => [ 
  71. 'width' => $width / 2, 
  72. 'height' => $height
  73. ], 
  74. 2 => [ 
  75. 'to' => [ 'x' => 0, 'y' => $height / 2 ], 
  76. 'size' => [ 
  77. 'width' => $width / 2, 
  78. 'height' => $height / 2, 
  79. ], 
  80. ]; 
  81. default
  82. // >= 4: 
  83. // | 0 | 1 | 
  84. // | 2 | 3 | 
  85. return [ 
  86. 0 => [ 
  87. 'to' => [ 'x' => 0, 'y' => 0 ], 
  88. 'size' => [ 
  89. 'width' => $width / 2, 
  90. 'height' => $height / 2, 
  91. ], 
  92. 1 => [ 
  93. 'to' => [ 'x' => $width / 2, 'y' => 0], 
  94. 'size' => [ 
  95. 'width' => $width / 2, 
  96. 'height' => $height / 2, 
  97. ], 
  98. 2 => [ 
  99. 'to' => [ 'x' => 0, 'y' => $height / 2 ], 
  100. 'size' => [ 
  101. 'width' => $width / 2, 
  102. 'height' => $height / 2, 
  103. ], 
  104. 3 => [ 
  105. 'to' => [ 'x' => $width / 2, 'y' => $height / 2], 
  106. 'size' => [ 
  107. 'width' => $width / 2, 
  108. 'height' => $height / 2, 
  109. ], 
  110. ]; 

用个试试:

$thumbnail = \clarence\thumbnail\Thumbnail::createFromImages($srcImages, 240, 320);

$thumbnail->writeImage($outputDir."/example.jpg");

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

Tags: imagick PHP生成组合缩略图

分享到: