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


    本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件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/

  • 相关阅读:
    java调用restful webservice(转)
    精心挑选的12款优秀 jQuery Ajax 分页插件和教程
    android shape的使用
    android 获取资源文件 r.drawable中的图片转换为drawable、bitmap
    jquery+ajax分页
    ImageButton自定义按钮的按下效果的高效实现方法(非一般)
    ActionBarSherlock SlidingMenu整合,解决SlidingMenu example的getSupportActionBar()方法不能用问题
    sdk manager更新失败,显示Download interrupted: read timed out,应该如何解决?
    Android SDK 下载速度慢解决方法
    android 让图片充满整个屏幕
  • 原文地址:https://www.cnblogs.com/forcheng/p/5426997.html
Copyright © 2020-2023  润新知