PHP下使用強(qiáng)大的imagick輕巧生成組合縮略圖
Jun 13, 2016 pm 12:28 PM
PHP下使用強(qiáng)大的imagick輕松生成組合縮略圖
project: blogtarget: use-imagick-to-composite-images-thumbnail.mddate: 2016-02-19status: publishtags: - php - imagick - thumbnailcategories: - php
這里說(shuō)的imagick
是 ImageMagick
在PHP下的擴(kuò)展。使用pecl
安裝起來(lái)那叫一個(gè)輕松簡(jiǎn)單 —— 一條命令就搞定:
sudo pecl install imagick
(擴(kuò)展裝好后還是要在php.ini中加上extension=imagick.so
,然后記得重啟apache
或php-fpm
服務(wù)。)
最近有個(gè)需求是要把多張圖片組合起來(lái)生成縮略圖,剛好用用這個(gè)強(qiáng)大的imagick
擴(kuò)展。
這個(gè)需求是要這樣生成縮略圖:
- 如果有1張圖片,就直接生成這張圖片的縮略圖;
- 如果有2張圖片,則一張?jiān)谧筮呉粡堅(jiān)谟疫?,各一半?/li>
- 如果有3張圖片,則兩張左邊平均分配,一張獨(dú)占右邊;
- 如果有4張圖片,則像田字格一樣平均分配空間;
- 更多張圖片,則只取前4張,按田字格方式生成縮略圖。
這規(guī)則還真不少,不過(guò)還不算太過(guò)復(fù)雜,很快搞出來(lái)了:
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, ] ], ]; } }}
用個(gè)試試:
$thumbnail = \clarence\thumbnail\Thumbnail::createFromImages($srcImages, 240, 320);$thumbnail->writeImage($outputDir."/example.jpg");
效果立馬出來(lái)了:
贊一個(gè)~
(詳細(xì)代碼見 http://github.com/clarence-pan/thumbnail)

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

?? ????? ??? ??? ??? ? Huawei ???? ???? ???. ? ? Huawei GT3pro? GT4? ?? ?? ?? ?????. ? ??? ???? ????? ???? ????. Huawei GT3pro? GT4? ???? ?????? 1. ?? GT4: 46mm? 41mm, ??? ?? ?? + ????? ?? ?? + ???? ?? ?? ????. GT3pro: 46.6mm ? 42.9mm, ??? ???? ?? + ??? ??/??? ?? + ??? ? ????. 2. ??? GT4: ?? Huawei Truseen5.5+ ????? ???? ??? ? ??????. GT3pro: ECG ???, ?? ? ??? ??

???? ?? ?????. ???? ???? ?? ???? ???? ?? ???? ??? ?????. ? ??? ???? ?? ??? ??? ?? ??? ???? ??? ??? ??? ???? ???? ???? ?????. ?, ???? ??? ? ? ? ??? ?? ???? ?????.

Windows 11?? ?? ??? ???? ?? ?? ??? ?? ??? ???? ??? ???? ?? ? ??? ? ? ????. ?? ??? ??? ???? ?? ?? ??? ??? ????. ?? ???? ?? ????. ??? ?? ?? ??? ??? ????. ??? ?? ????: ?? ??? ?? ? ???? ?? ?? ????? ????? ? ????. ??? ??? ????: ???? ?? ????? ?? ??? ??? ? ????. ?? ?? ????? ??: ?? ?? ?? ?? ????? ?? ??? ??? ? ????. ???? ???????. ????? ???? ? ??? ?? ? ??? ??? ? ????. ? ??? ???? ????? ???? ??? ?? ??? ???? ????. 1. Windows ? Microsoft Store ? ????

HTML5?? ??? ??? ?????. ?? ??? ??? ?? ??? ?? ??, ??? ? ?? ??? ??? ? ????. ??.

1?: ?? ?? ?? ?? Apple ??? ?? ??: ??? ???? ???? ?? ?? ???? ??? ?????. ??? ??? ??? ?? ?? ?? ?? ????. Apple ??? ????? ?? ????. Apple? ??? ?? ???? ???? AppStore? ??? ????? ?????. ??? ?? ?? Apple? ??? ????? ???? ?????. ??? ?? ??: "AppStore? ??? ? ??" ??? ??? ?? ???? ?? ??? ? ???? ??? ??? ????? ??????. Wi-Fi? ??? ??? ?? ????? ???? ??? ???? ???(?? > ??? > ???? ?? ??? > ??). iOS ??? ???????.

php提交表單通過(guò)后,彈出的對(duì)話框怎樣在當(dāng)前頁(yè)彈出php提交表單通過(guò)后,彈出的對(duì)話框怎樣在當(dāng)前頁(yè)彈出而不是在空白頁(yè)彈出?想實(shí)現(xiàn)這樣的效果:而不是空白頁(yè)彈出:------解決方案--------------------如果你的驗(yàn)證用PHP在后端,那么就用Ajax;僅供參考:HTML code

iPadOS 17.4? iPad ??? ??? ????? ?? ??? ?? ??? ??? ?? ??? ???? iPad? ?? ????. iPad? ???? ?? ?? ????? ?????? ???? ???. iPadOS 17.4?? ??? ?? ??? ?? ??? ? ?? ?? ?? ??? ?? ??? ????. ? ?? ???? ??? ??? ??? ???? ?? ??? iPad ?? ??? ??? ???? ??? ??? ???? ??? ???? ??? ??? ? ???? ??? ? ??? ?? ????. ??? ??? ??? ?????? ??? ??? ?? ??? ?? ??? ?? ??? ?? ????? ?? ?? ???? ???? ??? ? ????. ?? ??? ??? ??

Watch4pro? gt? ?? ?? ?? ??? ?? ??? ????? ??? ????. ???? ??, ???, ??? ??? ??? ?? ? ?? ??? ??? ??? ??? Watch 4 Pro? ? ??? ? ????. ?? ?? ?? ??? ?? ??? ??? ???? ??? ? ?? ??? ???? ?? GT ???? ? ??? ? ????. ?? ??? ??? ??? ??, ???? ?? ????? ???. ??? ??? ? ??? ? ????, ??? ??? ?? ??? ??? ???? ?? ??? ??? ?? ?? ????.
