ASP.NET Image uploading with Resizing

前端 未结 14 1831
广开言路
广开言路 2020-11-30 01:27

I have an aspx page which will upload images to server harddisk from client pc

But now i need to change my program in such a way that it would allow me to resize the

相关标签:
14条回答
  • 2020-11-30 01:37

    To resize down a image and get smaller sizes just make the changes below

        bmpOut = new Bitmap(lnNewWidth, lnNewHeight, **System.Drawing.Imaging.PixelFormat.Format24bppRgb**);
    
         Graphics g = Graphics.FromImage(bmpOut);
    

    as you above a set the imagem to Format24bppRgb PixelFormat.

    and when you save the file, you set the ImageFormat also. Like this:

    bmpOut.Save(PathImage, System.Drawing.Imaging.ImageFormat.Jpeg);
    
    0 讨论(0)
  • 2020-11-30 01:40

    You will not be able to resize "on the fly" since you will need to have the full image before you perform any image transformations. However, after the upload is complete and before you display any results to your user, you can use this basic image resizing method that I've used in a couple of my apps now:

       ''' <summary>
       '''    Resize image with GDI+ so that image is nice and clear with required size.
       ''' </summary>
       ''' <param name="SourceImage">Image to resize</param>
       ''' <param name="NewHeight">New height to resize to.</param>
       ''' <param name="NewWidth">New width to resize to.</param>
       ''' <returns>Image object resized to new dimensions.</returns>
       ''' <remarks></remarks>
       Public Shared Function ImageResize(ByVal SourceImage As Image, ByVal NewHeight As Int32, ByVal NewWidth As Int32) As Image
    
          Dim bitmap As System.Drawing.Bitmap = New System.Drawing.Bitmap(NewWidth, NewHeight, SourceImage.PixelFormat)
    
          If bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format1bppIndexed Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format4bppIndexed Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format8bppIndexed Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Undefined Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.DontCare Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppArgb1555 Or _
              bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppGrayScale Then
             Throw New NotSupportedException("Pixel format of the image is not supported.")
          End If
    
          Dim graphicsImage As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmap)
    
          graphicsImage.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
          graphicsImage.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
          graphicsImage.DrawImage(SourceImage, 0, 0, bitmap.Width, bitmap.Height)
          graphicsImage.Dispose()
          Return bitmap
    
       End Function
    
    0 讨论(0)
  • 2020-11-30 01:41

    Another approach would to allow the user to adjust the size in the browser and then resize the image as described in other answers.

    So take a look at this solution which allows you to upload and crop images with jQuery, jCrop & ASP.NET.

    0 讨论(0)
  • 2020-11-30 01:41

    This is how I did in my project, based on your condition (height/width) you can change the parameter ie(MaxHeight)

    View Blog Article : How to Resize image while uploading in asp.net using c#

     public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxHeight)
            {
                var ratio = (double)maxHeight / image.Height;
    
                var newWidth = (int)(image.Width * ratio);
                var newHeight = (int)(image.Height * ratio);
    
                var newImage = new Bitmap(newWidth, newHeight);
                using (var g = Graphics.FromImage(newImage))
                {
                    g.DrawImage(image, 0, 0, newWidth, newHeight);
                }
                return newImage;
            }
    

    On Button click:

    protected void Button1_Click(object sender, EventArgs e)
    {
      lblmsg.Text="";
      if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
      {
        Guid uid = Guid.NewGuid();
        string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
        string SaveLocation = Server.MapPath("LogoImagesFolder") + "\\" + uid+fn;
        try
        {
          string fileExtention = File1.PostedFile.ContentType;
          int fileLenght = File1.PostedFile.ContentLength;
          if (fileExtention == "image/png" || fileExtention == "image/jpeg" || fileExtention == "image/x-png")
          {
            if (fileLenght <= 1048576)
            {
              System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(File1.PostedFile.InputStream);
              System.Drawing.Image objImage = ScaleImage(bmpPostedImage, 81);
              objImage.Save(SaveLocation,ImageFormat.Png);
              lblmsg.Text = "The file has been uploaded.";
              lblmsg.Style.Add("Color", "Green");
             }
             else 
             {
               lblmsg.Text = "Image size cannot be more then 1 MB.";
               lblmsg.Style.Add("Color", "Red");
              }
           }
         else {
                 lblmsg.Text = "Invaild Format!";
                 lblmsg.Style.Add("Color", "Red");
               }
         }
         catch (Exception ex)
           {
              lblmsg.Text= "Error: " + ex.Message;
              lblmsg.Style.Add("Color", "Red");
           }
       }
     }
    
    0 讨论(0)
  • 2020-11-30 01:42

    You can use this, it does a dandy job for me. But it does not handle low res images well for me. Thankfully I down use to many of them. Just sent it the image byte[] and the expected output and you'll be good to go.

    public static byte[] ResizeImageFile(byte[] imageFile, int targetSize) 
    { 
        using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile))) 
        { 
            Size newSize = CalculateDimensions(oldImage.Size, targetSize); 
    
            using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppRgb)) 
            { 
                newImage.SetResolution(oldImage.HorizontalResolution, oldImage.VerticalResolution); 
                using (Graphics canvas = Graphics.FromImage(newImage)) 
                { 
                    canvas.SmoothingMode = SmoothingMode.AntiAlias; 
                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; 
                    canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; 
                    canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize)); 
                    MemoryStream m = new MemoryStream(); 
                    newImage.Save(m, ImageFormat.Jpeg); 
                    return m.GetBuffer(); 
                } 
            } 
    
        } 
    } 
    
    private static Size CalculateDimensions(Size oldSize, int targetSize) 
    { 
        Size newSize = new Size(); 
        if (oldSize.Width > oldSize.Height) 
        { 
            newSize.Width = targetSize; 
            newSize.Height = (int)(oldSize.Height * (float)targetSize / (float)oldSize.Width); 
        } 
        else 
        { 
            newSize.Width = (int)(oldSize.Width * (float)targetSize / (float)oldSize.Height); 
            newSize.Height = targetSize; 
        } 
        return newSize; 
    } 
    
    0 讨论(0)
  • 2020-11-30 01:45
    //Here is another WAY fox!!! i have actually modify the code from You all. HIHI
    //First, add one textBox and one FileUpload Control, and a button
    
    //paste this in your code behind file... after public partial class admin : System.Web.UI.Page
    
        string OriPath;
        string ImageName;
    
    public Size NewImageSize(int OriginalHeight, int OriginalWidth, double FormatSize)
        {
            Size NewSize;
            double tempval;
    
            if (OriginalHeight > FormatSize && OriginalWidth > FormatSize)
            {
                if (OriginalHeight > OriginalWidth)
                    tempval = FormatSize / Convert.ToDouble(OriginalHeight);
                else
                    tempval = FormatSize / Convert.ToDouble(OriginalWidth);
    
                NewSize = new Size(Convert.ToInt32(tempval * OriginalWidth), Convert.ToInt32(tempval * OriginalHeight));
            }
            else
                NewSize = new Size(OriginalWidth, OriginalHeight); return NewSize;
        } 
    
    
    
    //Now, On Button click add the folwing code.
    
    if (FileUpload1.PostedFile != null)
            {
               ImageName = TextBox1.Text+".jpg";
    
    
               OriPath = Server.MapPath("pix\\") + ImageName;
    
               //Gets the Full Path using Filecontrol1 which points to actual location in the hardisk :)
    
               using (System.Drawing.Image Img = System.Drawing.Image.FromFile(System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName)))
               {
                   Size ThumbNailSize = NewImageSize(Img.Height, Img.Width, 800);
    
                   using (System.Drawing.Image ImgThnail = new Bitmap(Img, ThumbNailSize.Width, ThumbNailSize.Height))
                   {
                       ImgThnail.Save(OriPath, Img.RawFormat);
                       ImgThnail.Dispose();
                   }
                   Img.Dispose();
               }
    }
    
    
    //Enjoy. If any problem,, mail me at izacmail@gmail.com 
    
    0 讨论(0)
提交回复
热议问题