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ì)代碼見(jiàn) http://github.com/clarence-pan/thumbnail)

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

許多用戶(hù)在選擇智慧型手錶的時(shí)候都會(huì)選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門(mén)的選擇,不少用戶(hù)都很好奇華為GT3pro和GT4有什麼區(qū)別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質(zhì)是玻璃鏡板+不鏽鋼機(jī)身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質(zhì)是藍(lán)寶石玻璃鏡+鈦金屬機(jī)身/陶瓷機(jī)身+陶瓷後殼二、健康GT4:採(cǎi)用最新的華為T(mén)ruseen5.5+演算法,結(jié)果會(huì)更加的精準(zhǔn)。 GT3pro:多了ECG心電圖和血管及安

thumbnail是快取檔案。 thumbnail是由手機(jī)自帶的相機(jī)緩存縮圖形成的文件;形成該文件的主要原因是thumbnail文件夾下的thumbdata文件會(huì)自動(dòng)緩存手機(jī)照片的縮圖,用戶(hù)可以理解為緩存,即用戶(hù)觀看過(guò)照片後,會(huì)在該資料夾下的產(chǎn)生一個(gè)快取縮圖。

為什麼截圖工具在Windows11上不起作用了解問(wèn)題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無(wú)法正常工作的主要原因:對(duì)焦助手已開(kāi)啟:這可以防止截圖工具開(kāi)啟。應(yīng)用程式損壞:如果截圖工具在啟動(dòng)時(shí)崩潰,則可能已損壞。過(guò)時(shí)的圖形驅(qū)動(dòng)程式:不相容的驅(qū)動(dòng)程式可能會(huì)幹?jǐn)_截圖工具。來(lái)自其他應(yīng)用程式的干擾:其他正在運(yùn)行的應(yīng)用程式可能與截圖工具衝突。憑證已過(guò)期:升級(jí)過(guò)程中的錯(cuò)誤可能會(huì)導(dǎo)致此issu簡(jiǎn)單的解決方案這些適合大多數(shù)用戶(hù),不需要任何特殊的技術(shù)知識(shí)。 1.更新視窗與Microsoft應(yīng)用程式商店應(yīng)用程

在html5中,width的意思是寬度,width屬性定義元素內(nèi)容區(qū)的寬度,在內(nèi)容區(qū)外面可以增加內(nèi)邊距、邊框和外邊距,只需要給元素設(shè)定「元素{width:數(shù)值}」即可。

第1部分:初始故障排除步驟檢查蘋(píng)果的系統(tǒng)狀態(tài):在深入研究複雜的解決方案之前,讓我們先從基礎(chǔ)知識(shí)開(kāi)始。問(wèn)題可能不在於您的設(shè)備;蘋(píng)果的伺服器可能會(huì)關(guān)閉。造訪Apple的系統(tǒng)狀態(tài)頁(yè)面,查看AppStore是否正常運(yùn)作。如果有問(wèn)題,您所能做的就是等待Apple修復(fù)它。檢查您的網(wǎng)路連接:確保您擁有穩(wěn)定的網(wǎng)路連接,因?yàn)椤笩o(wú)法連接到AppStore」問(wèn)題有時(shí)可歸因於連接不良。嘗試在Wi-Fi和行動(dòng)數(shù)據(jù)之間切換或重置網(wǎng)路設(shè)定(「常規(guī)」>「重置」>「重置網(wǎng)路設(shè)定」>設(shè)定)。更新您的iOS版本:

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

如何使用iPadOS17.4優(yōu)化iPad電池壽命延長(zhǎng)電池續(xù)航時(shí)間是移動(dòng)設(shè)備體驗(yàn)的關(guān)鍵,iPad是一個(gè)很好的例子。如果您覺(jué)得iPad電池消耗速度過(guò)快,不用擔(dān)心,在iPadOS17.4中有許多技巧和調(diào)整可以顯著延長(zhǎng)設(shè)備的運(yùn)行時(shí)間。本深入指南的目標(biāo)不僅僅是提供信息,而是改變您使用iPad的方式,增強(qiáng)您的整體電池管理,并確保您可以在無(wú)需充電的情況下更長(zhǎng)時(shí)間地依賴(lài)您的設(shè)備。通過(guò)采用此處概述的做法,您朝著更高效、更謹(jǐn)慎地使用技術(shù)邁出了一步,這些技術(shù)是根據(jù)您的個(gè)人需求和使用模式量身定制的。識(shí)別主要的能量消耗者

watch4pro和gt各自具有不使用的特點(diǎn)和適用場(chǎng)景,如果注重功能的全面性、高性能和時(shí)尚外觀,同時(shí)願(yuàn)意承擔(dān)較高的價(jià)格,那麼Watch 4 Pro可能更適合。如果對(duì)功能要求不高,更注重電池續(xù)航力和價(jià)格的合理性,那麼GT系列可能更適合。最終的選擇應(yīng)根據(jù)個(gè)人需求、預(yù)算和喜好來(lái)決定,建議在購(gòu)買(mǎi)前仔細(xì)考慮自己的需求,並參考各種產(chǎn)品的評(píng)測(cè)和比較,以做出更明智的選擇。
