تابعی کامل و مختصر برای فشرده سازی و تغییر سایز عکس بعد از آپلود

شنبه 3 آبان 1393

همیشه برای آپلود عکس باید ، یه سری فیلترهایی برای کاربر نهایی قرار بدیم تا آپلود به بهترین شکل صورت بگیره. اکثر مواقع این فیلترها ، کاربر رو اذیت میکنه. پس شما برنامه نویس عزیز باید این عملیات رو دور از چشم کاربر انجام بدی...

تابعی کامل و مختصر برای  فشرده سازی و  تغییر سایز عکس بعد از آپلود

همیشه برای آپلود عکس باید ، یه سری فیلترهایی برای کاربر نهایی قرار بدیم تا آپلود به بهترین شکل صورت بگیره. اکثر مواقع این فیلترها ، کاربر رو اذیت میکنه. پس شما برنامه نویس عزیز باید این عملیات رو دور از چشم کاربر انجام بدی.

برای این کار از تابع زیر استفاده کنید. در این تابع حجم عکس به شکل خیلی چشم گیری کاهش پیدا میکنه و حتی شما میتونی به این تابع دستور بدی ، سایز عکس به چه میزانی کوچتر با یزرگتر بشه.

public void ImageCompression(double scaleFactor, Stream sourcePath, string targetPath)
    {
        using (var image = System.Drawing.Image.FromStream(sourcePath))
        {
            var newWidth = (int)(image.Width * scaleFactor);
            var newHeight = (int)(image.Height * scaleFactor);
            var thumbnailImg = new Bitmap(newWidth, newHeight);
            var thumbGraph = Graphics.FromImage(thumbnailImg);
            thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
            thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
            thumbGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
            var imageRectangle = new Rectangle(0, 0, newWidth, newHeight);
            thumbGraph.DrawImage(image, imageRectangle);
            thumbnailImg.Save(targetPath, image.RawFormat);
        }
    }

در تابع بالا از طریق پارامتر scaleFactor میزان تغییر سایز عکس رو مشخص میکنی. اگه این عدد بین صفر تا یک باشه ، عکس کوچک میشه ، اگه یک باشه تغییری نمیکنه و اگه بزرگتر از یک باشه به همون میزان ، عکس چند برابر بزرگتر میشه. در هر سه حالت حجم عکس تغییر میکنه...

اینم نحوه فراخوانی تابع :

string savepath = String.Format(Request.PhysicalApplicationPath + "Images\\{0}", FileUpload1.FileName);
Stream strm = FileUpload1.PostedFile.InputStream;
ImageCompression(0.5, strm, savepath);

سوالی داشتید در خدمتم.موفق باشید...

حمید هارونی

نویسنده 6 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید