图片上传+压缩实现

23 篇文章 0 订阅
14 篇文章 2 订阅

为什么做这个

网上的都要收费,只能自己做了

效果图

在这里插入图片描述

使用技术

.Net Mvc+layui前端框架

操作步骤

  1. 上传图片
  2. 修改清晰度值,值越高越清晰
  3. 点击压缩图片 即可压缩
  4. 下方展示原图片大小和压缩后的图片大小
  5. 右键图片 选择图片另存为。大功告成

后端代码

  1. 上传图片代码
        public JsonResult UploadPicture()
        {
            string strFileName = "";
            foreach (string upload in Request.Files.AllKeys)
            {
                Random rad = new Random();
                int value = rad.Next(1000, 10000);
                string path = Server.MapPath("\\upload\\");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                strFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + value + ".jpg";
                HttpPostedFileBase file = Request.Files[upload] as HttpPostedFileBase;
                //HttpPostedFile file = Request.Files[upload];
                file.SaveAs(path.Replace('\\', '/') + strFileName);
            }
            var getFileUrl = "upload\\" + strFileName;
            FileInfo fileInfo = GetFileInfo(getFileUrl);
            return Json(new
            {
                Code = 200,
                msg = "",
                data = new
                {
                    src = "/upload/" + strFileName
                },
                fileInfo = fileInfo
            }, JsonRequestBehavior.AllowGet);
        }
        #endregion
  1. 图片压缩代码
    参考的官方代码:https://docs.microsoft.com/zh-cn/dotnet/api/system.drawing.imaging.encoderparameter?view=netframework-4.6
public JsonResult VaryQualityLevel(string targetImagUrl, int qulitySize)
        {
            //获取程序的基目录。
            string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
            string tagetUrl = basePath + targetImagUrl.TrimStart('/').Replace("/", "\\");
            // Get a bitmap.
            Bitmap bmp1 = new Bitmap(tagetUrl);
            ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);

            // 基于GUID创建一个编码器对象 为质量参数类别。
            //建立一个Endoder对象
            System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
            // 创建EncoderParameters对象。
            //一个EncoderParameters对象有一个EncoderParameter数组
            EncoderParameters myEncoderParameters = new EncoderParameters(1);

            //这里的50L用来设置保存时的图片质量 0-100随便设置
            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, qulitySize);
            myEncoderParameters.Param[0] = myEncoderParameter;

            Random rad = new Random();//实例化随机数产生器rad;
            int value = rad.Next(1000, 10000);//用rad生成大于等于1000,小于等于9999的随机数;
            var filename = DateTime.Now.ToString("yyyyMMddHHmmss") + value + ".jpg";
            var smallImageUrl = $@"{basePath}upload\{filename}";
            bmp1.Save(smallImageUrl, jpgEncoder, myEncoderParameters);//保存压缩后的图片

            var getFileUrl = "upload\\" + filename;
            FileInfo fileInfo = GetFileInfo(getFileUrl);
            return Json(new
            {
                url = $"upload/{filename}",
                fileInfo = fileInfo
            }, JsonRequestBehavior.AllowGet);
        }
  1. 获取文件大小等 信息
#region 获取文件信息
/// <summary>
/// 获取文件信息
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public FileInfo GetFileInfo(string url)
{
    //获取程序的基目录。
    string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
    var path = basePath + url;
    var fileInfo = new System.IO.FileInfo(path);
    System.Diagnostics.FileVersionInfo info = System.Diagnostics.FileVersionInfo.GetVersionInfo(path);

    FileInfo fileInfoReturn = new FileInfo();
    fileInfoReturn.FileName = info.FileName;
    fileInfoReturn.ProductName = info.ProductName;
    fileInfoReturn.CompanyName = info.CompanyName;
    fileInfoReturn.FileVersion = info.FileVersion;
    fileInfoReturn.ProductVersion = info.ProductVersion;
    fileInfoReturn.ProductMajorPart = info.ProductMajorPart + "." + info.ProductMinorPart + '.' + info.ProductBuildPart + '.' + info.ProductPrivatePart;
    fileInfoReturn.FileDescription = info.FileDescription;
    fileInfoReturn.Language = info.Language;
    fileInfoReturn.OriginalFilename = info.OriginalFilename;
    fileInfoReturn.LegalCopyright = info.LegalCopyright;
    fileInfoReturn.Size = System.Math.Ceiling(fileInfo.Length / 1024.0) + " KB";
    return fileInfoReturn;
}
#endregion

/// <summary>
    /// 文件信息model类
    /// </summary>
    public class FileInfo
    {
        /// <summary>
        /// 文件名称
        /// </summary>
        public string FileName { get; set; }
        /// <summary>
        /// 产品名称
        /// </summary>
        public string ProductName { get; set; }
        /// <summary>
        /// 公司名称
        /// </summary>
        public string CompanyName { get; set; }
        /// <summary>
        /// 文件版本
        /// </summary>
        public string FileVersion { get; set; }
        /// <summary>
        /// 产品版本
        /// </summary>
        public string ProductVersion { get; set; }
        /// <summary>
        /// 系统显示文件版本「主版本号.次版本号.生成号.专用部件号」
        /// </summary>
        public string ProductMajorPart { get; set; }
        /// <summary>
        /// 文件说明
        /// </summary>
        public string FileDescription { get; set; }
        /// <summary>
        /// 文件语言
        /// </summary>
        public string Language { get; set; }
        /// <summary>
        /// 原始文件名称
        /// </summary>
        public string OriginalFilename { get; set; }
        /// <summary>
        /// 文件版权
        /// </summary>
        public string LegalCopyright { get; set; }
        /// <summary>
        /// 文件大小
        /// </summary>
        public string Size { get; set; }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星银色飞行船

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值