Получение высоты и ширины изображения при сохранении изображения в базе данных - PullRequest
3 голосов
/ 19 марта 2009

Я сохраняю свои изображения в базе данных SQL Server с ASP.NET (2.0).

(imageData -> image) (imageType -> varchar) (imageLength -> bigint)

Таким образом, imageData будет «Двоичные данные», а imageType будет как «image / gif», а imageLength будет как «6458» .......

Можно ли получить изображение ВЫСОТА и ШИРИНА из моего кода VB.NET внутри моего ASP.NET? Я хочу, чтобы размер моей графической рамки на веб-сайте соответствовал размеру фактического изображения, сохраненного в моей базе данных.

С уважением Etienne

Ответы [ 6 ]

9 голосов
/ 19 марта 2009

Если у вас есть данные в потоке:

System.Drawing.Image.FromStream(yourStream).Height

Вы, вероятно, лучше делаете это, когда сохраняете изображение в БД, так как я уверен, что загрузка объекта изображения не будет дешевой.

Редактировать

Если мы примем это по электронной почте, то у следующего парня с этой проблемой не будет записи о нашем решении. Давайте пока оставим это на форуме.

Точно так же мы знаем, что я разработчик на C #, поэтому я не собираюсь пытаться запомнить синтаксис vb.net, если это проблема, и вам нужна помощь в конвертации, дайте мне знать.

У вас есть предполагаемый читатель IData, который извлекает из вашей БД поле Image или двоичное varbinary и т.д. Вам необходимо загрузить его в объект, производный от System.IO.Stream. Для наших целей MemoryStream является идеальным выбором, так как для него не требуется резервное хранилище, такое как диск.

System.IO.MemoryStream yourStream = new System.IO.MemoryStream(dr["imgLength"] as byte[]);
System.Drawing.Image yourImage=System.Drawing.Image.FromStream(yourStream);

yourImage.Height;
yourImage.width
2 голосов
/ 19 марта 2009

Вы можете получить высоту и ширину, но вам нужно будет загрузить все изображение в память, используя библиотеку system.drawing.image, каждый раз, когда вам нужна эта информация.

Лучше сохранить его как отдельные поля при первом сохранении его в базе данных, как правило, это то, что я делаю.

2 голосов
/ 19 марта 2009

Я бы сохранял высоту и ширину изображения в отдельных столбцах, когда вы изначально сохраняете изображение в базе данных. Затем, когда вы выполняете оператор select для считывания изображения из базы данных, вы также можете получить доступ к полям высоты и ширины из базы данных.

В качестве альтернативы вы можете получить доступ к информации о высоте и ширине, когда вы загружаете изображение из базы данных, а затем задаете свойства высоты и ширины, прежде чем назначить изображение для поля изображения.

0 голосов
/ 20 марта 2013
Dim mobj_wc As New System.Net.WebClient
Dim obj_BookOriginalImage As System.Drawing.Bitmap
Dim ImageInBytes() As Byte = mobj_wc.DownloadData(mstr_BookURL & mds_BookDetails.Tables(0).Rows(0).Item("BookImage"))

'CREATE A MEMORY STREAM USING THE BYTES
Dim ImageStream As New IO.MemoryStream(ImageInBytes)
obj_BookOriginalImage = New System.Drawing.Bitmap(ImageStream)
mint_ImageWidth = obj_BookOriginalImage.Width
0 голосов
/ 06 августа 2009

Я твердо верю, что после нескольких сотен гигабайт изображений вы обнаружите, что думаете, что файловая система и статические файловые http-серверы лучше подходят, чем базы данных для хранения изображений. Он также позволяет использовать тысячи существующих бесплатных инструментов для работы, перемещения, размещения и т. Д. Изображений. Ваша база данных может быть занята, и кластеризовать ее нелегко.

0 голосов
/ 19 марта 2009

Похоже, вы хотите еще 2 поля в вашей базе данных, высота и ширина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...