PHP實(shí)現(xiàn)的自定義圖像居中裁剪函數(shù)示例【測(cè)試可用】
本文實(shí)例講述了PHP實(shí)現(xiàn)的自定義圖像居中裁剪函數(shù)。分享給大家供大家參考,具體如下:
圖像居中裁減的大致思路:
1.首先將圖像進(jìn)行縮放,使得縮放后的圖像能夠恰好覆蓋裁減區(qū)域。(imagecopyresampled — 重采樣拷貝部分圖像并調(diào)整大?。?/p>
2.將縮放后的圖像放置在裁減區(qū)域中間。(imagecopy — 拷貝圖像的一部分)
3.裁減圖像并保存。(imagejpeg | imagepng | imagegif — 輸出圖象到瀏覽器或文件)
具體代碼:
//==================縮放裁剪函數(shù)====================
/**
* 居中裁剪圖片
* @param string $source [原圖路徑]
* @param int $width [設(shè)置寬度]
* @param int $height [設(shè)置高度]
* @param string $target [目標(biāo)路徑]
* @return bool [裁剪結(jié)果]
*/
function image_center_crop($source, $width, $height, $target)
{
if (!file_exists($source)) return false;
/* 根據(jù)類型載入圖像 */
switch (exif_imagetype($source)) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($source);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($source);
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif($source);
break;
}
if (!isset($image)) return false;
/* 獲取圖像尺寸信息 */
$target_w = $width;
$target_h = $height;
$source_w = imagesx($image);
$source_h = imagesy($image);
/* 計(jì)算裁剪寬度和高度 */
$judge = (($source_w / $source_h) > ($target_w / $target_h));
$resize_w = $judge ? ($source_w * $target_h) / $source_h : $target_w;
$resize_h = !$judge ? ($source_h * $target_w) / $source_w : $target_h;
$start_x = $judge ? ($resize_w - $target_w) / 2 : 0;
$start_y = !$judge ? ($resize_h - $target_h) / 2 : 0;
/* 繪制居中縮放圖像 */
$resize_img = imagecreatetruecolor($resize_w, $resize_h);
imagecopyresampled($resize_img, $image, 0, 0, 0, 0, $resize_w, $resize_h, $source_w, $source_h);
$target_img = imagecreatetruecolor($target_w, $target_h);
imagecopy($target_img, $resize_img, 0, 0, $start_x, $start_y, $resize_w, $resize_h);
/* 將圖片保存至文件 */
if (!file_exists(dirname($target))) mkdir(dirname($target), 0777, true);
switch (exif_imagetype($source)) {
case IMAGETYPE_JPEG:
imagejpeg($target_img, $target);
break;
case IMAGETYPE_PNG:
imagepng($target_img, $target);
break;
case IMAGETYPE_GIF:
imagegif($target_img, $target);
break;
}
// return boolval(file_exists($target));//PHP5.5以上可用boolval()函數(shù)獲取返回的布爾值
return file_exists($target)?true:false;//兼容低版本PHP寫(xiě)法
}
//==================函數(shù)使用方式====================
// 原始圖片的路徑
$source = '../source/img/middle.jpg';
$width = 480; // 裁剪后的寬度
$height = 480;// 裁剪后的高度
// 裁剪后的圖片存放目錄
$target = '../source/temp/resize.jpg';
// 裁剪后保存到目標(biāo)文件夾
if (image_center_crop($source, $width, $height, $target)) {
echo "原圖1440*900為:<img src='$source'>";
echo "<hr>";
echo "修改后圖片480*480為:<img src='$target'>";
}
運(yùn)行效果:
原圖1440*900為:
修改后圖片480*480為:
同理,480*320,、800*600等尺寸的圖片只需修改相應(yīng)參數(shù)即可。
附:代碼測(cè)試中遇到的問(wèn)題
報(bào)錯(cuò):call an undefined function exif_imagetype()
解決方法:
打開(kāi)擴(kuò)展 extension=php_exif.dll
并將extension=php_mbstring.dll ,放到extension=php_exif.dll前邊
另:boolval()函數(shù)為PHP5.5版本以上才能使用的函數(shù),本文測(cè)試代碼中為兼容低版本,使用如下語(yǔ)句代替:
return file_exists($target)?true:false;
PS:這里再為大家推薦幾款相關(guān)的圖片在線工具供大家參考使用:
在線圖片格式轉(zhuǎn)換(jpg/bmp/gif/png)工具:
http://tools.jb51.net/aideddesign/picext
在線PS圖像處理工具:
http://tools.jb51.net/aideddesign/webps
ICO圖標(biāo)在線生成工具:
http://tools.jb51.net/aideddesign/ico_img
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》及《PHP基本語(yǔ)法入門教程》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- thinkPHP框架實(shí)現(xiàn)圖像裁剪、縮放、加水印的方法
- PHP圖像裁剪縮略裁切類源碼及使用方法
- PHP圖片裁剪函數(shù)(保持圖像不變形)
- php+js實(shí)現(xiàn)圖片的上傳、裁剪、預(yù)覽、提交示例
- php使用imagick模塊實(shí)現(xiàn)圖片縮放、裁剪、壓縮示例
- 使用gd庫(kù)實(shí)現(xiàn)php服務(wù)端圖片裁剪和生成縮略圖功能分享
- PHP 裁剪圖片成固定大小代碼方法
- PHP圖片處理之使用imagecopyresampled函數(shù)裁剪圖片例子
- PHP加Nginx實(shí)現(xiàn)動(dòng)態(tài)裁剪圖片方案
- PHP實(shí)現(xiàn)圖片裁剪、添加水印效果代碼
- php結(jié)合imgareaselect實(shí)現(xiàn)圖片裁剪
- JQuery PHP圖片在線裁剪實(shí)例
相關(guān)文章
PHP管理內(nèi)存函數(shù) memory_get_usage()使用介紹
我們?cè)趯?shí)際編碼中,要想實(shí)現(xiàn)對(duì)內(nèi)存的查看和操作,許多程序員們第一個(gè)想到的就是PHP memory_get_usage()這個(gè)PHP腳本內(nèi)存函數(shù)2012-09-09
php 下 html5 XHR2 + FormData + File API 上傳文件操作實(shí)例分析
這篇文章主要介紹了php 下 html5 XHR2 + FormData + File API 上傳文件操作,結(jié)合實(shí)例形式分析了php 下使用html5 XHR2 + FormData + File API 實(shí)現(xiàn)上傳文件操作方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
對(duì)比分析php中Cookie與Session的異同
這篇文章主要通過(guò)多方面對(duì)比分析php中Cookie與Session的區(qū)別,分別對(duì)Cookie與Session做一個(gè)簡(jiǎn)單介紹和總結(jié),感興趣的小伙伴們可以參考一下2016-02-02
PHP實(shí)現(xiàn)克魯斯卡爾算法實(shí)例解析
這篇文章主要介紹了PHP實(shí)現(xiàn)克魯斯卡爾算法實(shí)例解析,是PHP程序設(shè)計(jì)中一個(gè)比較經(jīng)典的應(yīng)用,需要的朋友可以參考下2014-08-08
解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問(wèn)題
今天小編就為大家分享一篇解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
PHP的Yii框架中Model模型的學(xué)習(xí)教程
這篇文章主要介紹了PHP的Yii框架中Model模型的學(xué)習(xí)教程,Yii框架本身就顯龐大,所以模型類也就更加需要很好的編寫(xiě)維護(hù),需要的朋友可以參考下2016-03-03

