ASP.NET: получить высоту и ширину изображения
Были заданы различные вкусы этого вопроса, но я еще не нашел правильного ответа.
Скажем, у меня есть изображение .jpg на файловом сервере и что мне нужно получить его высоту и ширину. Как это сделать в asp.net?
Я видел несколько ответов, которые предлагают сделать что-то вроде этого:
System.Drawing.Image image=System.Drawing.Image.FromFile(PicturePath);
int ActualWidth=image.Width;
int ActualHeight=image.Height;
image.Dispose();
Это будет работать отлично, за исключением того, что классы в пространстве имен System.Drawing не поддерживаются для использования в службе ASP.NET.
Итак, как вы получаете фактическую высоту и ширину изображения в ASP.net?
Ответы
Ответ 1
добавить элемент управления на стороне сервера на 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 = "";
Ответ 2
Чтобы избежать использования пространства имен System.Drawing:
Для GIF высота и ширина - это 4-байтовые целые числа, найденные в заголовке файла. (Адрес 0x12 для ширины, 0x16 для высоты)
Для JPG вы можете попробовать написать такую функцию, как найденная здесь: http://www.64lines.com/jpeg-width-height
Он передает JPG в виде массива данных и получает высоту и ширину.
Ответ 3
Помогите
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
Вы можете использовать класс "bitmap".
С#
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
Ответ 5
Это говорит Сервис, а не Приложение. Это будет работать нормально.
Ответ 6
Я преобразовал код С++ в С# для справки в будущем:
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);
}
}
Ответ 7
Импортирует 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='' />"
Ответ 8
У меня были изображения в списке в виде 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);
Я надеюсь, что это поможет вам
Ответ 9
Импортирует 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
Ответ 10
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