先说需求,公司的一个项目因为没注意,上传把图片都是为jpg格式的,发现太大了加载很慢。seo说要把所有的png格式改为jpg,也就有今天这篇文章
上代码
1.获取一个文件夹下的所有文件绝对路径的
/** * 函数说明:修改文件夹下的所有文件名 * @param string $path 文件夹路径 * 作者: panzhide * 日期: 2020/11/16 * 版本: 1.0 * @return array */ public function getDir($path) { if (is_dir($path)) { $dir = scandir($path); $arr = array(); foreach ($dir as $value) { $sub_path = $path . '\' . $value; if ($value == '.' || $value == '..') { continue; } else if (is_dir($sub_path)) { $this->getDir($sub_path); } else { //$arr[] = $path . '\' . $value; //直接修改文件名 $this->png2jpg($path . '\' . $value); } } } }
2.修改图片格式的
/** * 函数说明:jpg转png * @param string $srcPathName 文件路径 * @param string $delOri 是否删除原图片 * 作者: panzhide * 日期: 2020/11/16 * 版本: 1.0 * @return array */ public function png2jpg($srcPathName, $delOri = true) { $srcFile = $srcPathName; $srcFileExt = strtolower(trim(substr(strrchr($srcFile, '.'), 1))); if ($srcFileExt == 'png') { $dstFile = str_replace('.png', '.jpg', $srcPathName); $photoSize = GetImageSize($srcFile); $pw = $photoSize[0]; $ph = $photoSize[1]; $dstImage = ImageCreateTrueColor($pw, $ph); imagecolorallocate($dstImage, 255, 255, 255); //读取图片 $srcImage = ImageCreateFromPNG($srcFile); //合拼图片 imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $pw, $ph, $pw, $ph); imagejpeg($dstImage, $dstFile, 90); if ($delOri) { unlink($srcFile); } imagedestroy($srcImage); } }
此方法可适用于修改各类文件格式,做个类型判断就好了