PHP怎么批量修改图片大小?

来源:07素材网 01月08日 12:33
相信大家和我一样,网站的图片大小不一,有的错略图小的才几KB,大的可能有几MB,为了提高用户体验,我们需要将图片的缩略图统一大小,也就是宽高,我的网站8000多条张图片之前没有很好的方法去处理,有想过用PS,感觉还行但是很麻烦,后来脑子闪了一道光,,想到用PHP处理,果然,我的想法是可以实现的,还很只能哟。今天就和大家分享下PHP如何批量修改图片大小。

首先我们确定到要修改的图片名称或者图片所在的目录是和数据库中的文章ID是有关联的,换句话说,图片的名称是是文章的ID,或者图片目录是文章的ID,当然也可以是以自然数字命名,这样的好处是易于遍历

下面就以我修改网站所有素材的错略图为例,之前都是截图的,大小不一,访问速度也很慢。那么我们需要做的是循环遍历所有素材内容,每遍历一次就执行createImage方法自动生成一张图片,我这里之前的图片是每个文件夹下的图片名称是一致的,文件夹又是和文章ID匹配,所以我的操作是这样:

数据库查询:
$sql = $db->select("表名", "id", "where id>'8000'");
while ($rows = $db->fetch_assoc($sql)) {
    // 参数1是目标路径,参数2是原文件,参数3是宽,参数4是高
    $upload->createImage("../images/".$rows[id].".jpg", "../code/".$rows[id]."/album/001.jpg", "350", "350");
}
生成图片方法:
// 图片生成, PG/JPEG格式作品上传要求:最短边需≥1200px,高宽之和需≥4000px
function createImage($thumb_address, $ori_address, $width, $height){
    global $file, $fn;
    
    $_SESSION[im_info]=getimagesize($ori_address); //图片信息
    switch($_SESSION[im_info][2]){
        case 1:
        $img=imagecreatefromgif($ori_address);
        break;
        case 2:
        $img=imagecreatefromjpeg($ori_address);
        break;
        case 3:
        $img=imagecreatefrompng($ori_address);
        break;
    }
    
    //获取图片色彩模式
    switch($_SESSION[im_info][channels]){
        case 3:
        $_SESSION[im_info][mode]="RGB";
        break;
        case 4:
        $_SESSION[im_info][mode]="CMYK";
        break;
    }
    
    $_SESSION[im_info][size]= $file["size"];

    //获取图片信息
    $file_info = array(
        "width"=>$_SESSION[im_info][0],
        "height"=>$_SESSION[im_info][1]
    );

    //判断源图像的宽高来设置缩略图和相册的宽高
    if($file_info[width] > $file_info[height]){
        $file_info[thumbheight]=$height;
        $file_info[thumbwidth]=round($file_info[width] * $file_info[thumbheight] / $file_info[height]);
    }else{
        $file_info[thumbwidth]=$width;
        $file_info[thumbheight]=round($file_info[height] * $file_info[thumbwidth] / $file_info[width]); }

    //创建和生成50 * 50像素缩略图
    $thumb = imagecreatetruecolor($file_info[thumbwidth], $file_info[thumbheight]);
    $color=imagecolorallocate($thumb,255,255,255); //2.上色 
    imagecolortransparent($thumb,$color); //3.设置透明 
    imagefill($thumb,0,0,$color); 
    imagecopyresampled($thumb, $img, 0, 0, 0, 0, $file_info[thumbwidth], $file_info[thumbheight], $file_info[width], $file_info[height]);
    imagejpeg($thumb,$thumb_address,75);//保存缩略图
} 

原文出处:http://yunxi10.com
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。

头条

在使用SQLite3时遇到的几个坑

在使用SQLite3时遇到的几个坑

《本打算在SQLite3数据库里执行一个查询语句,使用的是php语言,起初遇到的是权限问题: permission denied,因为SQLite3数据库文件和PHP执行者属于两个不同的用户,首先需要对这个文件执行mode 777的权限开放,然后,又遇到了下面这样的PHP错误