ASP.NET: get height and width of an image [duplicate]
Various flavours of this question have been asked but I haven't found a correct answer yet.
Say i have an .jpg image on the file server and that I need to get its height and width. How do I do it in asp.net?
I've seen a few answers which suggests to do something like this:
System.Drawing.Image image=System.Drawing.Image.FromFile(PicturePath);
int ActualWidth=image.Width;
int ActualHei开发者_如何学JAVAght=image.Height;
image.Dispose();
This would work fine except that classes within the System.Drawing namespace are not supported for use within an ASP.NET service.
So, how do you get the actual height and width of an image in ASP.net?
add an server side image control on the aspx
<asp:image ID="img1" runat="server" src="" />
and on the code behind give it a src
img1.src = System.Drawing.Image.FromFile(PicturePath);
int ActualWidth = img1.Width;
int ActualHeight = img1.Height;
img1.src = "";
You can use the "bitmap" class.
C#
Bitmap bitmap = new Bitmap(filepath);
int iWidth = bitmap.Width;
int iHeight = bitmap.Height;
VB
Dim bitmap As New Bitmap(filepath)
Dim iWidth As Integer = bitmap.Width
Dim iHeight As Integer = bitmap.Height
May this help
string lPath = Server.MapPath("~\\Images1\\") + dsProd.Tables[0].Rows[i]["Image1"].ToString();
Image1.ImageUrl = "Images1\\" + dsProd.Tables[0].Rows[i]["Image1"].ToString();
Image2.ImageUrl = "Images1\\" + dsProd.Tables[0].Rows[i]["Image2"].ToString();
string currentImagePath = lPath.ToString();// Session["FullImagePath"] + "\\" + GetCurrentFileName();
Bitmap bmp = new Bitmap(currentImagePath);
int iActualWidth=0,iActualHeight=0;
for (int j = 1; j <= 100; j++)
{
if ((bmp.Width / j) > 150)
{
iActualWidth = bmp.Width / j;
iActualHeight = bmp.Height / j;
}
else
{
break;
}
}
Image1.Height = new Unit(iActualHeight);
Image1.Width = new Unit(iActualWidth);
That says Service, not Application. That will work just fine.
I've converted C++ code to C# for future reference:
static bool get_jpeg_size(byte[] data, int data_size, ref int width, ref int height)
{
//Check for valid JPEG image
int i = 0; // Keeps track of the position within the file
if (data[i] == 0xFF && data[i + 1] == 0xD8 && data[i + 2] == 0xFF && data[i + 3] == 0xE0)
{
i += 4;
// Check for valid JPEG header (null terminated JFIF)
if (data[i + 2] == 'J' && data[i + 3] == 'F' && data[i + 4] == 'I' && data[i + 5] == 'F' && data[i + 6] == 0x00)
{
//Retrieve the block length of the first block since the first block will not contain the size of file
var block_length = data[i] * 256 + data[i + 1];
while (i < data_size)
{
i += block_length; //Increase the file index to get to the next block
if (i >= data_size) return false; //Check to protect against segmentation faults
if (data[i] != 0xFF) return false; //Check that we are truly at the start of another block
if (data[i + 1] == 0xC0)
{ //0xFFC0 is the "Start of frame" marker which contains the file size
//The structure of the 0xFFC0 block is quite simple [0xFFC0][ushort length][uchar precision][ushort x][ushort y]
height = data[i + 5] * 256 + data[i + 6];
width = data[i + 7] * 256 + data[i + 8];
return true;
}
else
{
i += 2; //Skip the block marker
block_length = data[i] * 256 + data[i + 1]; //Go to the next block
}
}
return false; //If this point is reached then no size was found
}
else { return false; } //Not a valid JFIF string
}
else { return false; } //Not a valid SOI header
}
USAGE:
using (var stream = File.OpenRead(path))
{
using (var m = new MemoryStream())
{
stream.CopyTo(m);
var arr = m.ToArray();
int w = 0, h = 0;
get_jpeg_size(arr, arr.Length, ref w, ref h);
Console.WriteLine(w + "x" + h);
}
}
Imports iTextSharp.text
just the tools used when creating a pfd.
Dim URel As String
URel = "https://......."
Dim pic As iTextSharp.text.Image
pic = iTextSharp.text.Image.GetInstance(URel)
Dim sizee As String
sizee = pic.Height
SOURR = "<img src='" & URel & "' alt='' />"
I had my images in a listview as an ImageButton and i needed their width and height so i found the solution here: http://forums.asp.net/t/1262878.aspx?how+to+get+the+image+width+and+height+argh
and its my working code:
ListViewItem item = e.Item;
ImageButton img = item.FindControl("img") as ImageButton;
FileStream fs = new FileStream(MapPath(img.ImageUrl) , FileMode.Open, FileAccess.Read, FileShare.Read);
System.Drawing.Image dimg = System.Drawing.Image.FromStream(fs);
int width = Convert.ToInt32(dimg.Width);
int height = Convert.ToInt32(dimg.Height);
I hope it helps you
Imports System.Drawing.Image, System.IO
Dim image As System.Drawing.Image
image = image.FromFile([filepath])
If image.Width > 440 Or image.Height > 440 Then
'show resized
else
'leave as is
end if
Imports System.IO
Imports System.Drawing
Dim sFile As Stream = fuPhoto2.PostedFile.InputStream
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(sFile)
If img.PhysicalDimension.Width > 700 And img.PhysicalDimension.Height > 300 Then
strPhotoName = fuPhoto2.FileName
fuPhoto2.SaveAs(Server.MapPath("~/Images/") +
fuPhoto2.FileName)
Else
lblErrMeg2.Text = "Image size must be greater than 700 X 300!"
fuPhoto2.Focus()
Exit Sub
End If
精彩评论