Playing with Images
Hello friends, in this article we are going to learn a few things related to images and file upload control. I have divided this article into 3 sections. This article is for complete beginners who are working with the File Upload control and images and want to know about the following points:
- Finding the height and width of an Image.
- Appending a timestamp with the image name while saving it.
- Adding a watermark on an image while uploading it.
First before looking at the code, this is how my sample page looks:
Image of my Sample Application
Explanation
1. Finding the height and width of an image
Sometimes in our application we can allow our users to upload their images. And sometimes we want them to upload an image of a specific dimension. For example - 450x900. Hence the following is the code for finding the height and width.
Code to check the height and width of an image
Default.aspx page code
The following is the code for the Default.aspx page:
- <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
- </asp:Content>
- <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
- <h2>
- Welcome to ASP.NET!
- </h2>
- <p>
- Please Select an Image file:
- <asp:FileUpload ID="FUP_WatermarkImage" runat="server" />
- </p>
- <p>
- <asp:Button ID="btnUpload" runat="server" Text="Upload Image" onclick="btnUpload_Click" />
- </p>
- <p>
- <asp:Image ID="imgUploadedImage" runat="server" Width="250" Height="250" BorderColor="Black" BorderStyle="Solid" BorderWidth="1" />
- </p>
- </asp:Content>
Note: Please note that in the ASP.Net Image control I have kept the width and height as 250 for both. So in my code I am going to check whether the image height and width exceeds 250*250 dimension. If it does then I'll show an error message to the user and won't allow him to upload that image.
- protected void btnUpload_Click(object sender, EventArgs e)
- {
- if (Fupload_WatermarkImage.HasFile)
- {
- string FileType = Path.GetExtension(Fupload_WatermarkImage.PostedFile.FileName).ToLower().Trim();
-
- if (FileType != ".jpg" && FileType != ".png" && FileType != ".gif" && FileType != ".bmp")
- {
- string alert = "alert('File Format Not Supported. Only .jpg, .png, .bmp and .gif file formats are allowed.');";
- ScriptManager.RegisterStartupScript(this, GetType(), "JScript", alert, true);
- }
- else
- {
-
- System.Drawing.Image UploadedImage = System.Drawing.Image.FromStream(Fupload_WatermarkImage.PostedFile.InputStream);
-
- if (UploadedImage.PhysicalDimension.Width > 250 || UploadedImage.PhysicalDimension.Height > 250)
- {
- string alert = "alert('Image size should be exactly 250*250 dimension. Your Current Image width is " + UploadedImage.PhysicalDimension.Width + " and height is " + UploadedImage.PhysicalDimension.Height + ".');";
- ScriptManager.RegisterStartupScript(this, GetType(), "JScript", alert, true);
- }
- else
- {
-
- }
- }
- }
- }
User tries to upload image with a dimension of more than 250 pixels
Image indicating the width of the uploaded image
The following image shows indicating the width of the uploaded image:
Image indicating the height of the uploaded image
The following image shows indicating the height of the uploaded image:
Error message shown to the user
The following image shows the error message shown to the user:
2. Appending a timestamp with the image name while saving it
Sometimes a user might add an image with the same name twice. So in that case if you want to differentiate between the images then you can attach the current timestamp with the image name. The following is the code for doing that.
-
- string FileName = Path.GetFileNameWithoutExtension(Fupload_WatermarkImage.PostedFile.FileName);
-
- string FileExtension = Path.GetExtension(Fupload_WatermarkImage.PostedFile.FileName);
-
- string path = "Watermarked Images/" + FileName + DateTime.Now.ToString("yyyy-MM-dd HHmmtt") + FileExtension;
-
- Fupload_WatermarkImage.SaveAs(Server.MapPath(path));
-
- imgUploadedImage.ImageUrl = path;
-
- if (!String.IsNullOrEmpty(imgUploadedImage.ImageUrl))
- {
-
- string alert = "alert('Image uploaded successfully');";
- ScriptManager.RegisterStartupScript(this, GetType(), "JScript", alert, true);
- }
Note: You can easily understand the code, since I have added appropriate comments with each line of my code. The line of code marked in yellow is where I am attaching my current timestamp with the image name.
Selected an image with a height and width less than 250 pixels
The following is the image which shows how exactly the image is saved.
Code Debugged
The following is the debugged code:
The current time is attached with the image name. So the next time, even if I upload the an image with the same name, I can still upload it since the timestamp differentiates it.
Final Output - Image being displayed in the Image Control
The following shows the final output; the image being displayed in the Image Control:
Image uploaded in the folder
The following shows the image uploaded to the folder:
3. Watermarking the Image
Sometimes when we add images from our application, we do not want anyone else to copy it or use it in their application. Hence the watermark is the option which helps to protect our images from getting copied or used by other users. The following is the code written to add a watermark on the image before saving it in the folder.
Code for watermarking: The content marked in yellow actually writes / watermarks the image.
-
- System.Drawing.Image image = System.Drawing.Image.FromStream(Fupload_WatermarkImage.PostedFile.InputStream);
- int width = image.Width;
- int height = image.Height;
- System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height);
- System.Drawing.Graphics graphics1 = System.Drawing.Graphics.FromImage((System.Drawing.Image)bmp);
- graphics1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- graphics1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- graphics1.Clear(System.Drawing.Color.Transparent);
- graphics1.DrawImage(image, 0, 0, width, height);
- System.Drawing.Font font = new System.Drawing.Font("Arial", 20);
- System.Drawing.SolidBrush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Aqua);
- graphics1.DrawString("C Sharp Corner", font, brush, 25F, 115F);
- System.Drawing.Image newImage = (System.Drawing.Image)bmp;
- string FileName = Path.GetFileNameWithoutExtension(Fupload_WatermarkImage.PostedFile.FileName);
- string FileExtension = Path.GetExtension(Fupload_WatermarkImage.PostedFile.FileName);
- string path = "Watermarked Images/" + FileName + DateTime.Now.ToString("yyyy-MM-dd HHmmtt") + FileExtension;
- newImage.Save(Server.MapPath(path));
- imgUploadedImage.ImageUrl = path;
- graphics1.Dispose();
- if (!String.IsNullOrEmpty(imgUploadedImage.ImageUrl))
- {
-
- string alert = "alert('Image uploaded successfully');";
- ScriptManager.RegisterStartupScript(this, GetType(), "JScript", alert, true);
- }
Note - For understanding the code, I have added appropriate comments with the code. The content marked in Yellow is the code for adding the watermark.
Final Output of the above Code: The Watermark appears on the image in Cyan (Blue) color. The text is "C# Corner"
Image saved in the folder with watermark
The following shows the image saved in the folder with the watermark:
So this was a simple application where we played with images while uploading them to the folder. Hope you liked it and this article helped you... Don't forget to leave your comments. It always encourages me to move ahead.
If you want to check the entire code, then please find/download the attached code file available with this article.