How to resize an image with .NET
In last article I described how to resize an image using PHP, and somebody asked me to provide same example in .NET. So here is a sample C# code for resizing an image on he fly. Once again I want to mention that it is better to resize an image when it is being saved, so you would not have to resize it on the fly.
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<script runat="server" type="text/C#">
protected void Page_Load(object sender, EventArgs e)
{
try
{
string sFileName = "", ext="Jpeg";
string noImageFilePath = "folder/no_image.jpg"; //What to display if no image found
double new_height = 300, new_width = 300;
if(Request["image_path"].ToString()!="")
{
sFileName = Request.MapPath("/") + Request["image_path"].ToString().Substring(1);
ext = sFileName.Substring(sFileName.LastIndexOf(".")+1);
Response.ContentType = "image/" + ext;
}
if(!File.Exists(sFileName))
{
sFileName = Request.MapPath("/") + noImageFilePath;
Response.ContentType = "image/Jpeg";
}
Bitmap bmp = new Bitmap(sFileName);
double ih = bmp.Height, iw = bmp.Width, temp_height = 0, temp_width = 0, new_height = 0, new_width = 0;
//Values from quarry string for needed height and width
if (Request["h"] != null) new_height = Convert.ToDouble(Request["h"]); else new_height = 300;
if (Request["w"] != null) new_width = Convert.ToDouble(Request["w"]); else new_width = 300;
temp_width = iw; temp_height = ih;
if (iw / ih > new_width / new_height)
{
if (iw > new_width)
{
temp_width = new_width;
temp_height = temp_width * ih / iw;
}
}
else
{
if (ih > new_height)
{
temp_height = new_height;
temp_width = temp_height * iw / ih;
}
}
Bitmap bmp1 = new Bitmap(bmp, Convert.ToInt16(temp_width), Convert.ToInt16(temp_height));
//type text on picture
string s_text="some text";
using(Graphics g = Graphics.FromImage(bmp1))
{
g.DrawString(s_text, new Font("tahoma", 12f), new SolidBrush(Color.Black), new Point(10,10));
}
Response.Clear();
Response.ContentType = "image/png";
using(MemoryStream stream = new MemoryStream())
{
if (ext == "png") {bmp1.Save(stream, ImageFormat.Png);}
else if(ext == "gif"){bmp1.Save(stream, ImageFormat.Gif);}
else {bmp1.Save(stream, ImageFormat.Jpeg);}
stream.WriteTo(Response.OutputStream);
}
bmp1.Dispose();
bmp.Dispose();
}
catch (Exception ee) { Response.Write(ee.ToString()); }
}
</script>
Michael Pankratov |