ASP.NET:获取图像的高度和宽度

时间:2010-01-06 20:59:37

标签: asp.net image

已经问过这个问题的各种风格,但我还没有找到正确的答案。

假设我在文件服务器上有一个.jpg图像,我需要获得它的高度和宽度。我如何在asp.net中完成?

我已经看到了一些答案,建议做这样的事情:

System.Drawing.Image image=System.Drawing.Image.FromFile(PicturePath); 
int ActualWidth=image.Width;
int ActualHeight=image.Height;
image.Dispose();

除了classes within the System.Drawing namespace are not supported for use within an ASP.NET service之外,这样可以正常工作。

那么,如何在ASP.net中获得图像的实际高度和宽度?

10 个答案:

答案 0 :(得分:7)

在aspx上添加服务器端图像控件

<asp:image ID="img1" runat="server" src="" />

并在后面的代码上给它一个src

img1.src = System.Drawing.Image.FromFile(PicturePath);

int ActualWidth = img1.Width;
int ActualHeight = img1.Height;
img1.src = "";

答案 1 :(得分:2)

您可以使用“位图”类。

<强> 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

答案 2 :(得分:1)

避免使用System.Drawing命名空间:

对于GIF,高度和宽度是在文件头中找到的4字节整数。 (地址0x12表示宽度,0x16表示高度)

对于JPG,您可以尝试编写类似于此处的功能:http://www.64lines.com/jpeg-width-height  它将JPG作为数据数组传递,并获得高度和宽度。

答案 3 :(得分:1)

愿这个帮助

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);

答案 4 :(得分:0)

表示服务,而不是应用程序。这样做会很好。

答案 5 :(得分:0)

我已将C ++代码转换为C#以供将来参考:

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
}

用法:

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);
    }
}

答案 6 :(得分:0)

导入iTextSharp.text

创建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='' />"

答案 7 :(得分:0)

我在listview中将我的图像作为ImageButton,我需要它们的宽度和高度,所以我在这里找到了解决方案: http://forums.asp.net/t/1262878.aspx?how+to+get+the+image+width+and+height+argh

及其我的工作代码:

    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);

我希望它可以帮到你

答案 8 :(得分:-1)

导入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

答案 9 :(得分:-1)

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