繁体   English   中英

如何在ASP.NET C#中使用MultipleFileUpload减少图像文件,调整大小而不损失质量

[英]How to reduce image file, resize without losing quality using MultipleFileUpload in ASP.NET C#

我正在使用MultipleFileUpload上传多张照片,如果要上传大尺寸图像,则滑块图像中的图像尺寸不固定,无法显示正确的外观。 上传时间是否有任何代码限制了图库图片的大小。

以下是我的C#代码:

protected void lnkbtn_Submit_Click(object sender, EventArgs e)
{
    try
    {
        if (MultipleFileUpload.HasFiles)
        {
            int MaxGalleryId, ReturnValue;
            ReturnValue = obj.fnCreateNewPhotoGallery(txtGalleryName.Text, txtGalleryDescrption.Text, DateTime.Now, out MaxGalleryId);
            if (ReturnValue != 0)
            {
                string GalleryPath = System.Configuration.ConfigurationManager.AppSettings["GalleryPath"] + MaxGalleryId;
                Directory.CreateDirectory(Server.MapPath(GalleryPath));

                string ThumbnailPath = System.Configuration.ConfigurationManager.AppSettings["ThumbnailPath"] + MaxGalleryId;
                Directory.CreateDirectory(Server.MapPath(ThumbnailPath));

                StringBuilder UploadedFileNames = new StringBuilder();

                foreach (HttpPostedFile uploadedFile in MultipleFileUpload.PostedFiles)
                {
                    //Upload file
                    string FileName = HttpUtility.HtmlEncode(Path.GetFileName(uploadedFile.FileName));
                    string SaveAsImage = System.IO.Path.Combine(Server.MapPath(GalleryPath + "/"), FileName);
                    uploadedFile.SaveAs(SaveAsImage);

                    //Create thumbnail for uploaded file and save thumbnail on disk
                    Bitmap Thumbnail = CreateThumbnail(SaveAsImage, 200, 200);
                    string SaveAsThumbnail = System.IO.Path.Combine(Server.MapPath(ThumbnailPath + "/"), FileName);
                    Thumbnail.Save(SaveAsThumbnail);
                }
                HTMLHelper.jsAlertAndRedirect(this, "Gallery created successfully. ", "Album.aspx?GalleryId=" + MaxGalleryId);
            }
        }
    }

    catch
    {
        HTMLHelper.jsAlertAndRedirect(this, "Gallery is not created. Some exception occured ", "CreateAlbum.aspx");
    }
}

以下是我的创建缩略图方法代码:

public Bitmap CreateThumbnail(string ImagePath, int ThumbnailWidth, int ThumbnailHeight)
{
    System.Drawing.Bitmap Thumbnail = null;
    try
    {
        Bitmap ImageBMP = new Bitmap(ImagePath);
        ImageFormat loFormat = ImageBMP.RawFormat;

        decimal lengthRatio;
        int ThumbnailNewWidth = 0;
        int ThumbnailNewHeight = 0;
        decimal ThumbnailRatioWidth;
        decimal ThumbnailRatioHeight;

        // If the uploaded image is smaller than a thumbnail size the just return it
        if (ImageBMP.Width <= ThumbnailWidth && ImageBMP.Height <= ThumbnailHeight)
            return ImageBMP;

        // Compute best ratio to scale entire image based on larger dimension.
        if (ImageBMP.Width > ImageBMP.Height)
        {
            ThumbnailRatioWidth = (decimal)ThumbnailWidth / ImageBMP.Width;
            ThumbnailRatioHeight = (decimal)ThumbnailHeight / ImageBMP.Height;
            lengthRatio = Math.Min(ThumbnailRatioWidth, ThumbnailRatioHeight);
            ThumbnailNewWidth = ThumbnailWidth;
            decimal lengthTemp = ImageBMP.Height * lengthRatio;
            ThumbnailNewHeight = (int)lengthTemp;
        }
        else
        {
            ThumbnailRatioWidth = (decimal)ThumbnailWidth / ImageBMP.Width;
            ThumbnailRatioHeight = (decimal)ThumbnailHeight / ImageBMP.Height;
            lengthRatio = Math.Min(ThumbnailRatioWidth, ThumbnailRatioHeight);
            ThumbnailNewHeight = ThumbnailHeight;
            decimal lengthTemp = ImageBMP.Width * lengthRatio;
            ThumbnailNewWidth = (int)lengthTemp;
        }
        Thumbnail = new Bitmap(ThumbnailNewWidth, ThumbnailNewHeight);
        Graphics g = Graphics.FromImage(Thumbnail);
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.FillRectangle(Brushes.White, 0, 0, ThumbnailNewWidth, ThumbnailNewHeight);
        g.DrawImage(ImageBMP, 0, 0, ThumbnailNewWidth, ThumbnailNewHeight);

        ImageBMP.Dispose();
    }
    catch
    {
        return null;
    }

    return Thumbnail;
}

上面的代码有一个命令行//从那里上传文件上传图片。 我将以下示例用于画廊: http : //www.bugdebugzone.com/2013/10/create-dynamic-image-gallery-slideshow.html

您可以按如下方式上载File的ContentLength属性:

if (uploadedFile.ContentLength > 1000000)
{
    continue;
}

ContentLength是上载文件的大小(以字节为单位)。 https://msdn.microsoft.com/zh-CN/library/system.web.httppostedfile.contentlength(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM