ذخیره تصویر و تغییر اندازه

2/4/2016 MVC
3582

در پروژه ها استفاد ه از تصویر رایج است در MVC  نیاز پیدا میکنیم تا تصویر را ذخیره کنیم و گاهی تصویر را مطابق با سلیقه خودمان تغییر اندازه دهیم، در این مثال یاد گرفتم چگونه عکی را از ورودی دریافت کنیم و تغییر اندازه دهیم و دخیره بدهیم .

در ابتدا کلاسی را به پروژه اضافه کردم .

  public static class ResizeImage
    {

        public static Bitmap ResizeImageBitmap(Image image, int width, int height)
        {
            var destRect = new Rectangle(0, 0, width, height);
            var destImage = new Bitmap(width, height);

            destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            using (var graphics = Graphics.FromImage(destImage))
            {
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.CompositingQuality = CompositingQuality.HighQuality;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                using (var wrapMode = new ImageAttributes())
                {
                    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                    graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
                }
            }

            return destImage;
        }
    }

و در ActionResult برای دریافت عکس و تبدیل آن به اندازه دلخواه از این کد استفاده کردم 

  [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Create([Bind(Include = "Id,Title,Summery,ProductDescription,Active,SmalImage,Description")] Product product,
            HttpPostedFileBase productImage)
        {
            if (ModelState.IsValid)
            {
                product.CreateDate = DateTime.Now;

                Bitmap bitmap = new Bitmap(productImage.InputStream);

               Bitmap resizedImage =    ResizeImage.ResizeImageBitmap(bitmap,300,180);

                string imageName = System.IO.Path.GetFileName(productImage.FileName);
                var preLocalEmageUrl = "~/Images/Product/";
                if (imageName != null)
                {
                    string path = System.IO.Path.Combine(
                        Server.MapPath("~/images/Product"), imageName);
                    resizedImage.Save(path);
                    product.SmalImage = (preLocalEmageUrl + imageName);
                }
                db.Products.Add(product);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }

            return View(product);
        }

و در Viewنیز این قطعه را داشتم .

 <div class="form-group">
            @Html.LabelFor(model => model.SmalImage, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <input type="file" name="productImage" id="productImage" class="form-control" />
                @Html.ValidationMessageFor(model => model.SmalImage, "", new { @class = "text-danger" })
            </div>
        </div>