• 截图上传功能 imageAreaselect


    前台:

    <script src="~/Scripts/jquery-2.1.4.min.js"></script>
    <link href="~/Scripts/MyJsLibrary/css/imgareaselect-default.css" rel="stylesheet" />
    <script src="~/Scripts/MyJsLibrary/jquery.imgareaselect.min.js"></script>
    <script src="~/Scripts/FileUpload/js/ajaxfileupload.js"></script>
    <script type="text/javascript">
    $(function () {
    $(document).ready(function () {
    $('img#imgselect').imgAreaSelect({
    selectionColor: 'blue',
    x1: 20, y1: 10, x2: 120, y2: 110,
    maxWidth: 100, maxHeitht: 100,
    minWidth: 100, minHeight: 100,
    selectionOpacity: 0.1,
    handles: true,
    aspectRatio: '1:1',
    onSelectEnd: preview
    });
    })
    function preview(img, selection) {
    if (selection.width > 49) {
    //getValue(selection);
    var defultWidth = $("img#imgselect").width();
    var defultHeight = $("img#imgselect").height();
    console.info("" + defultWidth + "Height:" + defultHeight);
    var scaleX = 200 / (selection.width || 1);
    var scaleY = 200 / (selection.height || 1);//200px的框
    var scaleX1 = 100 / (selection.width || 1);
    var scaleY1 = 100 / (selection.height || 1);//100px的框
    //获取上传图片的默认width,Height
    $('#preview200').css({
    Math.round(scaleX * defultWidth) + 'px',//先把图片缩小想要的框的大小,比如200的大小
    height: Math.round(scaleY * defultHeight) + 'px',//然后在把图片放大图片的大小。
    marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
    marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
    });
    $('#preview100').css({
    Math.round(scaleX1 * defultWidth) + 'px',
    height: Math.round(scaleY1 * defultHeight) + 'px',
    marginLeft: '-' + Math.round(scaleX1 * selection.x1) + 'px',
    marginTop: '-' + Math.round(scaleY1 * selection.y1) + 'px'
    });
    $("#x1").val(Math.round(selection.x1));
    $("#x2").val(Math.round(selection.x2 - selection.x1));//截取得宽度
    $("#y1").val(Math.round(selection.y1));
    $("#y2").val(Math.round(selection.y2 - selection.y1));//截取得高度
    }
    }

    /**检查图片上传类型*/
    function checkImgType(obj) {
    var imgFile = '';
    //获取图片的全路径
    var imgFilePath = getImgFullPath(obj);
    var endIndex = imgFilePath.lastIndexOf('\');
    var lastIndex = imgFilePath.length - endIndex - 1;
    if (endIndex != -1)
    imgFile = imgFilePath.substr(endIndex + 1, lastIndex);
    else
    imgFile = imgFilePath;
    var tag = true;
    endIndex = imgFilePath.lastIndexOf('.');
    if (endIndex == -1)
    tag = false;
    var ImgName = imgFilePath.substr(endIndex + 1, lastIndex);
    ImgName = ImgName.toUpperCase();
    if (ImgName != 'JPEG' && ImgName != 'JPG' && ImgName != 'PNG' && ImgName != 'BMP') {
    tag = false;
    }
    if (!tag) {
    alert('上传图片的文件类型必须为: *.JPEG,*.jpg,*.png,*.bmp,请重新选择!')
    alert('你逗我么');
    // Upload.clear(obj);
    return false;
    }
    return true;
    }
    function getImgFullPath(obj) {
    if (obj) {
    //ie
    if (window.navigator.userAgent.indexOf('MSIE') >= 1) {
    obj.select();
    return document.selection.createRange().text;
    }
    //firefox
    else if (window.navigator.userAgent.indexOf('Firefox') >= 1) {
    if (obj.files) {
    return obj.files.item(0).getAsDataURL();
    }
    return obj.value;
    }
    return obj.value;
    }
    }
    });
    //立即显示图片
    //下面用于图片上传预览功能
    function setImagePreview() {
    var docObj = document.getElementById("file1");
    var imgObjPreview = document.getElementById("imgselect");
    if (docObj.files && docObj.files[0]) {
    //火狐下,直接设img属性
    imgObjPreview.style.display = 'block';
    //imgObjPreview.style.width = '300px'; //不能控制大小
    //imgObjPreview.style.height = '300px';
    //imgObjPreview.src = docObj.files[0].getAsDataURL();
    //火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
    imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
    var srcStirng = window.URL.createObjectURL(docObj.files[0]);
    $("#src").val(srcStirng);
    $("#preview200").attr("src", srcStirng);
    $("#preview100").attr("src", srcStirng);
    }
    else {
    //IE下,使用滤镜
    docObj.select();
    var imgSrc = document.selection.createRange().text;
    var localImagId = document.getElementById("localImag");
    //必须设置初始大小
    localImagId.style.width = "150px";
    localImagId.style.height = "180px";
    //图片异常的捕捉,防止用户修改后缀来伪造图片
    try {
    localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
    localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
    }
    catch (e) {
    alert("您上传的图片格式不正确,请重新选择!");
    return false;
    }
    imgObjPreview.style.display = 'none';
    document.selection.empty();
    }
    return true;
    }


    $(function () {
    //一点激上传开始上传
    $("#upload").click(function () {
    // 获取文件路径
    var filePath = $("#file1").val();
    console.info(filePath);
    // 获取“.”位置
    //var extStart = filePath.lastIndexOf(".");
    //// 获取文件格式后缀,并全部大写
    //var ext = filePath.substring(extStart, filePath.length).toUpperCase();

    //// 判断文件格式
    //if (ext != ".BMP" && ext != ".PNG" && ext != ".JPG" && ext != ".JPEG") {
    // alert("图片仅限于.BMP .PNG .JPG .JPEG文件。");
    // return false;
    //}
    //else {


    // 使用ajaxfileupload上传文件
    $.ajaxFileUpload({
    url: "SaveImg",
    secureuri: false,
    fileElementId: 'file1',
    dataType: 'JSON',
    data: { fileType: filePath },
    success: function (data) {
    // $("#src").val(data);
    //$("#upload").submit();开始截图
    ////获取坐标并传值
    var x1=$("#x1").val();
    var x2=$("#x2").val();//截取得宽度
    var y1=$("#y1").val();
    var y2=$("#y2").val();//截取得高度
    console.info(x1+x2+y1+y2);

    $.ajax({
    url: "imgEditHandler",
    type: "Post",
    data: { xx1: x1, xx2: x2, yy1: y1, yy2: y2 },
    success: function (data) {
    if (data.success==true) {
    alert("上传成功");
    }
    }
    });
    },
    error:
    function (data, status, e) {
    //alert(data + "," + status + "," + e);
    alert("上传失败");
    }
    });
    });
    });
    </script>
    <style type='text/css'>
    #container
    {
    position: absolute;
    left: 40px;
    background: #FFF;
    border: #666 2px solid;
    border-radius: 10px;
    600px;
    height: 500px;
    padding: 20px;
    }

    #selectdiv
    {
    350px;
    height: 550px;
    float: left;
    }

    #uploaddiv
    {
    margin-top: 20px;
    border-top: #CCC 1px solid;
    }

    #prediv200
    {
    height: 200px;
    200px;
    overflow: hidden;
    border: #CCC 3px dashed;
    }

    #prediv100
    {
    height: 100px;
    100px;
    overflow: hidden;
    border: #CCC 3px dashed;
    }

    #preview
    {
    position: relative;
    overflow: hidden;
    }

    [type=button]
    {
    50px;
    }
    </style>
    </head>
    <body>
    <div>
    <div id='container'>
    <div id='selectdiv'>
    <div id="localImag">
    <img id="imgselect" style="border: 1px solid #f00;" alt=""
    src="Images/t01.jpg" />
    </div>
    <div>
    <p>图片上传:<font color='red'>*.BMP *.PNG *.JPG *.JPEG</font></p>
    @* @using (Html.BeginForm("imgEditHandler", "EditUploadImg", FormMethod.Post, new { Area = "TestFunction" }))
    {
    <input type='file' name='imgFile' id='imgFile'><br />
    *@<input type='text' name='x1' id="x1" value='0' />
    <input type='text' name='y1' id="y1" value='0' />
    <input type='text' name='x2' id="x2" value='0' />
    <input type='text' name='y2' id="y2" value='0' /><br />
    <input type="text" name="src" id="src" value="" />
    <input type="file" id="file1" name="uploadImageFile" onchange="setImagePreview();" />
    <input type="button" value='上传' id='upload' />
    @*}*@
    </div>
    </div>
    <div id='prediv200'>
    <img id='preview200' src='~/Content/UploadImg/fdsfsdfsdfsd.jpg' width='200px' height='200px' />
    </div>
    <div id='prediv100'>
    <img id='preview100' src='~/Content/UploadImg/fdsfsdfsdfsd.jpg' width='100px' height='100px' />
    </div>
    <div>
    <form>
    @* <input type='hidden' name='x1' value='0' />
    <input type='hidden' name='y1' value='0' />
    <input type='hidden' name='width' value='100' />
    <input type='hidden' name='height' value='100' />
    <br />
    <br />*@
    <input type='button' value='修改' id='button2' />
    </form>
    </div>
    @if (ViewData["success"] != null)
    {
    <script type="text/javascript">
    $(function () {
    $(".success").slideDown();
    $("#ok").slideUp();
    });
    </script>
    <div style="display: none;position:absolute;top:200px;left:200px;z-index:1000;" class="success">
    上传成功
    <input type="button" id="ok" value="确定" />
    </div>
    }
    else
    {
    <span>上传失败</span>
    }
    </div>
    </div>
    </body>
    </html>

    后台:

    public ActionResult SaveImg(HttpPostedFileBase uploadImageFile)
    {
    //保存上传图片
    // 随机数
    string img = uploadImageFile.FileName;
    int index = img.IndexOf('.');
    string[] fileName = img.Split('.');
    var rand = new Random().Next(0, 8999);
    // 创建文件存放的文件路径,如果没有,创建该路径
    string tempImg = "~/Content/UploadImg/";//路径模板
    string folder = HttpContext.Server.MapPath(tempImg);
    if (!Directory.Exists(folder))
    {
    Directory.CreateDirectory(folder);
    }
    // 保存全文件路径
    string filePath = Path.Combine(folder, fileName[0] + rand + "." + fileName[1]);

    //写cookie
    //HttpContext.Response.Cookies["srcImg"].Value = filePath;
    HttpCookie cookies = new HttpCookie("srcImg");
    cookies.Value = HttpUtility.UrlEncode(filePath, Encoding.GetEncoding("UTF-8")); ;
    cookies.Expires = DateTime.Now.AddHours(1);
    HttpContext.Response.Cookies.Add(cookies);
    uploadImageFile.SaveAs(filePath);
    //return Json(new { success=true,pathsrc=filePath});
    return Content(filePath);
    //保存成功
    }
    /// <summary>
    /// 截取
    /// </summary>
    /// <param name="forms"></param>
    /// <returns></returns>
    public ActionResult imgEditHandler(int xx1,int xx2,int yy1,int yy2)
    {
    string tempImg = "~/Content/UploadImg/";//路径模板
    int x1 = Convert.ToInt32(xx1);
    int y1 = Convert.ToInt32(yy1);
    int x2 = Convert.ToInt32(xx2);//实际上是没有用的
    int y2 = Convert.ToInt32(yy2);//实际上是没有用得
    //string srcImg = tempImg + fileName[0] + rand + "." + fileName[1];//原图图片存在路径
    //string srcImg = form["src"];
    //到cookie 拿路径
    //string srcImg = Common.DEncrypt.DEncrypt.Decrypt(HttpContext.Request.Cookies["srcImg"].Value);
    string srcImg = HttpUtility.UrlDecode(Common.CommonClass.GetCookie("srcImg"), Encoding.GetEncoding("UTF-8")); ; ;
    //string srcPath = HttpContext.Server.MapPath(srcImg);//实际路径
    //创建图象,保存将来截取的图象
    //Bitmap image = new Bitmap(Path);
    //Graphics imgGraphics = Graphics.FromImage(image);
    //设置截屏区域
    //imgGraphics.CopyFromScreen(x1, y1, x2, y2, new Size(100, 100));
    //保存
    //SaveImage(image);
    string[] fileName = srcImg.Split('.');
    //string file = fileName[0]+fileName[1] + "caijinhao." + fileName[2];
    string folders = HttpContext.Server.MapPath("~/Content/UploadImg/");//映射路径
    string newpath = CutImage(srcImg, x1, y1, x2, y2, Guid.NewGuid().ToString("N"), folders, fileName[fileName.Length - 1]);
    ViewData["success"] = "true";
    return View("img3");
    }
    /// <summary>
    /// 截取图片方法
    /// </summary>
    /// <param name="url">图片地址</param>
    /// <param name="beginX">开始位置-X</param>
    /// <param name="beginY">开始位置-Y</param>
    /// <param name="getX">截取宽度</param>
    /// <param name="getY">截取长度</param>
    /// <param name="fileName">文件名称</param>
    /// <param name="savePath">保存路径</param>
    /// <param name="fileExt">后缀名</param>
    public string CutImage(string url, int beginX, int beginY, int getX, int getY, string fileName, string savePath, string fileExt)
    {
    //if ((beginX < getX) && (beginY < getY))
    //{
    Bitmap bitmap = new Bitmap(url);//原图
    //if (((beginX + getX) <= bitmap.Width) && ((beginY + getY) <= bitmap.Height))
    //{
    // Bitmap destBitmap = new Bitmap(getX, getY);//目标图 创建新图大小
    Bitmap destBitmap = new Bitmap(100, 100);//要存储的图像的大小
    Rectangle destRect = new Rectangle(0, 0, getX, getY);//我要在新图的开始画图的位置
    Rectangle srcRect = new Rectangle(beginX, beginY, getX, getY);//我要在原图的这个位置复制
    Graphics imgGraphics = Graphics.FromImage(destBitmap);
    imgGraphics.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel);
    ImageFormat format = ImageFormat.Png;
    switch (fileExt.ToLower())
    {
    case "png": format = ImageFormat.Png; break;
    case "bmp": format = ImageFormat.Bmp; break;
    case "gif": format = ImageFormat.Gif; break;
    }
    destBitmap.Save(savePath + "//" + fileName + "." + fileExt, format);
    return savePath + "\" + "*" + fileName.Split('.')[0] + "." + fileExt;
    //}
    //else
    //{ return "截取范围超出图片范围"; }
    //}
    //else
    //{ return "请确认(beginX < getX)&&(beginY < getY)"; }
    }

  • 相关阅读:
    日记功能发布
    功能小改进
    CuteEditor 6.0一个很奇怪的Bug
    关于博客园.NET俱乐部的公告
    新功能发布
    建立了一个博客园创业者QQ群
    思想决定生活 《卡耐基成功之道全书》读书笔记
    建立了一个英语学习小组
    实际上我没有选择的余地
    公告
  • 原文地址:https://www.cnblogs.com/jinhaoObject/p/4594918.html
Copyright © 2020-2023  润新知