• 拍照或选择文件 压缩并上传


    **前端 html:**
    - 调取摄像头+选择文件

    ```
    <input id="file" type="file" accept="image/*"/>
    加入 capture="camera",直接调取摄像头
    ```

    **文件读取:**

    ```
    var file = $("input")[0].files[0]
    var reader = new FileReader()
    reader.onload = 读取完成后回调函数
    reader.readAsDataURL(file)
    ```

    **图片压缩:**
    - 根据相关参数压缩图片

    ```
    function canvasDataURL(path, obj, callback) {
    var img = new Image();
    img.src = path;
    img.onload = function () {
    var that = this;
    // 默认按比例压缩
    var w = that.width,
    h = that.height,
    scale = w / h;
    w = obj.width || w;
    h = obj.height || (w / scale);
    var quality = 0.7; // 默认图片质量为0.7
    //生成canvas
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    // 创建属性节点
    var anw = document.createAttribute("width");
    anw.nodeValue = w;
    var anh = document.createAttribute("height");
    anh.nodeValue = h;
    canvas.setAttributeNode(anw);
    canvas.setAttributeNode(anh);
    ctx.drawImage(that, 0, 0, w, h);
    // 图像质量
    if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
    quality = obj.quality;
    }
    // quality值越小,所绘制出的图像越模糊
    var base64 = canvas.toDataURL('image/jpeg', quality);
    // 回调函数返回base64的值
    callback(base64);
    }
    }
    ```

    |参数|值|说明
    |:--:|:--:|:------:|
    |callback|回调函数|callback(base64)|
    |path|string|图片路径|
    |obj|object|压缩参数|

    **转换 base64:**
    - 将以base64的图片url数据转换为Blob

    ```
    function convertBase64UrlToBlob(urlData) {
    var arr = urlData.split(','),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
    while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {
    type: mime
    });
    }
    ```

    |参数|值|说明
    |:--:|:--:|:------:|
    |urlData|string|base64图片|

    **图片上传:**
    - 将base64图片上传到cdn,在上传之前先将base64图片转换成为blob图片

    ```
    var fd = new FormData();
    fd.append("file", blob图片);

    $.ajax({
    url: 'https://top.yidianzixun.com/tool/public/file/upload',
    type: 'POST',
    data: fd,
    cache: false,
    contentType: false,
    processData: false,
    success: function (result) {
    if (result.status === 1) {
    var imglink = result.url[0] //图片链接
    }
    },
    error: function (returndata) {
    alert('网络繁忙,请稍后重试!')
    }
    });
    ```

  • 相关阅读:
    P5318 【深基18.例3】查找文献 —— 图的两种遍历
    电子合同有效性需要解决的问题
    软件测试流程
    浅析HTTP与HTTPS的区别
    输入URL到网页显示的全过程
    TCP协议详细讲解
    Git操作
    robot framework环境搭建及注意事项
    测试面试问题总汇
    python之random模块详解
  • 原文地址:https://www.cnblogs.com/ndos/p/9816151.html
Copyright © 2020-2023  润新知