Изменить размер изображения на сервере без загрузки - PullRequest
1 голос
/ 18 июня 2019

У меня есть изображения на сервере asp.net.Я хочу создавать их миниатюры, просто копируя, изменяя размеры, переименовывая и, наконец, сохраняя их на самом сервере.Для сжатия у меня есть код, но как я могу сохранить файл.

if (fileUploader.HasFile)
                        {
                            string fileName = Path.GetFileName(fileUploader.PostedFile.FileName);
                            string ext = string.Empty;
                            ext = System.IO.Path.GetExtension(fileUploader.FileName.ToString()).ToLower();
                            fileUploader.PostedFile.SaveAs(Server.MapPath("~/Images_Coach/" + hdnCoachId.Value + "/") + hdnCoachId.Value + ext);
                            int width = Convert.ToInt32(150);
                            int height = Convert.ToInt32(150);
                            Stream inp_Stream = fileUploader.PostedFile.InputStream;
                            using (var image = System.Drawing.Image.FromStream(inp_Stream))
                            {
                                Bitmap myImg = new Bitmap(width, height);
                                Graphics myImgGraph = Graphics.FromImage(myImg);
                                myImgGraph.CompositingQuality = CompositingQuality.HighQuality;
                                myImgGraph.SmoothingMode = SmoothingMode.HighQuality;
                                myImgGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                var imgRectangle = new Rectangle(0, 0, width, height);
                                myImgGraph.DrawImage(image, imgRectangle);

                                newFile = hdnCoachId.Value + "_icon" + ext;
                                // Save the file   
                                var path = Path.Combine(Server.MapPath("~/Images_Coach/" + hdnCoachId.Value + "/"), newFile);
                                myImg.Save(path, image.RawFormat);
                            }
                        }  

1 Ответ

0 голосов
/ 18 июня 2019

Я могу получить файл в байтовом массиве и затем преобразовать его в поток

 foreach (var fileName in Directory.GetFiles(dirFile))
                    {
                        if (fileName.Contains(dir))
                        {
                            string newFile = string.Empty;
                            //Read the File into a Byte Array.
                            string ext = string.Empty;
                            ext = System.IO.Path.GetExtension(fileName.ToString()).ToLower();
                            byte[] bytes = File.ReadAllBytes(fileName);
                            Stream inp_Stream = new MemoryStream(bytes);
                            int width = Convert.ToInt32(150);
                            int height = Convert.ToInt32(150);
                            using (var image = System.Drawing.Image.FromStream(inp_Stream))
                            {
                                Bitmap myImg = new Bitmap(width, height);
                                Graphics myImgGraph = Graphics.FromImage(myImg);
                                myImgGraph.CompositingQuality = CompositingQuality.HighQuality;
                                myImgGraph.SmoothingMode = SmoothingMode.HighQuality;
                                myImgGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                var imgRectangle = new Rectangle(0, 0, width, height);
                                myImgGraph.DrawImage(image, imgRectangle);

                                newFile = dir + "_icon" + ext;
                                // Save the file   
                                var newPath = Path.Combine(Server.MapPath("~/Images_Coach/" + dir + "/"), newFile);
                                myImg.Save(newPath, image.RawFormat);
                            }
                        }
                        //File.Delete
                        // fileName  is the file name
                    }
...