• 将Uint8ClampedArray数据转为blob,再转为file文件,放到formData里,作为一个文件属性传给后端


    1、Uint8ClampedArray     转为   blob

    1. const ImageDataToBlob = function (imageData) {
    2. let w = imageData.width;
    3. let h = imageData.height;
    4. let canvas = document.createElement('canvas');
    5. canvas.width = w;
    6. canvas.height = h;
    7. let ctx = canvas.getContext('2d');
    8. ctx.putImageData(imageData, 0, 0);
    9. return new Promise((resolve) => {
    10. canvas.toBlob(resolve);
    11. });
    12. };

     ⚠️

    JS的类型数组大体可分为3类:无符号整数、有符号整数、浮点数。

    Int8Array; Uint8Array; Uint8ClampedArray; Int16Array; Uint16Array; Int32Array; Uint32Array; Float32Array; Float64Array;

    基本上都可以望文生义,看名字就知道怎么回事。

    但是有一个例外 Uint8ClampedArray ,它与 Uint8Array 颇为相似,但又有所区别。

    因为颜色数据刚好都是符合8位二进制的无符号整数,所以这两个类型在处理Canvas绘图数据时常常用到。

    Uint8ClampedArray主要用于某些特殊场景,典型的就是 ImageData.
    clamped这个词的字面意思是“紧固的,夹紧的”。
    如果输入的值已经是0~255之间的整数,那么Uint8Array 与 Uint8ClampedArray的最终结果是一致的。


    Uint8Array 与 Uint8ClampedArray 的区别,就在于处理不在该范围(0~255之间的整数)的输入数值的转换逻辑的差异。
     

     2、blob    转为   file 文件

    1. let files = new window.File([res], 'screenshot.png', { type: res.type });
    2. //res即为Uint8ClampedArray转换为blob的结果!

    转换结果:

     

     

    3、将 file 放到 formData 里 传给后端

    1. const formdata = new FormData();
    2. formdata.append('screenshot',files)
    3. screenShotApi(formdata).then((data) => {
    4. if(data.code==10000){
    5. ElMessage({
    6. type: 'success',
    7. message: '截图成功!',
    8. });
    9. }
    10. });

    参数样式:

    4、截图全部代码:

    1. <div style="text-align: center" @click="screenShot">
    2. <i class="iconfont icon-jietu"></i>
    3. <p>截图</p>
    4. </div>
    5. /**
    6. * 截图
    7. * **/
    8. const ImageDataToBlob = function (imageData) {
    9. let w = imageData.width;
    10. let h = imageData.height;
    11. let canvas = document.createElement('canvas');
    12. canvas.width = w;
    13. canvas.height = h;
    14. let ctx = canvas.getContext('2d');
    15. ctx.putImageData(imageData, 0, 0);
    16. return new Promise((resolve) => {
    17. canvas.toBlob(resolve);
    18. });
    19. };
    20. async function screenShot() {
    21. const resImg = await rtc.localVideoTrack.getCurrentFrameData();
    22. ImageDataToBlob(resImg).then((res) => {
    23. // Blob 转化为 File
    24. let files = new window.File([res], 'screenshot.png', { type: res.type });
    25. const formdata = new FormData();
    26. formdata.append('orderId',shenheResult.orderId)
    27. formdata.append('callLogId',shenheResult.callLogId)
    28. formdata.append('screenshot',files)
    29. screenShotApi(formdata).then((data) => {
    30. if(data.code==10000){
    31. ElMessage({
    32. type: 'success',
    33. message: '截图成功!',
    34. });
    35. }
    36. });
    37. });
    38. }

     

  • 相关阅读:
    centos7.9脚本,怎么排除特定的访问记录
    港联证券:2万元股票一进一出手续费?
    申请MIMIC数据库失败怎么办?从失败到成功的经验分享给你~
    Java代码中如何向HashMap对象中添加(Map集合对象)呢?
    vue2学习之路由(router以及vue-router)
    调用API来获取拼多多的商品数据的详细步骤和注意事项
    docker mysql 5.7
    java计算机毕业设计基于ssm的医药进出口交易系统(源代码+数据库+Lw文档)
    机器视觉运动控制一体机应用例程|柔性电路板自动上料解决方案
    2022债市波动分析
  • 原文地址:https://blog.csdn.net/qq_51196135/article/details/127735780