Rumah >pembangunan bahagian belakang >tutorial php >PHP实现上传裁剪图片

PHP实现上传裁剪图片

小云云
小云云asal
2018-03-26 11:48:013007semak imbas

本文主要和大家分享PHP实现上传裁剪图片,主要以代码的形式和大家分享,希望能帮助到大家。

/ 图片裁剪上传
//        $source_path = 'E:\www\cylxsh\storage\app\\'.$url; // 原图路径
        $source_path = storage_path('app\\'.$url); // 原图路径
        $target_width = 1000; // 目标宽度
        $target_height = 100; // 目标高度
        $source_info = getimagesize($source_path); //获取图像信息
        $source_width = $source_info[0]; //原图宽度
        $source_height = $source_info[1]; // 原图高度
        $source_mime = $source_info['mime']; // 文件类型
        $source_ratio = $source_height / $source_width; //  原图比例
        $target_ratio = $target_height / $target_width; // 目标比例
        // 源图过高
        if ($source_ratio > $target_ratio)
        {
            $cropped_width = $source_width; // 裁剪的宽度
            $cropped_height = $source_width * $target_ratio; // 裁剪的高度
            $source_x = 0;
            $source_y = ($source_height - $cropped_height) / 2;
        }
        // 源图过宽
        elseif ($source_ratio < $target_ratio)
        {
            $cropped_width = $source_height / $target_ratio;
            $cropped_height = $source_height;
            $source_x = ($source_width - $cropped_width) / 2;
            $source_y = 0;
        }
        // 源图适中
        else
        {
            $cropped_width = $source_width;
            $cropped_height = $source_height;
            $source_x = 0;
            $source_y = 0;
        }
        switch ($source_mime)
        {
            case &#39;image/gif&#39;:
                $source_image = imagecreatefromgif($source_path);
                break;

            case &#39;image/jpeg&#39;:
                $source_image = imagecreatefromjpeg($source_path);
                break;

            case &#39;image/png&#39;:
                $source_image = imagecreatefrompng($source_path);
                break;

            default:
                return false;
                break;
        }
        $target_image = imagecreatetruecolor($target_width, $target_height);
        $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
        // 裁剪
        imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
        // 缩放
        imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
        // 设置随机的文件名
        $chars=null;
        $len = 50;
        if (is_null($chars)) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        }
        mt_srand(10000000*(double)microtime());
        for ($i = 0, $fileName = &#39;&#39;, $lc = strlen($chars)-1; $i < $len; $i++) {
            $fileName .= $chars[mt_rand(0, $lc)];
        }
        //保存图片到本地
        $res = imagepng($target_image,storage_path(&#39;\app\uploads\\&#39;.date(&#39;Y&#39;).&#39;\\&#39;.date(&#39;m&#39;).&#39;\\&#39;.date(&#39;d&#39;).&#39;\\&#39;.$fileName));
        if ($res == true){
            unlink(storage_path(&#39;app\\&#39;.$url));
            $url = storage_path(&#39;\app\uploads\\&#39;.date(&#39;Y&#39;).&#39;\\&#39;.date(&#39;m&#39;).&#39;\\&#39;.date(&#39;d&#39;).&#39;\\&#39;.$fileName);
        }else{
            return view("Alert",["msg"=>"图片上传失败"]);
        }

相关推荐:

PHP图片裁剪与缩放示例(无损裁剪图片)

Atas ialah kandungan terperinci PHP实现上传裁剪图片. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn