PHP基于imagick擴(kuò)展實(shí)現(xiàn)合成圖片的兩種方法【附imagick擴(kuò)展下載】
本文實(shí)例講述了PHP基于imagick擴(kuò)展實(shí)現(xiàn)合成圖片的兩種方法。分享給大家供大家參考,具體如下:
方法一:compositeimages
/**
* function: 合成圖片
* @param string $output_url 圖片保存路徑
* @param string $img_type 圖片保存類型
* @param integral $line_num 每行顯示圖片數(shù)量
* @param array $logo_info 每張待合成圖片的信息(要求所有尺寸統(tǒng)一)
* @param array $img_list 待合成的圖片絕對(duì)路徑
*
* @return void
*/
public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {
//計(jì)算圖片有多少行
$lines = ceil(count($img_list)/$line_num);
$bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;
$bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;
//構(gòu)建畫布
$canvas = new Imagick();
$canvas->newimage($bg_width, $bg_height, 'white');
$canvas->setimageformat($img_type);
$i = $j = 0;
foreach ($img_list as $item) {
$im = new Imagick($item);
$x = $logo_info['line_width']*2 + $i * $logo_info['width'];
$y = $logo_info['line_height']*2 + $j * $logo_info['height'];
// $canvas->compositeimage($im -> getimage(), Imagick::COMPOSITE_OVER, $x, $y);
$canvas -> compositeimage($im, $im->getImageCompose(), $x, $y);
if (($i + 1) % $line_num === 0) {
$i = 0;
$j++;
} else {
$i++;
}
// unset($im);
$im -> destroy();
}
$canvas->writeimage($output_url);
//銷毀對(duì)象
$canvas -> destroy();
}
方法二:combineimages
/**
* function: 合成圖片
* @param string $output_url 圖片保存路徑
* @param string $img_type 圖片保存類型
* @param integral $line_num 每行顯示圖片數(shù)量
* @param array $logo_info 每張待合成圖片的信息(要求所有尺寸統(tǒng)一)
* @param array $img_list 待合成的圖片絕對(duì)路徑
*
* @return void
*/
public function generate($output_url, $img_type, $line_num, $logo_info, $img_list=array()) {
//計(jì)算圖片有多少行
$lines = ceil(count($img_list)/$line_num);
$bg_width = ($logo_info['width'] + $logo_info['line_width']) * $line_num;
$bg_height = ($logo_info['height'] + $logo_info['line_height']) * $lines;
//構(gòu)建畫布
$canvas = null;
$canvas = new Imagick();
$canvas -> newimage($bg_width, $bg_height, 'white');
$i = $j = 0;
foreach ($img_list as $item) {
$im = null;
$im = new Imagick($item);
// $canvas -> readImage($item);
$canvas -> addimage($im);
$im -> clear();
$im -> destroy();
}
// $canvas -> flattenImages();
$canvas -> combineImages( Imagick::CHANNEL_ALL );
$canvas -> writeimage($output_url);
//銷毀對(duì)象
$canvas -> clear();
$canvas -> destroy();
}
個(gè)人認(rèn)為方法二效率更高
附:windows下面php5.2.17和php5.3.18和php5.4.8各個(gè)版本的imagick組件下載
1、PHP5.2.17我安裝成功了,用的星外PHP5.2.17直接安裝程序,下載imagick版本如下:
點(diǎn)擊此處本站下載。
已經(jīng)包含imagemagick不需要安裝任何東西,直接把php_imagick_st-Q16.dll復(fù)制到c:\php\ext目錄
然后給php.ini擴(kuò)展里面增加:extension=php_imagick_st-Q16.dll 最簡單和綠色的方法
ps:還有諸如php_imagick_st-Q8.dll(8色),php_imagick_dyn-Q16.dll(需要安裝imagemagick)就完全沒必要管他們了
PHP5.2.17本站下載地址:
32位:http://www.dbjr.com.cn/softs/26087.html
64位:http://www.dbjr.com.cn/softs/479475.html
2、PHP5.3.18 必須安裝 imagemagick 已經(jīng)沒有可用的單文件dll了
1)官方下載地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根據(jù)你的php安裝模式下載 php_imagick
線程安全:
點(diǎn)擊此處本站下載。
復(fù)制到c:\php\ext目錄,增加擴(kuò)展例如:extension=php_imagick_nts.dll
3、PHP5.4.8 必須安裝 imagemagick 已經(jīng)沒有可用的單文件dll了
1)官方下載地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根據(jù)你的PHP安裝模式下載 php_imagick
無線程安全:
點(diǎn)擊此處本站下載。
復(fù)制到c:\php\ext目錄,增加擴(kuò)展例如:extension=php_imagick.dll
以上安裝本人都測試過,安裝了重啟iis或Apache服務(wù)器,然后查看phpinfo看看有沒有 imagick 如果沒有的話,請(qǐng)檢查權(quán)限或者重新做一次。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例
- php圖片合成方法(多張圖片合成一張)
- PHP實(shí)現(xiàn)將幾張照片拼接到一起的合成圖片功能【便于整體打印輸出】
- PHP將身份證正反面兩張照片合成一張圖片的代碼
- PHP基于php_imagick_st-Q8.dll實(shí)現(xiàn)JPG合成GIF圖片的方法
- php curl優(yōu)化下載微信頭像的方法總結(jié)
- PHP仿微信多圖片預(yù)覽上傳實(shí)例代碼
- PHP實(shí)現(xiàn)微信圖片上傳到服務(wù)器的方法示例
- 微信小程序上傳圖片到php服務(wù)器的方法
- PHP 圖片合成、仿微信群頭像的方法示例
相關(guān)文章
PHP基于DateTime類解決Unix時(shí)間戳與日期互轉(zhuǎn)問題【針對(duì)1970年前及2038年后時(shí)間戳】
這篇文章主要介紹了PHP基于DateTime類解決Unix時(shí)間戳與日期互轉(zhuǎn)問題,通過DateTime類解決1970年前及2038年后時(shí)間戳顯示與計(jì)算問題,非常簡單實(shí)用,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下2018-06-06
php版微信公眾號(hào)接口實(shí)現(xiàn)發(fā)紅包的方法
這篇文章主要介紹了php版微信公眾號(hào)接口實(shí)現(xiàn)發(fā)紅包的方法,結(jié)合實(shí)例形式分析了php版微信公眾號(hào)實(shí)現(xiàn)發(fā)紅包的接口調(diào)用方法與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2016-10-10
使用php語句將數(shù)據(jù)庫*.sql文件導(dǎo)入數(shù)據(jù)庫
這篇文章主要介紹了如何使用php語句將數(shù)據(jù)庫*.sql文件導(dǎo)入數(shù)據(jù)庫,需要的朋友可以參考下2014-05-05
深入了解 register_globals (附register_globals=off 網(wǎng)站打不開的解決方法)
由于register_globals設(shè)置控制PHP變量訪問范圍,如果開啟會(huì)引起不必要的安全問題,所以這里對(duì)其進(jìn)行了強(qiáng)制關(guān)閉,如果站長的空間不支持,可以采用以下幾種辦法進(jìn)行修改,供廣大站長參考2012-06-06
應(yīng)用開發(fā)中涉及到的css和php筆記分享
最近一周使用SAE開發(fā)一個(gè)簡單的微博應(yīng)用。應(yīng)用本身很簡單,使用php算法可以輕松實(shí)現(xiàn)。但是在調(diào)用新浪API的時(shí)候遇到很多各種各樣的麻煩。應(yīng)用到現(xiàn)在還有些不穩(wěn)定。2011-08-08
PHP自動(dòng)選擇 連接本地還是遠(yuǎn)程數(shù)據(jù)庫
假設(shè)我們要在test.php文件中操作虛擬主機(jī)的數(shù)據(jù)庫,則首先要在本地調(diào)試,那么必然要連接本地、遠(yuǎn)程兩個(gè)不同的數(shù)據(jù)庫,問題:怎么讓test.php自動(dòng)識(shí)別當(dāng)下該連接本地還是遠(yuǎn)程數(shù)據(jù)庫呢?2010-12-12

