蒼天家 本家
PHP - 圖片縮小與放大 2017-01-10
採用PHP內建的GD縮圖套件,
另外有ImageMagick套件,
如果對於影像處理不需要較多的檔案類型支援,
又沒有需要處理動態gif需求(GD雖然支援gif,但輸出的gif無法播放動態),
推薦用GD即可.

假設為縮圖限制最長邊縮至1280寬度,
兩邊皆為超過1280則不縮圖.
(這裡是我拿這個部落格縮圖的程式碼直接用,寫得不是很優)

首先須在php.ini將GD環境打開
;extension=php_gd2.dll(去掉;)

$source = imagecreatefromjpeg(檔案位置); //輸入檔案位置
$src_w = imagesx($source); //偵測原始圖片寬度
$src_h = imagesy($source); //偵測原始圖片高度

//縮小圖片
if($src_w > $src_h){ //寬度大於高度
if($src_w > 1280){ //寬度超過1280
$resrc_w = 1280; //寬度為1280
$resrc_h = intval($src_h / $src_w * 1280); //依照原始比例調整高度
} else { //寬度小於1280時,則僅複製原始值
$resrc_w = $src_w;
$resrc_h = $src_h;
}
} else { //高度大於寬度
if($src_h > 1280){ //寬度大於高度
$resrc_h = 1280; //高度為1280
$resrc_w = intval($src_w / $src_h * 1280); //依照原始比例調整寬度
} else { //高度小於1280時,則僅複製原始值
$resrc_w = $src_w;
$resrc_h = $src_h;
}
}

if($src_h >= 1280 || $src_w >= 1280){ //假如有超過1280時
$newsrc = imagecreatetruecolor($resrc_w, $resrc_h); //建立新圖像
imagecopyresized($newsrc, $source, 0, 0, 0, 0, $resrc_w, $resrc_h, $src_w, $src_h); //複製圖像

//簡易銳利工具(縮圖用)
$sharpenMatrix = array( array(0, -1.0, 0), array(-1.0, 12, -1.0), array(0, -1.0, 0) ); //此處為九宮格,調整銳利強度
$divisor = array_sum(array_map('array_sum', $sharpenMatrix)); //正常為$sharpenMatrix變數的加總
$offset = 0;
imageconvolution($newsrc, $sharpenMatrix, $divisor, $offset);

imagejpeg($newsrc, $out_file , 100); //將圖像另存新檔,第三個值為圖片畫質,100為最好
imagedestroy($source); //刪除處理用圖像
imagedestroy($newsrc); //刪除處理用圖像

} else { //假如未超過1280時

$newsrc = imagecreatetruecolor($resrc_w, $resrc_h); //建立新圖像
imagecopyresized($newsrc, $source, 0, 0, 0, 0, $resrc_w, $resrc_h, $src_w, $src_h); //複製圖像

imagejpeg($newsrc, $out_file , 100); //將圖像另存新檔,第三個值為圖片畫質,100為最好
imagedestroy($source); //刪除處理用圖像
imagedestroy($newsrc); //刪除處理用圖像

}
關於我

隨手用部落格

紀錄平時學習用到的東西

考慮想重改版

Github 自學倉庫

我的 Github 帳號

PHP開發

公司: 原生PHP

個人: Slim -> Flight

關聯文章
CORS的簡單跨域實作(PHP + jQuery)
優化MySQL的在innodb資料效能
PHP , JS - 雙方json資料溝通方式.
PHP - is_dir_檢查資料夾是否存在
PHP - 圖片縮小與放大
PHP 處理圖片旋轉問題
PHP - 檔案上傳環境設定
PHP - 檔案函數相關操作
PHP - 檔案上傳
PHP - Session設定
PHP - Cookie的設定
PHP - addslashes_反斜線,單引號,雙引號寫入資料庫
PHP - nl2br_輸入文字時按enter時自動加入<br>換行
PHP - strip_tags_html 標籤轉換純字元
PHP - PHP_EOL 解決各平台換行記號不統一問題
PHP - 前端大量值傳至後端方式
PHP - implode_explode 單一變數分解成陣列 / 陣列組合成單一變數
PHP - 查詢MySQL上Table的資訊(AUTO_INCREMENT)
PHP - mysqli 欄位相關
PHP - mysqli 資料撈取
PHP - mysqli 資料庫的使用
PHP - 引用外部的資料
PHP與前端(JS,HTML)相互傳值的方法
MySQL - 使用正規化
MySQL - 資料表的建立
MySQL - 資料庫簡單的計算
MySQL - 基礎語法
CSS - DIV / TD內部將圖片完全置中
CSS - overflow超過時處理方式
CSS - 左右文字平均對齊
HTML - 手機的顯示尺寸(RWD整理一篇文章)
HTML - 智慧型手機啟動app的網址
HTML - 預先讀取頁面或是資料的方式
JS - 手機裝置偵測位移
JS - 手機裝置轉址至手機版本介面
JS、PHP - if...else...精簡用法
JS - 文字取代與全部取代
JS - 偵測鍵盤事件方法
JS - 數值取樣
JS - 轉址與重新載入的語法
JS - 陣列變呼叫與存取的方式
jQuery Plugins - 透過timer.js來實現自動計時連續處理特定動作行為
jQuery Plugins - 透過jQuery form來實現上傳圖片不刷頁
jQuery - inArray找尋陣列符合值得方法
jQuery - 動態特效(animate與fade)相關
jQuery - 目前畫面卷軸位置、物件相對/絕對位置
jQuery - 滑鼠滑入滑出與hover用法
jQuery - focus/blur 焦點.失去焦點用法
JS、PHP - 轉頁方法
JS - 倒數功能
jQuery - 偵測目前的位移
jQuery - 偵測元素內的值是否有異動
jQuery - 僅執行一次one
jQuery - 事件綁定bind / live / delegate /on
jQuery - 操作子元素取得父元素屬性(.parent)
jQuery - 透過proxy將其它物件帶入特定function
回首頁