Kiến thức

Tìm kiếm
Hỗ trợ trực tuyến
Hỗ trợ trực tuyến - toankhoa1008
Mr.Khoa - 0909 017 015
Khuyến mãi
Khuyến mãi
Đối tác
Kiến thức thiết kế
Thay đổi kích thước ảnh khi upload
4/30/2012 9:41:42 PM
Bạn thiết kế một website cho khách hàng, giao quyền admin cho khách hàng có thể cập nhật dữ liệu. Nhưng khi khách hàng upload hình ảnh sản phẩm lên website, làm thế nào có thể xử lý được khi khách hàng upload ảnh quá lớn khiến cho tốc độ load website bị chậm và gây hao tốn dung lượng hosting. WEBXAULA sẽ giới thiệu với bạn cách thay đổi kích thước ảnh ngay khi admin upload ảnh lên host bằng ASP.NET
Thay đổi kích thước ảnh khi upload

Đầu tiên bạn cần add thêm 3 thư viện sau:

 

using System.Drawing;
using System.IO;

using System.Drawing.Imaging;

 

Bạn viết thêm 2 hàm sau:

 

public void ThayDoiKichThuocAnh(string ImageSavePath, string fileName, int MaxWidthSideSize, Stream Buffer)
    {
        int intNewWidth;
        int intNewHeight;
        System.Drawing.Image imgInput = System.Drawing.Image.FromStream(Buffer);
        ImageCodecInfo myImageCodecInfo;
        myImageCodecInfo = GetEncoderInfo("image/jpeg");
        //
        System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
        EncoderParameters myEncoderParameters = new EncoderParameters(1);
        EncoderParameter myEncoderParameter;
        //Giá trị width và height nguyên thủy của ảnh;
        int intOldWidth = imgInput.Width;
        int intOldHeight = imgInput.Height;
 
        //Kiểm tra xem ảnh ngang hay dọc;
        int intMaxSide;
        /*if (intOldWidth >= intOldHeight)
        {
        intMaxSide = intOldWidth;
        }
        else
        {
        intMaxSide = intOldHeight;
        }*/
        //Để xác định xử lý ảnh theo width hay height thì bạn bỏ note phần trên;
        //Ở đây mình chỉ sử dụng theo width nên gán luôn intMaxSide= intOldWidth; ^^;
        intMaxSide = intOldWidth;
        if (intMaxSide > MaxWidthSideSize)
        {
            //Gán width và height mới.
            double dblCoef = MaxWidthSideSize / (double)intMaxSide;
            intNewWidth = Convert.ToInt32(dblCoef * intOldWidth);
            intNewHeight = Convert.ToInt32(dblCoef * intOldHeight);
        }
        else
        {
            //Nếu kích thước width/height (intMaxSide) cũ ảnh nhỏ hơn MaxWidthSideSize thì giữ nguyên //kích thước cũ;
            intNewWidth = intOldWidth;
            intNewHeight = intOldHeight;
        }
 
        //Tạo một ảnh bitmap mới;
        Bitmap bmpResized = new Bitmap(imgInput, intNewWidth, intNewHeight);
        //Phần EncoderParameter cho phép bạn chỉnh chất lượng hình ảnh ở đây mình để chất lượng tốt //nhất là 100L;
        myEncoderParameter = new EncoderParameter(myEncoder, 100L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        //Lưu ảnh;
        bmpResized.Save(ImageSavePath + fileName, myImageCodecInfo, myEncoderParameters);
 
        //Giải phóng tài nguyên;
        //Buffer.Close();
        imgInput.Dispose();
        bmpResized.Dispose();
    }
    private ImageCodecInfo GetEncoderInfo(String mimeType)
    {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for (j = 0; j < encoders.Length; ++j)
        {
            if (encoders[j].MimeType == mimeType)
                return encoders[j];
        }
        return null;

    }

 

Đến khi cần sử dụng hàm thì bạn gọi như sau là sẽ đồng thời thay đổi kích thước ảnh theo quy định của mình và upload ảnh đã resize lên host.

 

ThayDoiKichThuocAnh(Server.MapPath("~/hinh/tin/thumb/"), pChuoiNgayThang, 180, UpHinh.PostedFile.InputStream); 

Cám ơn các bạn đã đọc bài viết này. Nếu bạn cảm thấy bài viết này hay và có ích thì hãy ấn +1 hoặc like để khích lệ tác giả bài viết nhé, và nếu được thì share cho bạn bè cùng đọc. Thanks ^o^

Bài viết liên quan


8/19/2012 12:33:08 PM
Bạn thiết kế một trang site tin tức đòi hỏi công việc cập nhật tin tức tự động một cách thường xuyên? Nhưng bạn không có đủ nhân lực và thời [....]
8/19/2012 10:27:00 AM
Với số lượng dữ liệu quá nhiều không thể hiện lên hết trong 1 trang thì việc phân trang là một công việc chắc chắn phải làm. Có rất nhiều cá [....]
6/7/2012 11:19:49 AM
Bạn sử dụng một iframe trong website để hiển thị nội dung (nội dung một website khác hoặc nội dung từ các file tài liệu, ....) nhưng bạn gặp [....]
5/21/2012 8:12:43 AM
Khi publish một website chạy trên internet thì sẽ phát sinh nhiều lỗi ngoài mong muốn. Một lỗi thường xuyên gặp nhất là lỗi 404 (Page not fo [....]
5/19/2012 12:29:57 PM
Khi các bạn thực hiện rewrite URL cho website, công việc cần thiết là làm thế nào để chuyển đổi được từ tiếng Việt có dấu sang không dấu. Ở [....]
4/28/2012 9:29:43 AM
Gọi một hàm từ server side bằng javascript là một câu hỏi được rất nhiều bạn hỏi WEBXAULA với nhiều lý do muốn truy xuất dữ liệu, gọi sessio [....]
4/25/2012 1:20:42 PM
Lần trước WEBXAULA đã giới thiệu với các bạn cách chọn xoá nhiều dòng dữ liệu trên gridview. Trong bài viết này, tôi sẽ giới thiệu với các b [....]
4/23/2012 3:48:42 PM
Trong bài viết này, WEBXAULA sẽ giới thiệu tới các bạn cách tạo chức năng xoá cùng lúc nhiều dòng dữ liệu giống Yahoo Mail hoặc Google Mail
4/23/2012 3:15:48 PM
Trong bài viết trước, WEBXAULA đã giới thiệu với các bạn cách làm đồng hồ đếm ngược trong asp.net. Có nhiều bạn phản hồi hỏi mình cách làm c [....]
4/22/2012 2:35:07 PM
Khi thiết kế một website, công việc phân dữ liệu thành nhiều trang hiển thị là bắt buộc khi dữ liệu lớn. Trong các control của Visual Studio [....]
1 2
Doanh Nghiệp Tư Nhân TM DV TAHI TAKA
Văn phòng: G7, ấp Mỹ Hoà 2, xã Xuân Thới Đông, huyện Hóc Môn, TPHCM
Điện thoại: (84-8) 6250 1751 - 0909.017.015
Email: contact@webxaula.com - ktwebpro@gmail.com
Website: www.webxaula.com