01/10/2018, 17:26

Thay đổi kích thước và dung lượng ảnh

Giả sử bạn cần upload ảnh lên server hoặc cần lưu ảnh chỉ định vào cơ sở dữ liệu. Nhưng ảnh bạn có thể lên đến vài chục hoặc vài trăm MB. Như vậy sẽ làm cho phần mềm của bạn phải chạy chậm ì ạch, bởi vì kích thước ảnh và dung lượng ảnh quá lớn. Thay vào đó bạn thay đổi kích thước và dung lượng ảnh ...

Giả sử bạn cần upload ảnh lên server hoặc cần lưu ảnh chỉ định vào cơ sở dữ liệu. Nhưng ảnh bạn có thể lên đến vài chục hoặc vài trăm MB. Như vậy sẽ làm cho phần mềm của bạn phải chạy chậm ì ạch, bởi vì kích thước ảnh và dung lượng ảnh quá lớn. Thay vào đó bạn thay đổi kích thước và dung lượng ảnh của bạn xuống mức vừa phải vi dụ như vài chục đến vài trăm KB là ok.

Bên dưới là đoạn code dùng để thay đổi kích thước và dung lượng ảnh.

public Image ResizeByWidth(Image img, int awidth)
{
   // lấy chiều rộng và chiều cao ban đầu của ảnh
   int originalW = img.Width;
   int originalH = img.Height;

   // lấy chiều rộng và chiều cao mới tương ứng với chiều rộng truyền vào của ảnh (nó sẽ giúp ảnh của chúng ta sau khi resize vần giứ được độ cân đối của tấm ảnh
   int resizedW = awidth;
   int resizedH = (originalH * resizedW) / originalW;

   // tạo một Bitmap có kích thước tương ứng với chiều rộng và chiều cao mới
   Bitmap bmp = new Bitmap(resizedW, resizedH);

   // tạo mới một đối tượng từ Bitmap
   Graphics graphic = Graphics.FromImage((Image)bmp);
   graphic.InterpolationMode = InterpolationMode.High;

   // vẽ lại ảnh với kích thước mới
   graphic.DrawImage(img, 0, 0, resizedW, resizedH);

   // gải phóng resource cho đối tượng graphic
   graphic.Dispose();

   // trả về anh sau khi đã resize
   return (Image)bmp;
}

Giải thích:

  • Đối số img của hàm ResizeByWidth() là ảnh bạn cần giảm kích thước và dung lượng
  • Đối số awidth của hàm ResizeByWidth() là kích thước ảnh bạn cần giảm

Kết quả, đã được kiểm chứng:

  • Góc Kinh Nghiệm tiến hành resize một ảnh có kích thước 3648×2736 pixel với dung lượng là 3.58 MB xuống chiều rộng ảnh mong muốn là 500 pixel
  • Kết quả thu được ảnh có kích thước 500×375 pixel với dung lượng mới chỉ có 572 KB (dung lượng ảnh có thể nhỏ hơn hay lớn hơn 572 KB tùy thuộc vào tùy chọn của InterpolationMode, ở ví dụ trên mình thiết lập InterpolationMode.High. Bạn thể chọn một trong các tùy chọn trong danh sách bên dưới:

Danh sách các tùy chọn của InterpolationMode:

  • InterpolationMode.Bicubic
  • InterpolationMode.Bilinear
  • InterpolationMode.Default
  • InterpolationMode.High
  • InterpolationMode.HighQualityBicubic
  • InterpolationMode.HighQualityBilinear
  • InterpolationMode.Invalid
  • InterpolationMode.Low
  • InterpolationMode.NearestNeighbor

Góc Kinh nghiệm chúc các bạn thành công!  :lol:


0