已经问过这个问题的各种风格,但我还没有找到正确的答案。
假设我在文件服务器上有一个.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中获得图像的实际高度和宽度?
答案 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