摘要:庫畫圖的典型流程創建畫布創建各種顏料繪畫如,寫字,畫線,畫矩形等形狀保存成圖片清理畫布畫線保存圖片保存成功保存失敗輸出圖片字母數字驗證碼畫布中文驗證碼中文驗證碼實際項目中抽取幾百個,幾千個常用漢字,放數組里,隨機選取的一是在了不和有
GD庫畫圖的典型流程
創建畫布
創建各種顏料
繪畫(如,寫字,畫線,畫矩形等形狀)
保存成圖片
清理畫布
字母數字驗證碼 中文驗證碼 扭曲驗證碼
扭曲驗證碼 class Image { public static function code() { $str = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz23456789"; $text = substr(str_shuffle($str), 0, 4); $src = imagecreatetruecolor(50, 25); $dst = imagecreatetruecolor(50, 25); $src_gray = imagecolorallocate($src, 200, 200, 200); $dst_gray = imagecolorallocate($dst, 200, 200, 200); imagefill($src, 0, 0, $src_gray); imagefill($dst, 0, 0, $dst_gray); $color = imagecolorallocate($src, mt_rand(50, 255), mt_rand(50, 150), mt_rand(50, 200)); imagestring($src, 6, 7, 5, $text, $color); // 扭曲 for ( $i=0; $i<60; $i++ ) { $offsetY = 3; // 最大波動像素 (px) $round = 2; // 2個周期 即 (4π) $posY = round(sin( ($round * 2 * M_PI / 60) * $i ) * $offsetY); // 根據正選曲線計算上下波動的 posY imagecopy($dst, $src, $i, $posY, $i, 0, 1, 25); } // 顯示 header("Content-type: image/png"); imagepng($dst); imagedestroy($src); imagedestroy($dst); } } echo Image::code(); ?>圖片處理類
水印 : 把指定的水印復制到目標上,并加透明效果
縮略圖 : 把大圖片復制到小尺寸畫面上
圖片信息通過getimagesize() 獲取圖片的大小,和后綴名.
判斷圖片是否存在
getimagesize() 是否是有解析圖片信息
處理圖片的大小和后綴信息.
從一張圖片中讀取到另一張圖片上,通過imagecopymerge()實現
判斷圖片是否存在
水印小圖片是否比原始圖片大
水印圖的位置
處理水印圖
$dstInfo["height"] || $waeterInfo["width"] > $dstInfo["width"] ) { return false; } // 兩張圖片讀取到畫布上, 使用處理 動態函數讀取 $dFun = "imagecreatefrom" . $dstInfo["ext"]; $wFun = "imagecreatefrom" . $dstInfo["ext"]; // 是否存在函數 if ( !function_exists($dFun) || !function_exists($wFun) ) { return false; } // 動態加載函數創建畫布 $dIm = $dFun($dst); // 創建待操作的畫布 $wIm = $wFun($water); // 創建水印畫布 // 處理水印的位置 計算粘貼的坐標 switch ($pos) { case 0: // 左上角 $posX = 0; $posY = 0; break; case 1: // 右上角 $posX = $dstInfo["width"] - $waeterInfo["width"]; $poxY = 0; break; case 2: // 居中 $posX = ($dstInfo["width"] - $waeterInfo["width"]) / 2; $posY = ($dstInfo["height"] - $waeterInfo["height"]) / 2; break; case 3: // 左下角 $posX = 0; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; case 4: // 右下角 $posX = $dstInfo["width"] - $waeterInfo["width"]; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; case 5: // 底部中間 $posX = ($dstInfo["width"] - $waeterInfo["width"]) / 2; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; } // 加水印 imagecopymerge($dIm, $wIm, $posX, $posY, 0, 0, $waeterInfo["width"], $waeterInfo["height"], $alpha); // 保存 if (!$save) { $save = $dst; unlink($dst); // 刪除原圖片 } // 生成水印 $createFun = "image" . $dstInfo["ext"]; $createFun($dIm, $save); imagedestroy($dIm); imagedestroy($wIm); return true; } ?>生成縮略圖
創建畫布生成縮略圖,通過imagecopyresampled()
判斷文件是否存在
圖片信息是否為假
計算縮放比例
創建畫布
計算留白和寬高
處理縮略圖
/** * thumb 生成縮略圖 * 等比例縮放,兩邊留白 * @param {String} $dst 原始路徑 * @param {String} $save 保存路徑 * @param {Int} $width 縮略圖 寬度 * @param {Int} $height 縮略圖 高度 * @return {Boolen} 生成縮略圖是否成功 */ public static function thumb( $dst, $save=NULL, $width=200, $height=200 ) { // 判斷路徑是否存在 if ( !file_exists($dst) ) { return false; } $dinfo = self::imageInfo($dst); // 圖片信息為假 if ( $dinfo == false ) { return false; } // 計算縮放比例 $calc = min($width / $dinfo["width"], $height / $dinfo["height"]); // 創建原始圖畫布 $dfunc = "imagecreatefrom" . $dinfo["ext"]; $dim = $dfunc($dst); // 創建縮略畫布 $tim = imagecreatetruecolor($width, $height); // 創建白色填充縮略畫布 $while = imagecolorallocate($tim, 255, 255, 255); imagefill($tim, 0, 0, $while); // 復制并縮略 $dwidth = (int)$dinfo["width"] * $calc; $dheight = (int)$dinfo["height"] * $calc; $paddingx = (int)($width - $dwidth) / 2; $paddingy = (int)($height - $dheight) / 2 ; imagecopyresampled($tim, $dim, $paddingx, $paddingy, 0, 0, $dwidth, $dheight, $width, $height); // 保存圖片 if ( !$save ) { $save = $dst; unlink($dst); } $createfun = "image" . $dinfo["ext"]; $createfun($tim, $save); // 銷毀 imagedestroy($dim); imagedestroy($tim); return true; } ?>ImageTool.class
class ImageTool { /** * 分析圖片的信息 * @param {String} $image 圖片路徑 * @return {mixin} Array Boolean */ protected static function imageInfo( $image ) { // 判斷圖片是否存在 if(!file_exists($image)) { return false; } $info = getimagesize($image); if($info == false) { return false; } // 此時info分析出來,是數組 $img["width"] = $info[0]; $img["height"] = $info[1]; $img["ext"] = substr($info["mime"] ,strpos($info["mime"], "/")+1); // 后綴 return $img; } /** * 加水印 * @param {String} $dst 目標圖片 * @param {String} $water 水印小圖片 * @param {String} $save 存儲圖片位置 默認替換原始圖 * @param {Int} $alpha 透明度 * @param {Int} $pos 水印位置 * @return {Boolean} 添加水印是否成功 */ public static function addWater($dst, $water, $save=NULL, $pos=4, $alpha=50) { // 保證二個文件是否存在 if(!file_exists($dst) || !file_exists($water)) { return false; } $dstInfo = self::imageInfo($dst); // 讀取圖片信息 $waeterInfo = self::imageInfo($water); // 讀取圖片信息 // 水印不能比待操作圖片大 if( $waeterInfo["height"] > $dstInfo["height"] || $waeterInfo["width"] > $dstInfo["width"] ) { return false; } // 兩張圖片讀取到畫布上, 使用處理 動態函數讀取 $dFun = "imagecreatefrom" . $dstInfo["ext"]; $wFun = "imagecreatefrom" . $dstInfo["ext"]; // 是否存在函數 if ( !function_exists($dFun) || !function_exists($wFun) ) { return false; } // 動態加載函數創建畫布 $dIm = $dFun($dst); // 創建待操作的畫布 $wIm = $wFun($water); // 創建水印畫布 // 處理水印的位置 計算粘貼的坐標 switch ($pos) { case 0: // 左上角 $posX = 0; $posY = 0; break; case 1: // 右上角 $posX = $dstInfo["width"] - $waeterInfo["width"]; $poxY = 0; break; case 2: // 居中 $posX = ($dstInfo["width"] - $waeterInfo["width"]) / 2; $posY = ($dstInfo["height"] - $waeterInfo["height"]) / 2; break; case 3: // 左下角 $posX = 0; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; case 4: // 右下角 $posX = $dstInfo["width"] - $waeterInfo["width"]; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; case 5: // 底部中間 $posX = ($dstInfo["width"] - $waeterInfo["width"]) / 2; $posY = $dstInfo["height"] - $waeterInfo["height"]; break; } // 加水印 imagecopymerge($dIm, $wIm, $posX, $posY, 0, 0, $waeterInfo["width"], $waeterInfo["height"], $alpha); // 保存 if (!$save) { $save = $dst; unlink($dst); // 刪除原圖片 } // 生成水印 $createFun = "image" . $dstInfo["ext"]; $createFun($dIm, $save); imagedestroy($dIm); imagedestroy($wIm); return true; } /** * thumb 生成縮略圖 * 等比例縮放,兩邊留白 * @param {String} $dst 原始路徑 * @param {String} $save 保存路徑 * @param {Int} $width 縮略圖 寬度 * @param {Int} $height 縮略圖 高度 * @return {Boolen} 生成縮略圖是否成功 */ public static function thumb( $dst, $save=NULL, $width=200, $height=200 ) { // 判斷路徑是否存在 if ( !file_exists($dst) ) { return false; } $dinfo = self::imageInfo($dst); // 圖片信息為假 if ( $dinfo == false ) { return false; } // 計算縮放比例 $calc = min($width / $dinfo["width"], $height / $dinfo["height"]); // 創建原始圖畫布 $dfunc = "imagecreatefrom" . $dinfo["ext"]; $dim = $dfunc($dst); // 創建縮略畫布 $tim = imagecreatetruecolor($width, $height); // 創建白色填充縮略畫布 $while = imagecolorallocate($tim, 255, 255, 255); imagefill($tim, 0, 0, $while); // 復制并縮略 $dwidth = (int)$dinfo["width"] * $calc; $dheight = (int)$dinfo["height"] * $calc; $paddingx = (int)($width - $dwidth) / 2; $paddingy = (int)($height - $dheight) / 2 ; imagecopyresampled($tim, $dim, $paddingx, $paddingy, 0, 0, $dwidth, $dheight, $width, $height); // 保存圖片 if ( !$save ) { $save = $dst; unlink($dst); } $createfun = "image" . $dinfo["ext"]; $createfun($tim, $save); // 銷毀 imagedestroy($dim); imagedestroy($tim); return true; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22068.html
摘要:讀取文件的庫有很多,但用的比較多的有,現在已經不再維護了,最新的一次提交還是在年月號,建議直接使用,而且這兩個項目都是同一個組織維護的,本文介紹的使用。 showImg(https://segmentfault.com/img/bVbl9a1?w=1308&h=240); PHP讀取excel、csv文件的庫有很多,但用的比較多的有: PHPOffice/PHPExcel、PHPOff...
摘要:在多種環境中遷移,代碼無需修改,是無縫遷移的。由于大部分用戶開發是在中進行,因此開發階段我們推薦使用部署方案,因為更簡單快速,下面整體演示一下的環境搭建。安裝解壓至指定安裝目錄。先不要啟動,這會啟動會報錯,沒加環境變量。 MixPHP 是一款基于 Swoole 的常駐內存型 PHP 高性能框架。 MixPHP 同時支持多種環境中執行: Nginx + mix-httpd (使用到 S...
摘要:在多種環境中遷移,代碼無需修改,是無縫遷移的。由于大部分用戶開發是在中進行,因此開發階段我們推薦使用部署方案,因為更簡單快速,下面整體演示一下的環境搭建。安裝解壓至指定安裝目錄。先不要啟動,這會啟動會報錯,沒加環境變量。 MixPHP 是一款基于 Swoole 的常駐內存型 PHP 高性能框架。 MixPHP 同時支持多種環境中執行: Nginx + mix-httpd (使用到 S...
摘要:表示需要運行庫,缺少它將會在接來下的過程中彈出類似的提示運行庫下載如果以前安裝過,則不必再裝。回車回車回車即可將服務創建,關閉窗口。下的安裝有一個臨時密碼問題。有空再把下的安裝記錄一下。 最近想更新Web服務器上的軟件,查了一下apache、php、mysql版本都很高了,有些變動還很大,所以先在Win上安裝熟悉一下,下面是安裝配置記錄: 系統:64位Windows7時間:2017年3...
閱讀 2296·2023-04-25 16:42
閱讀 1202·2021-11-22 14:45
閱讀 2338·2021-10-19 13:10
閱讀 2827·2021-09-29 09:34
閱讀 3408·2021-09-23 11:21
閱讀 2100·2021-08-12 13:25
閱讀 2180·2021-07-30 15:15
閱讀 3491·2019-08-30 15:54