开发者

ASP.NET: get height and width of an image [duplicate]

This question already has answers here: System.Drawing in Windows or ASP.NET services (5 answers) Closed 6 years ago.

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜