美文网首页
压缩和旋转上传的图片

压缩和旋转上传的图片

作者: 玛瑙鑫 | 来源:发表于2019-12-25 18:49 被阅读0次
public function save()

{

    $file = $_FILES['file'];

    dump_log('原始凭证:', $file);

    //原图

    $dst_image = imagecreatefromstring(file_get_contents($file['tmp_name']));

    //获取图片宽高

    list($file_width, $file_height) = getimagesize($file['tmp_name']);

    dump_log('file_width:', $file_width);

    dump_log('file_height:', $file_height);

    //定义缩略图宽度

    $width = Db::name('config')

        ->order('id desc')

        ->value('orig_paper_width');

    $height = Db::name('config')

        ->order('id desc')

        ->value('orig_paper_height');

    dump_log('系统设置宽度:', $width);

    dump_log('系统设置高度:', $height);

    if ($file_height <= $height && $file_width <= $width) {

        //如果宽度和高度均未超出 则保存原图尺寸

        $width = $file_width;

        $height = $file_height;

    } elseif ($file_width > $width && $file_height < $height) {

        //如果宽度超了 高度未超 高度为原图 宽度自适应

        $height = $file_height;

        $width = $file_width / $file_height * $height;

    } elseif ($file_height > $height && $file_width < $width) {

        //如果高度超了 宽度未超 宽度原图 高度自适应

        $width = $file_width;

        $height = $file_height / $file_width * $width;

    }

    dump_log('生成图片宽度:', $width);

    dump_log('生成图片高度:', $height);

    //缩略图

    $thumb_img = imagecreatetruecolor($width, $height);

    //文件名和后缀以'/'分开 得到一个$suffix数组

    $file_type = explode('/', $file['type']);

    $img_types = ['jpeg', 'png', 'gif'];

    //获取图片后缀

    $img_type = (in_array($file_type[1], $img_types)) ? $file_type[1] : 'png';

    //设置图片上传名称 uniqid基于当前时间微妙数计算的唯一的ID

    $img_name = mt_rand(100000, 999999).'_'.time().'.'.$img_type;

    //通过图片类型设置不同格式上传至文件

    $fn_name = 'image'.$img_type;

    //图片存储路径

    $thumb_path = ROOT_PATH.'order_img/'; //缩略图存放路径

    imagecopyresampled($thumb_img, $dst_image, 0, 0, 0, 0, $width, $height, $file_width, $file_height);

    //上传缩略图片(图片w尺寸200,存储路径)

    $result = $fn_name($thumb_img, $thumb_path.$img_name);

    dump_log('图片上传结果:', $result);

    dump_log('路径:', $thumb_path.$img_name);

    if ($height > $width) {

        $this->imgturn($thumb_path.$img_name);

    }

    if ($result) {

        ajaxReturn(0, '获取成功', '/order_img/'.$img_name);

    } else {

        ajaxReturn(1, '上传失败', '上传失败');

    }

}

function imgturn($src, $direction = 1)

{

    $ext = pathinfo($src)['extension'];

    dump_log('ext:', $ext);

    switch ($ext) {

        case 'gif':

            $img = imagecreatefromgif($src);

break;

        case 'jpg':

        case 'jpeg':

            $img = imagecreatefromjpeg($src);

break;

        case 'png':

            $img = imagecreatefrompng($src);

break;

        default:

            die('图片格式错误!');

break;

    }

    $width = imagesx($img);

    $height = imagesy($img);

    $img2 = imagecreatetruecolor($height, $width);

    //顺时针旋转90度

    if ($direction == 1) {

        for ($x = 0; $x < $width; $x++) {

            for ($y = 0; $y < $height; $y++) {

                imagecopy($img2, $img, $height - 1 - $y, $x, $x, $y, 1, 1);

            }

}

    } else {

        if ($direction == 2) {

            //逆时针旋转90度

            for ($x = 0; $x < $height; $x++) {

                for ($y = 0; $y < $width; $y++) {

                    imagecopy($img2, $img, $x, $y, $width - 1 - $y, $x, 1, 1);

                }

}

}

}

    dump_log('走到这里啦');

    switch ($ext) {

        case 'jpg':

        case "jpeg":

            imagejpeg($img2, $src, 9);

break;

        case "gif":

            imagegif($img2, $src, 9);

break;

        case "png":

            imagepng($img2, $src, 9);

break;

        default:

            die('图片格式错误!');

break;

    }

    imagedestroy($img);

    imagedestroy($img2);

    dump_log('竟然完成了');

}

相关文章

网友评论

      本文标题:压缩和旋转上传的图片

      本文链接:https://www.haomeiwen.com/subject/jyfhoctx.html