先说需求,公司的一个项目因为没注意,上传把图片都是为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);
    }
}

 

此方法可适用于修改各类文件格式,做个类型判断就好了

 

版权声明:本文为seanpan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/seanpan/p/13984420.html