Skip to main content

Create a thumbnail in ASP.NET

 #region Create Thumbnail
    // Create a thumbnail in byte array format from the image encoded in the passed byte array.  
    // (RESIZE an image in a byte[] variable.)  
    public static byte[] CreateThumbnail(byte[] PassedImage, int LargestSide, int Height, int Width)
    {
        byte[] ReturnedThumbnail;

        using (System.IO.MemoryStream StartMemoryStream = new System.IO.MemoryStream(), NewMemoryStream = new System.IO.MemoryStream())
        {
            // write the string to the stream  
            StartMemoryStream.Write(PassedImage, 0, PassedImage.Length);

            // create the start Bitmap from the MemoryStream that contains the image  
            System.Drawing.Bitmap startBitmap = new System.Drawing.Bitmap(StartMemoryStream);

            // set thumbnail height and width proportional to the original image.  
            int newHeight;
            int newWidth;
            double HW_ratio;
            if (startBitmap.Height > startBitmap.Width)
            {
                newHeight = LargestSide;
                HW_ratio = (double)((double)LargestSide / (double)startBitmap.Height);
                newWidth = (int)(HW_ratio * (double)startBitmap.Width);
            }
            else
            {
                newWidth = LargestSide;
                HW_ratio = (double)((double)LargestSide / (double)startBitmap.Width);
                newHeight = (int)(HW_ratio * (double)startBitmap.Height);
            }
            newHeight = Height;
            newWidth = Width;
            // create a new Bitmap with dimensions for the thumbnail.  
            System.Drawing.Bitmap newBitmap = new System.Drawing.Bitmap(newWidth, newHeight);

            // Copy the image from the START Bitmap into the NEW Bitmap.  
            // This will create a thumnail size of the same image.  
            newBitmap = ResizeImage(startBitmap, newWidth, newHeight);

            // Save this image to the specified stream in the specified format.  
            newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);

            // Fill the byte[] for the thumbnail from the new MemoryStream.  
            ReturnedThumbnail = NewMemoryStream.ToArray();
        }
        // return the resized image as a string of bytes.  
        return ReturnedThumbnail;
    }

    // Resize a Bitmap  
    private static System.Drawing.Bitmap ResizeImage(System.Drawing.Bitmap image, int width, int height)
    {
        System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(width, height);
        using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(resizedImage))
        {
            gfx.DrawImage(image, new System.Drawing.Rectangle(0, 0, width, height),
                new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);
        }
        return resizedImage;
    }

    public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        return ms.ToArray();
    }

    public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);
        return returnImage;
    }

    #endregion



User above code like this :

    System.Drawing.Image returnImage;
    byte[] byteArrayIn;
    MemoryStream ms;

    //Get Bytes from Requested file
    byte[] buffer = new byte[uploads.ContentLength];
    uploads.InputStream.Read(buffer, 0, uploads.ContentLength);

    if ((uploads.ContentLength / 1000) > 1000)
    {
        //Create image from Bytes array
        System.Drawing.Image img = byteArrayToImage(buffer);

        int height = Convert.ToInt32(Convert.ToDouble(img.Height) * .7);
        int width = Convert.ToInt32(Convert.ToDouble(img.Width) * .7);

        //Resize Image - ORIGINAL
        byteArrayIn = CreateThumbnail(buffer, 10000, height, width);
        //byteArrayIn = CreateThumbnail(buffer, 10000, 550, 700);
        ms = new MemoryStream(byteArrayIn);
        returnImage = System.Drawing.Image.FromStream(ms);
        returnImage.Save(path_ORIGINAL);
    }
    else
    {
        uploads.SaveAs(path_ORIGINAL);
    }

    //Resize Image - Create Thumbnail
    byteArrayIn = CreateThumbnail(buffer, 100, 105, 145);
    ms = new MemoryStream(byteArrayIn);
    returnImage = System.Drawing.Image.FromStream(ms);
    returnImage.Save(path_Thumbnail);

Comments

  1. Resize JPEG image to fixed width, while keeping aspect ratio as it is

    System.Drawing.Image img = CommonUtil.byteArrayToImage(buffer);
    int width = 200;
    int height = Convert.ToInt32((img.Height * width) / img.Width);

    ReplyDelete
  2. public static byte[] CreateThumbnail(byte[] PassedImage, int LargestSide)
    {
    byte[] ReturnedThumbnail;

    using (System.IO.MemoryStream StartMemoryStream = new System.IO.MemoryStream(), NewMemoryStream = new System.IO.MemoryStream())
    {
    // write the string to the stream
    StartMemoryStream.Write(PassedImage, 0, PassedImage.Length);

    // create the start Bitmap from the MemoryStream that contains the image
    System.Drawing.Bitmap startBitmap = new System.Drawing.Bitmap(StartMemoryStream);

    // set thumbnail height and width proportional to the original image.
    int newHeight;
    int newWidth;
    double HW_ratio;
    if (startBitmap.Height > startBitmap.Width)
    {
    newHeight = LargestSide;
    HW_ratio = (double)((double)LargestSide / (double)startBitmap.Height);
    newWidth = (int)(HW_ratio * (double)startBitmap.Width);
    }
    else
    {
    newWidth = LargestSide;
    HW_ratio = (double)((double)LargestSide / (double)startBitmap.Width);
    newHeight = (int)(HW_ratio * (double)startBitmap.Height);
    }

    // create a new Bitmap with dimensions for the thumbnail.
    System.Drawing.Bitmap newBitmap = new System.Drawing.Bitmap(newWidth, newHeight);

    // Copy the image from the START Bitmap into the NEW Bitmap.
    // This will create a thumnail size of the same image.
    newBitmap = ResizeImage(startBitmap, newWidth, newHeight);

    // Save this image to the specified stream in the specified format.
    newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);

    // Fill the byte[] for the thumbnail from the new MemoryStream.
    ReturnedThumbnail = NewMemoryStream.ToArray();
    }
    // return the resized image as a string of bytes.
    return ReturnedThumbnail;
    }

    ReplyDelete

Post a Comment