zoukankan      html  css  js  c++  java
  • 图片压缩以及解析方法

    图片压缩

    1.调用:var result = PictureService.Upload(System.Web.HttpContext.Current.Request, 20);

    2.定义:

    public static FileResult Upload(HttpRequest request, int fileSize)
            {
                var result = new FileResult { IsError = true };

                fileSize = 10 * 1024 * 1024;
                //const int fileSize = 10 * 1024 * 1024;

                var files = request.Files;

                //定义允许上传的文件扩展名
                var extType = new Hashtable
                            {
                                {"image", "gif,jpg,jpeg,png,bmp"},
                                {"file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,apk"}
                            };
                //验证文件类型,是image或者file
                var dirName = request.Form["fileType"];
                if (string.IsNullOrEmpty(dirName))
                {
                    dirName = "image";
                }

                if (files.Count < 0)
                {
                    result.ErrMsg = "请选择文件。";
                    return result;
                }
                else
                {
                    for (var i = 0; i < files.Count; i++)
                    {
                        var fileName = files[i].FileName;
                        var fileExt = Path.GetExtension(fileName).ToLower();

                        if (files[i].InputStream.Length > fileSize)
                        {
                            result.ErrMsg = "上传文件大小超过限制。";
                            return result;
                        }
                        if (string.IsNullOrWhiteSpace(fileExt))
                        {
                            result.ErrMsg = "上传文件扩展名是不允许的扩展名。 只允许" + ((string)extType[dirName]) + "格式。";
                            return result;
                        }

                        var imageBytes = new byte[files[i].ContentLength];

                        files[i].InputStream.Read(imageBytes, 0, imageBytes.Length);
                        files[i].InputStream.Close();

                        //获取文件保存路径
                        var savePath = string.IsNullOrWhiteSpace(request.Form["path"]) ? "H5Default" : request.Form["path"];
                        switch (savePath)
                        {
                            case "H5Default":
                                savePath = UploadPathEnum.H5Default.ToString();
                                break;
                            case "H5Circle":
                                savePath = UploadPathEnum.H5Circle.ToString();
                                break;
                            case "H5Diary":
                                savePath = UploadPathEnum.H5Diary.ToString();
                                break;
                            case "H5Product":
                                savePath = UploadPathEnum.H5Product.ToString();
                                break;
                            case "H5Advert":
                                savePath = UploadPathEnum.H5Advert.ToString();
                                break;
                            case "News":
                                savePath = "News";
                                break;
                            default:
                                result.ErrMsg = "上传文件目录不存在。";
                                return result;
                        }

                        result = dirName == "image" ? UploadImg(request, imageBytes, savePath) : UploadFile(request, imageBytes, savePath);
                    }
                }
                return result;
            }

    3.Upload Img:

        /// <summary>
            /// 上传图片方法
            /// </summary>
            /// <param name="request">请求</param>
            /// <param name="imageBytes">图片大小</param>
            /// <param name="savePath">上传路径</param>
            /// <returns></returns>
            protected static FileResult UploadImg(HttpRequest request, byte[] imageBytes, string savePath)
            {
                var result = new FileResult { IsError = true };
                try
                {
                    Guid pid;
                    var load = UploadHelper.UpLoadImg(imageBytes, savePath, out pid);
                    if (!load.IsError)
                    {
                        //var flag = InsertData(request, load.Data.ToString(), pid);

                        result.Data = load.Data;
                        result.IsError = false;
                    }
                }
                catch (Exception ex)
                {
                    result.ErrMsg = ex.Message;
                }
                return result;
            }

    4.图片缩略

    public static FileResult UpLoadImg(byte[] imageByte, string direetory, out Guid pid)
            {
                var result = new FileResult() { IsError = true };
                pid = Guid.NewGuid();

                try
                {
                    var soapClient = new AjaxImgSoapClient();
                    //调用服务上传图片

                    var filepath = string.Empty;

                    switch (direetory)
                    {
                        case "H5Default":
                            //case "H5Advert":
                            filepath = soapClient.UpLoadImg(imageByte, direetory, pid.ToString());
                            break;
                        case "H5Advert":
                            filepath = soapClient.UpLoadImgSaveThumbnail(imageByte, direetory, false, false);
                            break;
                        default:
                            filepath = soapClient.UpLoadImgSaveThumbnail(imageByte, direetory, true, true);
                            break;
                    }

                    if (string.IsNullOrWhiteSpace(filepath))
                    {
                        result.ErrMsg = "上传图片失败!";
                        return result;
                    }
                    else
                    {
                        result.Data = filepath;
                    }

                    result.IsError = false;
                }
                catch (Exception ex)
                {
                    result.ErrMsg = ex.Message;
                }
                return result;
            }

    5 解析:

    pics = base.GetThumbnailPicture(pics, Thumbnail.FourHundred);

     /// <summary>
            /// 获取新的缩略图图片路径【路径例子:http://files.meb.com//Pictures/H5/Product/20150828112321116.jpg】
            /// </summary>
            /// <param name="sourceImagePath">原图片路径</param>
            /// <param name="thumbnail">需要生成的图片缩略图大小</param>
            /// <param name="outSourceImagePath">图片原路径[如果此图片路径处理不正确,这里会进行相应处理,并返回]</param>
            /// <returns></returns>
            public string GetThumbnailPicture(string sourceImagePath, Thumbnail thumbnail)
            {
                if (sourceImagePath == null)
                {
                    return string.Empty;
                }
                //return ImageSite.TrimEnd('/') + "/" + sourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).TrimStart('/');
                if (!sourceImagePath.ToUpper().Contains("NEWS") && !sourceImagePath.ToUpper().Contains("PRODUCT"))
                {
                    return ImageSite.TrimEnd('/') + "/" + sourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).TrimStart('/').Replace(AliImageSite, string.Empty).TrimStart('/');
                }
                string outSourceImagePath = sourceImagePath;
                if (string.IsNullOrEmpty(sourceImagePath) || thumbnail == Thumbnail.Default) { return sourceImagePath; }
                //移除全路径部分
                outSourceImagePath = outSourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).Replace(AliImageSite, string.Empty).TrimStart('/');
                //获取最后级目录索引
                int lastDictionaryIndex = outSourceImagePath.LastIndexOf("/");
                //文件名
                string headDictionary = string.Empty;
                string fileName = string.Empty;
                string thumbnailDictionary = string.Empty;
                if (lastDictionaryIndex > -1)
                {
                    headDictionary = outSourceImagePath.Substring(0, lastDictionaryIndex);
                    fileName = outSourceImagePath.Substring(lastDictionaryIndex);
                }
                if (thumbnail == Thumbnail.FourHundred)
                {
                    thumbnailDictionary = "400_400";
                }
                if (thumbnail == Thumbnail.SixHundred)
                {
                    thumbnailDictionary = "600_600";
                }
                if (thumbnail == Thumbnail.MoreThanOneThousand)
                {
                    thumbnailDictionary = "1250_1250";
                }
                //如果最后一级目录包含default则替换为空,连接上目标尺寸目录。如果不存在则直接连接目标目录
                if (headDictionary.ToLower().LastIndexOf("default") >= 0)
                {
                    headDictionary = headDictionary.ToLower().Substring(0, headDictionary.ToLower().LastIndexOf("default"));
                }
                //组建新路径
                return ImageSite.TrimEnd('/') + "/" + headDictionary.TrimStart('/').TrimEnd('/') + "/" + thumbnailDictionary.TrimStart('/').TrimEnd('/') + "/" + fileName.TrimStart('/');
            }

  • 相关阅读:
    10 行 Python 代码,批量压缩图片 500 张,简直太强大了
    听说苏州是互联网的荒漠,真的吗?
    sum() 函数性能堪忧,列表降维有何良方?
    len(x) 击败 x.len(),从内置函数看 Python 的设计思想
    如何给列表降维?sum()函数的妙用
    Shell脚本关于循环的一些总结
    大技霸教你远程执行Linux脚本和命令
    老板对我说,你要是能找出公司里摸鱼的人,我就给你涨薪!于是我写了两个脚本……
    Linux 命令行下搜索工具大盘点,效率提高不止一倍!
    饿了么总监分享:我是如何完成从程序员到管理层的蜕变?
  • 原文地址:https://www.cnblogs.com/special-tao/p/4916536.html
Copyright © 2011-2022 走看看