예제 #1
0
        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="fileName">源图路径(绝对路径)</param>
        /// <param name="newFileName">缩略图路径(绝对路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>    
        public static void MakeThumbnailImage(string fileName, string newFileName, int width, int height, string mode) // 此方法需要重构 UNDO
        {
            //Image originalImage = Image.FromFile(fileName);
            byte[] imageBytes = SFTPFactory.CreateSFTPHelper().RecieveStream(fileName);
            Image originalImage = Image.FromStream(new System.IO.MemoryStream(imageBytes));

            int towidth = width;
            int toheight = height;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;

            switch (mode)
            {
                case "HW"://指定高宽缩放(可能变形)                
                    break;
                case "W"://指定宽,高按比例                    
                    toheight = originalImage.Height * width / originalImage.Width;
                    break;
                case "H"://指定高,宽按比例
                    towidth = originalImage.Width * height / originalImage.Height;
                    break;
                case "Cut"://指定高宽裁减(不变形)                
                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height * towidth / toheight;
                        y = 0;
                        x = (originalImage.Width - ow) / 2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width * height / towidth;
                        x = 0;
                        y = (originalImage.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }

            //新建一个bmp图片
            Bitmap b = new Bitmap(towidth, toheight);
            try
            {
                //新建一个画板
                Graphics g = Graphics.FromImage(b);
                //设置高质量插值法
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = SmoothingMode.AntiAlias;
                g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                //清空画布并以透明背景色填充
                g.Clear(Color.Transparent);
                //在指定位置并且按指定大小绘制原图片的指定部分
                g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);

                // 将图片转换为流
                Stream ms = new MemoryStream();
                b.Save(ms, ImageFormat.Jpeg);
                string workingDirectory = newFileName.Substring(0, newFileName.LastIndexOf("/") + 1);

                string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string imgPath = path + newFileName.Substring(newFileName.LastIndexOf("/"));
                b.Save(imgPath);

                SFTPFactory factory = new SFTPFactory();
                factory.InitFSTPClient(workingDirectory);
                SFTPFactory.CreateSFTPHelper().Save(ms, newFileName);
                //SaveImage(b, newFileName, GetCodecInfo("image/" + GetFormat(newFileName).ToString().ToLower()));
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                b.Dispose();
            }
        }
예제 #2
0
        /// <summary>
        /// 制作缩略图
        /// </summary>
        /// <param name="original">图片对象</param>
        /// <param name="newFileName">新图路径</param>
        /// <param name="maxWidth">最大宽度</param>
        /// <param name="maxHeight">最大高度</param>
        public static void MakeThumbnailImage(Image original, string newFileName, int maxWidth, int maxHeight)
        {
            Size _newSize = ResizeImage(original.Width, original.Height, maxWidth, maxHeight);

            string path = HttpContext.Current.Server.MapPath("/uploadsTest/");
            if (!File.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            //original.Save(Path.Combine(path,new Random(1000).Next()+".jpg"));

            // UNDO:
            using (Image displayImage = new Bitmap(original, _newSize))
            {
                try
                {
                    SFTPFactory facotry = new SFTPFactory();
                    string directory = newFileName.Substring(0, newFileName.LastIndexOf(@"/"));
                    facotry.InitFSTPClient(directory);
                    // 将图片装换成流
                    byte[] imageBytes = SFTPFactory.CreateSFTPHelper().RecieveStream(newFileName);
                    Stream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
                    displayImage.Save(ms, original.RawFormat);
                    displayImage.Save(Path.Combine(path, new Random().Next() + ".Png"));
                    //SFTPFactory.SFTPHelper.client.Delete(newFileName);
                    SFTPFactory.CreateSFTPHelper().Save(ms, newFileName);
                }
                finally
                {
                    original.Dispose();
                }
            }
        }
예제 #3
0
        /// <summary>
        ///  按模版比例最大范围的裁剪图片并缩放至模版尺寸 2015年12月14日 【MF】
        /// </summary>
        /// <param name="postedFile">上传的图片流</param>
        /// <param name="filePath">文件保存路径</param>
        /// <param name="maxWidth">最大宽(单位:px)</param>
        /// <param name="maxHeight">最大高(单位:px)</param>
        public static string MakeThumbnailImage(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int maxWidth, int maxHeight)
        {
            // 1.0 从文件获取原始图片, 并使用流中嵌入的颜色管理信息
            Image originalImage = Image.FromStream(postedFile.InputStream, true);
            string imgExt = Common.GetFileExt(postedFile.FileName);
            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + "." + imgExt; ;
            double destWidth, destHeight;

            try
            {
                // 1.1 初始化 SFTP 协议内容
                SFTPFactory factory = new SFTPFactory();
                factory.InitFSTPClient(fileSaveUrl);
                SFTPHelper sftpHelper = SFTPFactory.CreateSFTPHelper();

                double templateRate = (double)maxWidth / (double)maxHeight; // 模板的宽高比例
                double originalRate = (double)originalImage.Width / (double)originalImage.Height; // 原始图片宽高比
                // 2.0 原图宽高均小于模板,不作处理,直接保存
                if (originalImage.Width <= maxWidth && originalImage.Height <= maxHeight)
                {
                    destWidth = originalImage.Width;
                    destHeight = originalImage.Height;
                }
                if (originalRate > templateRate)
                {
                    double zoom = (double)maxWidth / (double)originalImage.Width;
                    destHeight = originalImage.Height * zoom;
                    destWidth = maxWidth;
                }
                else
                {
                    double zoom = (double)maxHeight / (double)originalImage.Height;
                    destWidth = originalImage.Width * zoom;
                    destHeight = maxHeight;
                }
                Image img = new Bitmap(maxWidth, maxHeight);
                Graphics graphics = Graphics.FromImage(img);
                graphics.InterpolationMode = InterpolationMode.High;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphics.Clear(Color.White);
                graphics.DrawImage(originalImage, new Rectangle(0, 0, (int)destWidth, (int)destHeight), new Rectangle(0, 0, originalImage.Width, originalImage.Height), GraphicsUnit.Pixel);

                MemoryStream ms = new MemoryStream();
                 byte[] myImage = null;
                img.Save(ms, ImageFormat.Jpeg);
                myImage = ms.GetBuffer();
                MemoryStream newMs = new MemoryStream(myImage, 0, myImage.Length, true, true);

                sftpHelper.Save(newMs, fileSaveUrl + fileName);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return fileName;
        }
예제 #4
0
        /// <summary>
        /// 文件上传方法C
        /// </summary>
        /// <param name="postedFile">文件流</param>
        /// <param name="isThumbnail">是否生成缩略图</param>
        /// <param name="isWater">是否打水印</param>
        /// <param name="isReOriginal">是否返回文件原名称</param>
        /// <returns>服务器文件路径</returns>
        public string FileSaveAs(HttpPostedFile postedFile, bool isThumbnail, bool isWater, bool _isImage, bool _isReOriginal)
        {
            try
            {
                string fileExt = Common.GetFileExt(postedFile.FileName);  //文件扩展名,不含“.”
                string originalFileName = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf(@"\") + 1); //取得文件原名
                string fileName = Common.GetRamCode() + "." + fileExt; //随机文件名
                string dirPath = GetUpLoadPath(); //上传目录相对路径

                //检查文件扩展名是否合法
                if (!CheckFileExt(fileExt))
                {
                    return "不允许上传" + fileExt + "类型的文件!";
                }
                //检查是否必须上传图片
                if (_isImage && !IsImage(fileExt))
                {
                    return "对不起,仅允许上传图片文件!";
                }
                //检查文件大小是否合法
                if (!CheckFileSize(fileExt, postedFile.ContentLength))
                {
                    return "文件超过限制的大小啦!";
                }

                // 获取图片服务器的地址
                var picPath = "http://pic.myqwe.com/" + this.siteConfig.attachpath + "/" + fileName;
                // string workingDirectory = "/data/web/userpic/Uploads/" + userId + "LogoAndBanner" + "/";
                string workingDirectory = GetUpLoadPath();

                SFTPFactory factory = new SFTPFactory();
                factory.InitFSTPClient(workingDirectory);

                //获得要保存的文件路径  
                string serverFileName = Path.Combine(workingDirectory, fileName);
                string serverThumbnailFileName = Path.Combine(workingDirectory, "thumb/" + fileName);  //workingDirectory + "small_" + fileName;
                string returnFileName = serverFileName;

                //Stream stream = new MemoryStream();
                //postedFile.InputStream.CopyTo(stream,postedFile.ContentLength);
                //var temp = postedFile.InputStream;
                //保存文件 postedFile.SaveAs(toFileFullPath + fileName);
                SFTPFactory.CreateSFTPHelper().Save(postedFile.InputStream, serverFileName);

                //Image img = Image.FromStream(new System.IO.MemoryStream(postedFile.InputStream));

                //如果是图片,检查图片尺寸是否超出限制 UNDO
                if (IsImage(fileExt) && (this.siteConfig.attachimgmaxheight > 0 || this.siteConfig.attachimgmaxwidth > 0))
                {
                    //Thumbnail.MakeThumbnailImage(serverFileName, serverFileName, this.siteConfig.attachimgmaxwidth, this.siteConfig.attachimgmaxheight);
                }
                //是否生成缩略图
                if (IsImage(fileExt) && isThumbnail && this.siteConfig.thumbnailwidth > 0 && this.siteConfig.thumbnailheight > 0)
                {
                    Thumbnail.MakeThumbnailImage(serverFileName, serverThumbnailFileName, this.siteConfig.thumbnailwidth, this.siteConfig.thumbnailheight, "Cut");
                    returnFileName += "," + serverThumbnailFileName; //返回缩略图,以逗号分隔开
                }
                //是否打图片水印
                if (IsWaterMark(fileExt) && isWater)
                {
                    switch (this.siteConfig.watermarktype)
                    {
                        case 1:
                            WaterMark.AddImageSignText(serverFileName, serverFileName,
                                this.siteConfig.watermarktext, this.siteConfig.watermarkposition,
                                this.siteConfig.watermarkimgquality, this.siteConfig.watermarkfont, this.siteConfig.watermarkfontsize);
                            break;
                        case 2:
                            WaterMark.AddImageSignPic(serverFileName, serverFileName,
                                this.siteConfig.watermarkpic, this.siteConfig.watermarkposition,
                                this.siteConfig.watermarkimgquality, this.siteConfig.watermarktransparency);
                            break;
                    }
                }
                //如果需要返回原文件名
                if (_isReOriginal)
                {
                    return serverFileName + "-------------" + originalFileName;
                }
                return picPath;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }