h5上传图片之canvas(代码片段)

智者乐水仁者乐山吾者乐进 智者乐水仁者乐山吾者乐进     2022-11-10     597

关键词:

H5上传图片之canvas,使用canvas处理压缩图片再上传

html代码:

<form action="" method="post">
    <dl>
        <dd>
            <div>
                <div id="img_wrap">

                </div>
                <input type="file" accept="image/jpg,image/jpeg,image/png,image/gif" id="fileImage" multiple="multiple" name="img" style="display:none" />
                <a id="upimg" href="javascript:">上传图片</a>
            </div>
        </dd>
        <dd style="margin-top:10px;">
            <a id="abtn_submit" href="javascript:">提交</a>
        </dd>
    </dl>
</form>

js代码:

<script type="text/javascript">
    $(function () 
        $("#abtn_submit").click(function () 
            if ($("input[name=‘imgs‘]").length < 1) 
                layer.open(
                    content: ‘必须上传图片才能提交‘,
                    skin: ‘msg‘,
                    time: 2
                );
                return;
            
            $("form").submit();
        );
        $("#upimg").click(function () 
            $("#fileImage").click();
        )
        $("#fileImage").change(function () 
            $.each($(this)[0].files, function (i, e) 
                if (!/image\/\w+/.test(e.type)) 
                    //请确保文件为图像类型
                    return;
                
                imgHandle(e);
            )
        )
    );

    function imgHandle(_file) 
        var reader = new FileReader();
        reader.readAsDataURL(_file);
        reader.onload = function (e) 
            var result = e.target.result;
            var image = new Image();
            image.src = result;
            image.onload = function () 
                var cvs = document.createElement("canvas");
                var scale = 1;
                if (this.width > 1000 || this.height > 1000) 
                    if (this.width > this.height) 
                        scale = 1000 / this.width;
                    
                    else 
                        scale = 1000 / this.height;
                    
                
                cvs.width = this.width * scale;
                cvs.height = this.height * scale;
                var ctx = cvs.getContext("2d");
                ctx.drawImage(this, 0, 0, cvs.width, cvs.height);
                var newImageData = cvs.toDataURL(_file.type, 0.8);
                var imgdata = "<a href=‘javascript:‘ onclick=‘delimg(this)‘><img src=\"" + newImageData + "\" />";
                imgdata += "<input type=\"hidden\" name=\"imgs\" value=\"" + newImageData + "\" /></a>";
                $("#img_wrap").append(imgdata);
            
        
    

    function delimg(e) 
        layer.open(
            content: ‘您确定要删除此图片吗?‘,
            btn: [‘删除‘, ‘取消‘],
            skin: ‘footer‘,
            yes: function (index) 
                $(e).remove();
                layer.close(index);
            
        );
    
</script>

  后台处理代码:

//有图片时处理如下
            string[] imgs = collection.GetValues("imgs");
            List<U_Img> uimglist = new List<U_Img>();
            int i = 1;
            foreach (string imgBase64Str in imgs)
            
                int indexOf = imgBase64Str.IndexOf(‘/‘) + 1;
                string ftype = imgBase64Str.Substring(indexOf, imgBase64Str.IndexOf(‘;‘) - indexOf);
                string fex = ".jpg";
                switch (ftype)
                
                    case "jpeg":
                    case "jpg":
                        fex = ".jpg";
                        break;
                    case "png":
                        fex = ".png";
                        break;
                    case "gif":
                        fex = ".gif";
                        break;
                
                string Base64Str = imgBase64Str.Substring(imgBase64Str.IndexOf(‘,‘) + 1);
                Base64Str = Base64Str.Trim(‘\0‘);
                byte[] imgArr = Convert.FromBase64String(Base64Str);
                using (MemoryStream ms = new MemoryStream(imgArr))
                
                    Bitmap bmp = new Bitmap(ms);
                    string fname = "/timg/" + DateTime.Now.ToString("yyMMddmmHHssffff") + i.ToString() + fex;
                    string FilePath = Request.MapPath(fname);
                    bmp.Save(FilePath);
                    uimglist.Add(new U_Img()  ImgUrl = fname, ImgTime = DateTime.Now );
                
                i++;
            

  

 

h5利用canvas实现海报功能(代码片段)

最近接到一个需求,微信中用户上传图片生成海报。这个需求比较常规,实现思路也比较简单,通过利用用户的input输入,对所上传的图片进行处理,最后通过第三方库html2canvas合成对应的图片即可。思路虽然简单,但是在实现... 查看详情

h5canvas图片上传操作

最近写的小demo,使用的是h5的canvas来对图片进行放大,移动,剪裁等等这是最原始的代码,比较接近我的思路,后续会再对格式和结构进行优化html:1<prename="code"class="brush:html;"rows="15"cols="300">2<inputtype="file"name=""accept="image/gif,image/jpe... 查看详情

关于h5绘制canvas生成图片的注意点!(代码片段)

...动端自适应的问题:答:如果是最后只要一张canvas生成的图片,而不是要绘制的canvas的图形,则不需要考虑自适应,绘制canvas的时候的宽高,可以直接写成UI提供的图的大小,比如UI提供的图是750*1280,则绘制canvas的时候,所有的... 查看详情

前端预览图片和h5canvas压缩图片上传

思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法得到base64字符串来实现压缩。1.base64转二进制文件/***dataURLtoblob,reftohttps://gist.github.com/fupslot/5015897*@paramdataURI*@returns{Blob}*/functiondataURItoBlob(dataURI){var 查看详情

h5压缩图片上传(filereader+canvas)

因为最近项目做一个webApp的页面,需要上传图片,总结了一下,思路如下:一、监听一个 input(type=‘file‘)的change事件,然后拿到文件的file;<inputid="img-input"class="upload-input"type="file"accept="image/*"id="imgbox"multiple/>二、把file转... 查看详情

canvas动画之二--创建动态粒子网格动画(代码片段)

...,自己也就做了一个,当背景挺不错的。CSDN不能上传超过2M的图片,所以就简单截了一个静态图片:可以点击这里查看动画.下面就开始说怎么实现这个效果吧:首先当然是添加一个canvas了:<canvasid=... 查看详情

h5在canvas中绘制图片时候遇到跨域问题(代码片段)

在前端绘制图片时需要用到其他服务器的图片,当然没有读取成功。在网上一顿搜索,设置了图片允许跨域。img.crossOrigin="Anonymous"在调试中也可以看到图片,不过还是绘制失败。经过一波XXX式的试探和查找,找到一个解决方案。... 查看详情

h5图片预览压缩上传(代码片段)

...片大于1.2M的时候,对图片进行压缩  3、以表单的形式上传图片  4、图片删除   预览效果图: 代码说明:1、input:file选择图片<!--html部分--><ulid="preview"class="clear"><liclass="fl"><imgsrc="/images/ 查看详情

h5移动端实现图片文件上传(代码片段)

PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。 JS代码:<scripttype="text... 查看详情

h5+上传图片(选择图片拍照)(代码片段)

$(document).on(‘click‘,‘.upimgbtn‘,function()varpos=$(this).data(‘pos‘);varposTxt=‘photo1‘:‘照片1‘,‘photo2‘:‘照片2‘,‘photo3‘:‘照片3‘;varthat=this;if(mui.os.plus)vara=[title:"拍照",title:"从手机相册选择"];plu 查看详情

解决用h5canvas绘制的图片或文字在高清屏下模糊的问题(代码片段)

...点都有不同的指标数值,而且很多点根据分类还用不同的图片作为背景。因此考虑用H5Canvas加载图标png并把数值画上去,然后把canvas导出图片url并应用到点标记上。1、常规绘制:代码:varimage=newImage();image.src=‘../../assets/img/polluti... 查看详情

h5相机上传图片压缩

...小,设置不同的压缩比。functioncompress(res,fileSize){//res代表上传的图片,f 查看详情

h5图片上传预览(代码片段)

项目中常用到文件上传预览功能,整理一下:如果不想使用type="file"的默认样式,可以让其覆盖在一个按钮样式上边,设其透明度为0,或者使用Label关联html<div><divclass="figure-box"id="figure_box"></div><inputtype="file"id="imgUp... 查看详情

canvas保存图片到七牛云(代码片段)

最近在做一个项目,需要在前端对图片切片并上传到七牛云技术要点canvas.toBlob(blob=>);//可将canvas保存成二进制文件formData.append(‘file‘,blob,‘filename‘);//将二进制文件添加到FormData中ajax.send(formData);//上传数据到后端处理代码实... 查看详情

h5之canvas

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。在使用Canvas前,用canvas.getContext来测试浏览器是否支持Canvas: <!--HTML代码--><canvasid="test-canvas"width="200"heigth="100"><p>你的浏览... 查看详情

web前端移动端课程之canvas教程系列(代码片段)

canvascanvas介绍canvas是一个客户端浏览器里的画图技术,canvas也是h5的一个新标签,canvas标签就已经提供了一张所谓的画布,那么再通过js的canvas一些操作就可以达到最终画图的效果canvas的基本使用主要就是如何通过js操... 查看详情

web前端移动端课程之canvas教程系列(代码片段)

canvascanvas介绍canvas是一个客户端浏览器里的画图技术,canvas也是h5的一个新标签,canvas标签就已经提供了一张所谓的画布,那么再通过js的canvas一些操作就可以达到最终画图的效果canvas的基本使用主要就是如何通过js操... 查看详情

h5+jqweui实现手机端图片压缩上传

主要功能,使用H5的formData上传base64格式的图片,canvas压缩图片,前端样式使用weui,为方便起见,使用了jquery封装过的weui,jqweui。话不多少,开始上代码。前端代码,直接在jqweui官网下的demo里改的(是dist下的demo)<!DOCTYPEhtml&g... 查看详情