Solved

resize image

Posted on 2011-09-23
19
290 Views
Last Modified: 2012-05-12
http://www.telerik.com/community/forums/aspnet/upload/how-to-resize-image.aspx

I have this link but on that I can't keep same aspect ratio same. What I need to do?
0
Comment
Question by:1jaws
19 Comments
 
LVL 25

Accepted Solution

by:
Shaun Kline earned 250 total points
Comment Utility
To keep the aspect ratio, you would need to calculate the change on one of the dimensions and apply that change to the other dimension. I.e. divide the new width for the image by the original width of the image. Then multiply this value to the original height of the image.
0
 

Author Comment

by:1jaws
Comment Utility
thank you for replying.. is it possible to show that how I might be able to do that?
0
 
LVL 8

Assisted Solution

by:PeteEngineer
PeteEngineer earned 125 total points
Comment Utility

public static Size ProportionalSize(Size imageSize, Size MaxW_MaxH)
            {
                double multBy= 1.01;
                double w= imageSize.Width;   double h= imageSize.Height;

                while(w < MaxW_MaxH.Width && h < MaxW_MaxH.Height)
                {
                    w= imageSize.Width*multBy;
                    h= imageSize.Height*multBy;
                    multBy= multBy+.001;
                }

                while(w > MaxW_MaxH.Width || h > MaxW_MaxH.Height)
                {
                    multBy= multBy-.001;
                    w= imageSize.Width*multBy;
                    h= imageSize.Height*multBy;
                }

                if(imageSize.Width < 1)
                    imageSize=new Size(imageSize.Width+-imageSize.Width+1, imageSize.Height-imageSize.Width-1);
                if(imageSize.Height < 1)
                    imageSize=new Size(imageSize.Width-imageSize.Height-1, imageSize.Height+-imageSize.Height+1);

                imageSize= new Size(Convert.ToInt32(w), Convert.ToInt32(h));
                return imageSize;
            }

Open in new window

0
 

Author Comment

by:1jaws
Comment Utility
I have this code and how I need to put above code to this?
public bool ThumbnailCallback()  
{  
    return false;  
}  
 
//Create a thumbnail  
public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)  
{  
    System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);  
    using (Bitmap originalImage = new Bitmap(imageStream))  
    {  
        using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, height, thumbnailImageAbortDelegate, IntPtr.Zero))  
        {  
            thumbnail.Save(fileName);  
        }  
    }  
}  
 
 
private void Button1_Click(object sender, System.EventArgs e)  
{  
    Telerik.WebControls.UploadedFile file = RadUpload1.UploadedFiles[0];  
    string targetFolder = "c:\\temp\\";  
    string suffix = "_thumb";  
    CreateThumb(  
            targetFolder +   
            string.Concat(file.GetNameWithoutExtension(), suffix, file.GetExtension()), file.InputStream,  
            300,   300);  
}

Open in new window

0
 
LVL 25

Expert Comment

by:Shaun Kline
Comment Utility
Using the code from the example...

Note: you could use either the passed in width or height parameter to determine the aspect ratio.
public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)  
{  
    System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);  
    using (Bitmap originalImage = new Bitmap(imageStream))  
    {  
        int newHeight = originalImage.Height * (newWidth / originalImage.Width);
        using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))  
        {  
            thumbnail.Save(fileName);  
        }  
    }  
}

Open in new window

0
 

Author Comment

by:1jaws
Comment Utility
says newWidth doest exist in the context
0
 

Author Comment

by:1jaws
Comment Utility
int newWidth = originalImage.Width;
0
 

Author Comment

by:1jaws
Comment Utility
I put above didnt work...
0
 

Author Comment

by:1jaws
Comment Utility
Shaun_Kline, I cant get this to work, we are in right direction but actually don't know how to make this code work for me...that my size of photos automatically will size to 300x300 without changing the aspect radio...Can you be able to paste the working code, if possible?
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 25

Expert Comment

by:Shaun Kline
Comment Utility
Instead of newWidth, use the passed in parameter: width.
0
 

Author Comment

by:1jaws
Comment Utility
what do you mean? use like that? instead of width.. I am totally confused here

int newHeight = originalImage.Height * (width / originalImage.Width);
0
 

Author Comment

by:1jaws
Comment Utility
or like this?

int newHeight = originalImage.Height * (300 / originalImage.Width);
0
 

Author Comment

by:1jaws
Comment Utility
that is not working..
0
 

Author Comment

by:1jaws
Comment Utility
PeteEngineer, couldnt even get your code working either.. it complians about Size, saying are you missing  references...
0
 
LVL 13

Assisted Solution

by:jonnidip
jonnidip earned 125 total points
Comment Utility
Try this method:
void ResizeImage(String InputFileName, Int32 MaxWidth, Int32 MaxHeight, String ThumbnailFileName)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Int32 NewWidth = 300;
                Int32 NewHeight = -1;

                #region Resize
                using (System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(InputFileName))
                {
                    if (FullsizeImage.Width <= NewWidth)
                        NewWidth = FullsizeImage.Width;

                    NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
                    if (NewHeight > MaxHeight)
                    {
                        // Resize with height instead
                        NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
                        NewHeight = MaxHeight;
                    }

                    // Save resized picture
                    using (System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero))
                        NewImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                #endregion

                ms.Position = 0;

                #region Write thumbnail file
                if (!Directory.Exists(Path.GetDirectoryName(ThumbnailFileName)))
                    Directory.CreateDirectory(Path.GetDirectoryName(ThumbnailFileName));
                FileInfo fi = new FileInfo(ThumbnailFileName);
                File.WriteAllBytes(ThumbnailFileName, ms.GetBuffer());
                #endregion
            }
        }

Open in new window


Regards.
0
 

Author Comment

by:1jaws
Comment Utility
thank you for replying, but I am really getting this figure it out based on that code I posted... if this is possible can you paste the working code, cause I am not succesfull on getting it working yet...
0
 
LVL 25

Assisted Solution

by:Shaun Kline
Shaun Kline earned 250 total points
Comment Utility
This is the code using the width parameter that is passed into the function.
If this does not work and errors out, provide the error message. If the image does not display correctly, provide a screen capture and explain why it isn't working (i.e. how is the image distorted).
public void CreateThumb(string fileName, System.IO.Stream imageStream, int width, int height)  
{  
    System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);  
    using (Bitmap originalImage = new Bitmap(imageStream))  
    {  
        int newHeight = originalImage.Height * (width / originalImage.Width);
        using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))  
        {  
            thumbnail.Save(fileName);  
        }  
    }  
}

Open in new window

0
 

Author Comment

by:1jaws
Comment Utility
 using (System.Drawing.Image thumbnail = originalImage.GetThumbnailImage(width, newHeight, thumbnailImageAbortDelegate, IntPtr.Zero))

this line gives error saying Out of Memory..

when I debugged I see new height = 0
0
 

Author Comment

by:1jaws
Comment Utility
I no longer need this questions answer... Thanks for all the efforts to all!!
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
c# code 19 56
Create a form which is copy of a form in vb.net 2 17
String manipulation 15 49
fomat Json objects 6 15
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now