• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET MVC 网站开发总结(三) ——图片截图上传

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载)。

 

前台页面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="css/imgareaselect-default.css" />
</head>
<body style="text-align:center;margin-top:200px;">
    <img id="preview_img" class="update-pic" src="img/default.jpg" />
    <form action="/User/UpdatePic" method="post" enctype="multipart/form-data" onsubmit="return Checkform()">
        <input type="hidden" id="x1" name="x1" value="0" />
        <input type="hidden" id="y1" name="y1" value="0" />
        <input type="hidden" id="x2" name="x2" value="0" />
        <input type="hidden" id="y2" name="y2" value="0" />
        <input type="file" name="pictureFile" id="pictureFile" style="display:none;" value="" onchange="SelectPicture();" />
        <div class="form-group text-center">
            <button type="button" class="templatemo-white-button" onclick="document.getElementById('pictureFile').click();">选择</button>
            <button type="submit" class="templatemo-blue-button">提交</button>
        </div>
    </form>
    <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="js/jquery.imgareaselect.pack.js"></script>
    <script type="text/javascript">
        var img = new Image();
        var imgWidth = 0;
        var imgHeight = 0;
        
        InitPicture();//初始化图片
        
        function Checkform()
        {
            //检查是否合法
            //...
            return false;
        }

        //选择和设置图片
        function SelectPicture() {
            var pic = document.getElementById("pictureFile");
            if (pic.value == "") {
                return false;
            }
            //筛选图片
            var strs = pic.value.split(".");
            var fileExt = strs[strs.length - 1].toLowerCase();
            if (fileExt != "jpg" && fileExt != "png") {
                alert("错误提示:选择的文件格式不正确!");
                return false;
            }
            //设置图片
            var url = getFileUrl("pictureFile");
            document.getElementById("preview_img").src = url;
            img.src = url;
            img.onload = function () {
                if (this.width > this.height) {
                    imgWidth = 280;
                    imgHeight = parseInt(280 * (this.height / this.width));
                    document.getElementById("preview_img").style.width = "280px";
                    document.getElementById("preview_img").style.height = imgHeight + "px";
                }
                else {
                    imgHeight = 280;
                    imgWidth = parseInt(280 * (this.width / this.height));
                    document.getElementById("preview_img").style.height = "280px";
                    document.getElementById("preview_img").style.width = imgWidth + "px";
                }
                InitPicture();
            };
        }

        //初始化图片
        function InitPicture() {
            $('#preview_img').imgAreaSelect({
                minWidth: 50,//最小宽度
                minHeight: 50,//最小高度
                aspectRatio: '1:1',//宽高之比1:1
                onSelectEnd: function (img, selection) {
                    $('input[name="x1"]').val(selection.x1);//绑定选中的值
                    $('input[name="y1"]').val(selection.y1);
                    $('input[name="x2"]').val(selection.x2);
                    $('input[name="y2"]').val(selection.y2);
                }
            });
        }

        //获取本地图片的url
        function getFileUrl(sourceId) {
            var url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
            if (navigator.userAgent.indexOf("MSIE") >= 1) { // IE
                url = document.getElementById(sourceId).value;
            } else if (navigator.userAgent.indexOf("Firefox") > 0) { // Firefox
                url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
            } else if (navigator.userAgent.indexOf("Chrome") > 0) { // Chrome
                url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
            }
            return url;
        }
    </script>
</body>
</html>
View Code

要使用imgareaselect插件上传文件主要要引入了imgareaselect-default.cssjquery.imgareaselect.pack.js以及jquery-2.1.1.min.js三个文件。

图片呈现在页面上进行了等比例的放缩(长或宽放缩为280px)。

 

页面效果图:

后台处理代码:

 //更新用户头像
        [HttpPost]
        public ActionResult UpdatePicture(int x1, int y1, int x2, int y2, HttpPostedFileBase pictureFile)
        {
            if (pictureFile != null && pictureFile.ContentLength > 0)
            {
                if (pictureFile.ContentLength > 5242880)
                {
                    return Content("<script>alert('错误提示:文件大小超出指定范围!');</script>");
                }
                string fileName = pictureFile.FileName.Split('\\').Last();
                string fileExt = fileName.Substring(fileName.LastIndexOf('.')).ToLower();
                if (fileExt == ".jpg" || fileExt == ".png")
                {
                    string path = Server.MapPath("~/Resources/HeadPicture");
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    fileName = DateTime.Now.ToFileTime().ToString() + Guid.NewGuid().ToString("N") + fileExt;
                    var picPath = Path.Combine(path, fileName);
                    pictureFile.SaveAs(picPath);//从客户端保存文件到本地

                    //检查裁剪图片是否合法并裁剪图片
                    var image = new WebImage(picPath);
                    double height = image.Height;
                    double width = image.Width;
                    if (width > height)
                    {
                        height = (int)(280 * (height / width));
                        width = 280;
                    }
                    else
                    {
                        width = (int)(280 * (width / height));
                        height = 280;
                    }
                    image.Resize((int)width, (int)height);//调整图片大小

                    var length = x2 - x1;
                    if (x1 >= 0 && x1 <= 280 && y1 >= 0 && y1 <= 280 && length >= 50 && length <= 280 && x1 + length <= width && y1 + length <= height)
                    {
                        image.Crop(y1, x1, (int)(height - y1 - length), (int)(width - x1 - length));
                        image.Save(picPath);
                        var logined = entity.Users.Find(Convert.ToInt32(User.Identity.Name));
                        logined.Picture = fileName;
                        entity.SaveChanges();
                        return Content("<script>alert('操作成功提示:成功更新照片!');</script>");
                    }
                    else
                    {
                        System.IO.File.Delete(picPath);
                        return Content("<script>alert('错误提示:上传的图片信息不合法!');</script>");

                    }
                }
                else
                {
                    return Content("<script>alert('错误提示:上传的文件格式不正确!');</script>");
                }
            }
            else
            {
                return Content("<script>alert('错误提示:上传的文件是空文件!');</script>");
            }
        }
View Code

上面代码是一个用户头像更新的代码,也是先将图片等比例放缩(长或宽放缩为280px),也前台页面上面的图片相对应,然后再进行裁剪。

 

第一次团队合作ASP.NET MVC 网站开发总结就到这里吧。

<我的博客主页>:http://www.cnblogs.com/forcheng/

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET程序中常用的三十三种代码发布时间:2022-07-10
下一篇:
asp.net导出excel带图片发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap