Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Thay đổi kích thước ảnh khi upload lên server bằng cách nào?

  1. #1
    Ngày gia nhập
    01 2011
    Bài viết
    128

    Mặc định Thay đổi kích thước ảnh khi upload lên server bằng cách nào?

    Dạo vài dòng kiếm code thay đổi kich thước ảnh, tìm được đoạn code này, nhưng làm hoài không dc, trình con gà, mong moi người giúp.

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

    Code:
        using System.Drawing;
        using System.IO;
        using System.Drawing.Imaging;
    Bạn viết thêm 2 hàm sau:

    Code:
        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.

    Code:
    ThayDoiKichThuocAnh(Server.MapPath("~/images/"), pChuoiNgayThang, 180, UpHinh.PostedFile.InputStream);
    lỗi ở pChuoiNgaythang
    không biết nó là cái gì. FileUpload mình đặt tên la Uphinh.

  2. #2
    Ngày gia nhập
    01 2010
    Bài viết
    306

    Oa, người ta đã hướng dẫn chi tiết vậy rồi mà

    VD nhé, trong Web form, khai báo như sau
    Code:
            <asp:FileUpload ID="UpHinh" runat="server" />
            <br />
            <asp:Button ID="btnOK" runat="server" Text="ok" onclick="btnOK_Click" />
    Trong file code ( à, nhớ tạo 1 thư mục có tên là images nhé =)) ):
    Code:
    protected void btnOK_Click(object sender, EventArgs e)
            {
                if (UpHinh.FileName != "")
                {
                    ThayDoiKichThuocAnh(Server.MapPath("~/images/"), UpHinh.FileName, 180, UpHinh.PostedFile.InputStream);
                }
            }
    Danh sách các tham số đã có cả rồi : HamThayDoiKichThuocAnh(string ImageSavePath, string fileName, int MaxWidthSideSize, Stream Buffer), vậy mà bạn còn hỏi cái pChuoiNgayThang là cái chi thì chịu ^^
    Sở dĩ người viết ra code này định dùng "chuỗi ngày tháng" để đặt tên file mà ko dùng UpHinh.FileName là do người ta sợ trường hợp file được up lên trùng tên với file đã có trên server ( khi đó sẽ xảy ra việc chép đè mất file đã có ) => người viết quyết định giải quyết vấn đề này bằng cách đặt tên file theo kiểu ngay_thang_nam_gio_phut_giay của thời điểm file đc up lên .....
    Đã được chỉnh sửa lần cuối bởi Sounj : 18-11-2012 lúc 07:23 PM.

  3. #3
    Ngày gia nhập
    01 2011
    Bài viết
    128

    Cảm ơn bạn nhiều.
    Mà sao upload hình khoảng 5mb trở lên thì không được.
    Do fileupload giới hạn hay do code.

  4. #4
    Ngày gia nhập
    10 2012
    Bài viết
    204

    do cấu hình trong file web.config, sửa lại trong đó là tăng đc giới hạn

  5. #5
    Ngày gia nhập
    01 2010
    Bài viết
    306

    Trích dẫn Nguyên bản được gửi bởi nguyenvantien87 Xem bài viết
    Cảm ơn bạn nhiều.
    Mà sao upload hình khoảng 5mb trở lên thì không được.
    Do fileupload giới hạn hay do code.
    Vào web.config, bổ sung dòng httpRuntime vào bên trong thẻ system.web nếu chưa có dòng này :

    <system.web>
    <httpRuntime maxRequestLength="1024000" />
    </system.web>

    Ở đây, 1024000 là số KB tối đa của 1 Request. Mặc định là 4096, tức là khoảng 4MB

Các đề tài tương tự

  1. Lỗi 500 Internal Server Error khi upload lên host.
    Gửi bởi colony110 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 14-05-2013, 10:50 PM
  2. Cách upload một tập hợp các file lên server?
    Gửi bởi nt150789 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 09-05-2013, 11:35 AM
  3. Lỗi OpenRead file audio.mp3, vừa thu vừa upload lên server?
    Gửi bởi nguyenduong127 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 24-03-2011, 08:45 PM
  4. Tạo ItemID tự động cho mỗi file ảnh upload lên server?
    Gửi bởi hoanglamth1 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 8
    Bài viết cuối: 17-01-2011, 02:43 PM
  5. Upload file lên server sử dụng C#?
    Gửi bởi dongdoidoithay trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 26-09-2010, 08:54 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn