PHP处理图片(JPG/PNG/GIF)
生活随笔
收集整理的這篇文章主要介紹了
PHP处理图片(JPG/PNG/GIF)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
后端處理圖片
在有些特殊時候,可能需要后端來處理一些圖片數(shù)據(jù)或者需要批量處理圖片,這時候我們可以依賴GD庫來實現(xiàn)
?
說明:主要是對JPG/PNG/GIF圖的縮放,修改尺寸,如果需要裁剪而非縮放的話,其實原理也是一樣,稍稍改造下函數(shù)即可
?
代碼實現(xiàn)
?
<?php/*** Message: 處理圖片* Date: 2018/10/18* Time: 上午10:12* Return:*/ class ImageHelper {const MAX_JPG_QUALITY = 100;const MAX_PNG_QUALITY = 9;/*** 對原圖片按要求尺寸進行縮放* @param $srcFile //源文件* @param $objFile //輸出文件* @param $newWidth* @param $newHeight* @param int $quality //輸出圖片質(zhì)量,0 - 10* @param bool $keepFormat //如果你需要保持原圖片的橫版或豎版,請設為true* @return bool*/public function setImageSize($srcFile, $objFile, $newWidth, $newHeight, $quality = 7, $keepFormat = false){if (!file_exists($srcFile)) {return false;}if ($newWidth < 1 || $newHeight < 1) {return false;}if ($quality < 0 || $quality >10) {return false;}$type = exif_imagetype($srcFile);$supportType = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);if (!in_array($type, $supportType, true)) {return false;}//加載圖片switch($type) {case IMAGETYPE_JPEG :$srcImg = imagecreatefromjpeg($srcFile);break;case IMAGETYPE_PNG :$srcImg = imagecreatefrompng($srcFile);break;case IMAGETYPE_GIF :$srcImg = imagecreatefromgif($srcFile);break;default:return false;}$w = imagesx($srcImg);$h = imagesy($srcImg);//保持版式,即保持原圖的寬大于高或高大于寬的格式,防止變形if ($keepFormat) {if (($w < $h && $newWidth > $newHeight) || ($w > $h && $newWidth < $newHeight)) {list($newWidth, $newHeight) = array($newHeight, $newWidth);}}//將原圖數(shù)據(jù)寫入新圖//注意--是否需要alpha通道按情況判斷,不需要可以注釋掉以節(jié)省內(nèi)存和空間$newImg = imagecreatetruecolor($newWidth, $newHeight);$alpha = imagecolorallocatealpha($newImg, 0, 0, 0, 127);//alphaimagefill($newImg, 0, 0, $alpha);//alphaimagecopyresampled($newImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $w, $h);imagesavealpha($newImg, true);//alphaswitch($type) {case IMAGETYPE_JPEG :imagejpeg($newImg, $objFile,$quality * 10); // 存儲圖像break;case IMAGETYPE_PNG :imagepng($newImg, $objFile, intval($quality / 10 * 9));break;case IMAGETYPE_GIF :imagegif($newImg, $objFile);break;default:break;}return true;} }簡單示例
$imgHelper = new ImageHelper(); if ($imgHelper->setImageSize('./test.jpg', './new_file.jpg', 1920, 1080)) {echo "change success\n"; } else {echo "failed\n"; }批量處理
$src = '/test/'; $count = 1; if ($dh = opendir($src)) {while ($fileName = readdir($dh) !== false) {if ($fileName != '.' && $fileName != '..' && !empty($fileName)) {if ($imgHelper->setImageSize('./test.jpg', './new_file' . $count++ . '.jpg', 1920, 1080)) {echo "{$count}change success\n";} else {echo "{$count}failed\n";}}} }注意
在批處理圖片的時候,或者某些圖片比較大,可能會超出PHP腳本所允許的內(nèi)存大小,這時候我們可以在腳本前去掉內(nèi)存限制以滿足需求。
請一定在確認不影響服務前提下操作!
ini_set('memory_limit', '-1');-1 是 無限制,在圖片數(shù)據(jù)不大的情況下設置比較安全,不然還是加上一定的內(nèi)存限制吧
備注
文章純手打,給個贊唄
也可以關注我的個人微信公眾號,有問題留言即可
總結
以上是生活随笔為你收集整理的PHP处理图片(JPG/PNG/GIF)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XGBoost(eXtreme Grad
- 下一篇: php判断星期几switch,php 中