ASP.NET MVC中的图片压缩、图片水印

一、在做移动端图片上传的时候,有的图片相对来说比较大,直接上传完整的图片显然不是一个好办法,所以直接在前端压缩图片,已经成为了很多移动端图片上传的必备功能;

在做图片压缩并且上传是主要用到filereader、canvas和formdata;

图片压缩上传的过程并不复杂,搞懂它的逻辑就行,总共可以分成三步:

1.用户在使用input file控件上传图片的时候,首先使用filereader读取用户上传的图片数据(是base64格式);

2.将读取的图片数据传入img对象,然后将img绘制到canvas上,在调用canvas.toDataURL对图片进行压缩;

   在这一步,我们需要考虑几个问题:

          1).首先是图片的大小,如果图片超过两百万像素是无法绘制到canvas上的,在这时候调用drawImage虽然不会报错,但是调用toDataURL方法获取图片数据时获取到的是空的图片数据;==》解决方法:使用瓦片绘制,将如片分割成多块绘制到canvas上,我是将图片分割成100万像素一块,再绘制到canvas上;

          2).其次就是canvas的大小也有限制,如果canvas的大小大于五百万像素,不仅图片画不出来,其他的什么也都画不出来;==》解决方法:对图片的像素大小进行压缩,如果图片大于四百万像素,计算压缩比并将大小压至400万以下;

          3).还有要注意的点就是:如果要用canvas的toDataURL方法的话,toDataURL是只能压缩jpg格式的,当用户上传其他格式的图片的时候,就需要转换为jpg格式,用canvas.toDataURL('image/jpeg', 0.1); 将类型统一设为jpeg格式的;

3.获取压缩后的base64格式的图片数据,转为二进制塞入formdata中进行上传;

首先,前台的代码为:




    
    
    移动端图片压缩上传

    //内联样式
    


    
    上传图片 只允许上传jpg、png及gif
    你上传的图片(图片有效期为1分钟):

    前端页面的脚本:

     
        

    后端代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace WebApplication102.Controllers
    {
        public class cuploadController : Controller
        {
            // GET: cupload
            public ActionResult Index(HttpPostedFileBase imagefile)
            {
                Guid guid = Guid.NewGuid();
                string path = Server.MapPath("~/Upload/"+guid.ToString("N")+".jpg");
                imagefile.SaveAs(path);
                return View();
            }
        }
    }

    二、图片水印

    工作或者是生活中,有时候需要为图片添加水印,这样可以有效的保护图片被别人盗用,那么怎么快速为图片添加水印呢?

            public FileResult DownLoad(string path)
            {
                //图片的物理路径
                string NewPath = Server.MapPath(path);
                //加载图片
                Image img = Image.FromFile(NewPath);
                //获取图片的编辑工具
                Graphics g = Graphics.FromImage(img);
                g.DrawString("aaaaaaaa", new Font("宋体", 12), Brushes.Red, new PointF(50, 50));
    
                MemoryStream ms = new MemoryStream();
                img.Save(ms, ImageFormat.Jpeg);
                byte[] bytes = ms.GetBuffer();
    
                return File(bytes, "image/jpeg", "AAA");
            }

     

    你可能感兴趣的:(ASP.NET MVC中的图片压缩、图片水印)