• php 制作略缩图


    一.需求

      最近公司的项目中有个需求,就是用户上传自己的微信二维码,然后系统会自动将用户的微信二维码合并到产品中

    二.分析

      因为该系统是手机端的,所以从用户端的体验出发,用户当然是直接在微信上保存二维码然后上传。这里有个问题就是,

      微信的安卓版本与ios版本保存下来的图片尺寸是不一样的。所以为了更加谨慎的使用二维码,这里需要将上传的二维码

      进行转化为统一的规格。所以需要制作略缩图

    三.过程

      我们可以使用php的GD库来处理,定义一个目标尺寸画布,然后将二维码拷贝布满画布,就是代码

      

    /**
    * 制作略缩图方法
    * @param string $src  文件路径
    * @param int $width  生成略缩图的宽度(只设置高度是则为等比例缩放)
    * @param int $height  生成略缩图的高度(只设置宽度是则为等比例缩放)
    * @param string $filename 生成略缩图图片保存路径
    */
    function makeThumb($src, $width = null, $height = null, $filename)
    {
        $srcData = getimagesize($src);
        list($srcWidth, $srcHeight, $srcType) = $srcData;
        if (empty($width))  
            $width = $srcWidth * ($height / $srcHeight);  
        if (empty($height))  
            $height = $srcHeight * ($width / $srcWidth);  
        switch ($srcType) {
            case '1':
                $imgType = 'gif';
                break;
            case '2':
                $imgType = 'jpeg';
                break;
            case '3':
                $imgType = 'png';
                break;
        }
    
           $imageCreateFun = 'imagecreatefrom'.$imgType;
           $srcImg = $imageCreateFun($src);
           $destImg = imagecreatetruecolor(intval($width),intval($height));//创建目标尺寸的画布
           imagecopyresampled($destImg, $srcImg,0,0,0,0,$width,$height,$srcWidth,$srcHeight);//将拷贝出二维码并铺满在画布中
    
           $imagefunc = 'image'.$imgType;
    
           // header("content-type:image/jpeg;")
           // imagejpeg($destImg);
           $imagefunc($destImg,$filename.'.'.$imgType);
           return $filename.'.'.$imgType;
    }
    
    
    $codePath = '';
    $codeImageType = '';
    if ((($_FILES["file"]["type"] == "image/jpeg")||($_FILES["file"]["type"] == "image/jpg")||($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 2097152))
    {
        if($_FILES["file"]["error"] > 0)
        {
            echo "发生错误" . $_FILES["file"]["error"] . ",请找TzSteady<br />";
            exit;
        }else
        {
            move_uploaded_file($_FILES["file"]["tmp_name"],"./code/" . date("Ymd").$_FILES["file"]["name"]);
            $codePath = "./code/" . date("Ymd").$_FILES["file"]["name"];
            $codePath = makeThumb($codePath,300,false,'./code/'.date("YmdHis"));
            $codeImageType = $_FILES["file"]["type"];
        }
    }else
    {
        echo "<script>
        alert('请上传小于2M的jpg/png/jpeg格式的二维码');
        </script>";
        exit;
    }


  • 相关阅读:
    《Linux C编程一站式学习》第5章深入理解函数课后作业
    《Linux C编程一站式学习》——常量、变量和表达式notes
    《Linux C编程一站式学习》——第一个程序HelloWorld.c
    二分排序java实现
    leetcode初级算法(数组)——从数组中删除重复项
    利用层次遍历原理构建二叉树
    canvas学习笔记:绘制各种图形
    获取字符串长度【把双字节的替换成两个单字节的然后再获得长度
    oracle PLSQL程序造数据笔记
    oracle取一条记录中多个列的最大值和最小值
  • 原文地址:https://www.cnblogs.com/TzSteady/p/8133988.html
Copyright © 2020-2023  润新知