ASP.Net MVC Image Upload Resizing by downscaling or padding

前端 未结 2 830
夕颜
夕颜 2021-01-31 23:57

A user will be able to upload an image. If the image is greater than a set size I want to downsize it to that size. Obviously it doesn\'t have to match exactly due to ratios, t

相关标签:
2条回答
  • 2021-02-01 00:39

    You can just load the file into a bitmap object:

    http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx

    Then just check the width on the object. For the second part of your problem, I would recommend using a tool like ImageMagick

    http://www.imagemagick.org/script/index.php

    to accurately resize the first image or to create the background image and merge the two images together.

    0 讨论(0)
  • 2021-02-01 00:42

    Here's a snippet of code I quickly knocked up for resizing it based on the width. I'm sure you could figure out how to add a background color to the Bitmap. It's not complete code but just an idea of how to do things.

    public static void ResizeLogo(string originalFilename, string resizeFilename)
    {
        Image imgOriginal = Image.FromFile(originalFilename);
    
        //pass in whatever value you want for the width (180)
        Image imgActual = ScaleBySize(imgOriginal, 180);
        imgActual.Save(resizeFilename);
        imgActual.Dispose();
    }
    
    public static Image ScaleBySize(Image imgPhoto, int size)
    {
        int logoSize = size;
    
        float sourceWidth = imgPhoto.Width;
        float sourceHeight = imgPhoto.Height;
        float destHeight = 0;
        float destWidth = 0;
        int sourceX = 0;
        int sourceY = 0;
        int destX = 0;
        int destY = 0;
    
        // Resize Image to have the height = logoSize/2 or width = logoSize.
        // Height is greater than width, set Height = logoSize and resize width accordingly
        if (sourceWidth > (2 * sourceHeight))
        {
            destWidth = logoSize;
            destHeight = (float)(sourceHeight * logoSize / sourceWidth);
        }
        else
        {
            int h = logoSize / 2;
            destHeight = h;
            destWidth = (float)(sourceWidth * h / sourceHeight);
        }
        // Width is greater than height, set Width = logoSize and resize height accordingly
    
        Bitmap bmPhoto = new Bitmap((int)destWidth, (int)destHeight, 
                                    PixelFormat.Format32bppPArgb);
        bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
    
        Graphics grPhoto = Graphics.FromImage(bmPhoto);
        grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
    
        grPhoto.DrawImage(imgPhoto,
            new Rectangle(destX, destY, (int)destWidth, (int)destHeight),
            new Rectangle(sourceX, sourceY, (int)sourceWidth, (int)sourceHeight),
            GraphicsUnit.Pixel);
    
        grPhoto.Dispose();
    
        return bmPhoto;
    }
    
    0 讨论(0)
提交回复
热议问题