Программно установить высоту/ширину изображения из базы данных

У меня возникают проблемы с постоянной установкой ширины и высоты тега img. img src динамически извлекается из базы данных. Изображения, извлекаемые из базы данных, могут иметь различную ширину и высоту, поэтому мне нужно установить элемент управления img. Иногда ширина и высота установлены правильно, а иногда нет. Я не могу понять, почему. Любая помощь будет принята с благодарностью. Спасибо!

Вот что я делаю сейчас.

try
    {
        byte[] byteArray = GetImage();
        using (Bitmap bmp = ByteArrayToBitmap(byteArray))
        {
            //image is the img tag.
            image.Style["width"] = bmp.Width.ToString();
            image.Style["height"] = bmp.Height.ToString();
        }
    }
    catch (Exception ex)
    { }

РЕДАКТИРОВАТЬ: это проблема только в IE. Chrome и Firefox работают нормально. Кроме того, когда IE7 не отображает изображение с правильной высотой/шириной, если браузер обновляется, оно отображается правильно. Иногда...


person SquidScareMe    schedule 07.02.2009    source источник
comment
Значения ширины и высоты иногда отсутствуют в html? Или тогда иногда ошибаются?   -  person Kevin Tighe    schedule 07.02.2009
comment
Попробуйте поместить какой-нибудь код ведения журнала в свой блок catch, чтобы увидеть, получаете ли вы исключение.   -  person Cal    schedule 07.02.2009
comment
Значения Tighe-height и width правильно установлены в теге img, но высота и ширина изображения, похоже, на самом деле не установлены на эти значения. Например, у меня есть изображение, которое должно быть шире, чем в высоту, и это в html style=width:450;height:240; но он выше, чем в длину.   -  person SquidScareMe    schedule 07.02.2009
comment
Что интересно в моем предыдущем комментарии, так это то, что последнее загруженное изображение было выше, чем длина...   -  person SquidScareMe    schedule 07.02.2009
comment
Кэл - Спасибо за предложение. Я много раз просматривал исполняемый код и еще не попал в блок catch, но это все еще может быть хорошей идеей. Спасибо.   -  person SquidScareMe    schedule 07.02.2009
comment
Вы пытались добавить тип значения в атрибут стиля. Например, 450 пикселей;   -  person Andy Hume    schedule 07.02.2009
comment
Энди – Спасибо, но я попробовал это, и ничего не изменилось. Иногда кажется, что он помнит старые значения высоты и ширины из ранее загруженных изображений.   -  person SquidScareMe    schedule 07.02.2009
comment
Хм, у вас есть уникальный URL-адрес изображения для каждого изображения? Ваш комментарий о том, что он, кажется, помнит старую высоту и ширину, вызывает у меня подозрения...   -  person Zhaph - Ben Duguid    schedule 10.02.2009
comment
Привет, Заф. У меня нет уникального URL для каждого изображения. Изображения обслуживаются обработчиком ashx, который извлекает изображение из базы данных. В строке запроса я передаю обработчику уникальный идентификатор для идентификации каждого изображения. В основном URL тот же, но меняется параметр строки запроса.   -  person SquidScareMe    schedule 10.02.2009


Ответы (2)


Это потому, что вам нужно удалить атрибуты ширины и высоты тега. Просто изменить значения ширины и высоты изображения CSS не получится.

Попробуйте что-то вроде этого, это в Javascript;


imageTag.removeAttribute('width');
imageTag.removeAttribute('height');
person Gary Green    schedule 07.02.2009
comment
Спасибо за попытку, но это не сработало. Я сделал, как вы сказали в отделенном коде в Page_PreInit(). - person SquidScareMe; 07.02.2009
comment
Вы пробовали делать это каждый раз при загрузке нового изображения? Попробуйте выполнить отладку и выяснить, что именно возвращает база данных, и есть ли какая-либо закономерность, когда она не работает. - person Gary Green; 08.02.2009

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

Пример здесь... http://www.west-wind.com/Weblog/posts/283.aspx

person Brandon    schedule 08.02.2009
comment
Хорошая идея, но проблема в том, что изображения имеют разное соотношение высоты и ширины. Если я изменю размер до высоты и ширины, которые я выберу, я рискую исказить изображение. Нет универсального размера, до которого я могу их изменить. - person SquidScareMe; 08.02.2009
comment
Хотя это нормально - вы можете определить максимальную ширину ИЛИ высоту, а затем вычислить максимальный размер, который вы можете сделать, пока он не будет соответствовать требованиям к высоте или ширине. Затем просто найдите % между исходным и вашим конечным номером и уменьшите размер другого измерения. Хотите пример кода? - person Brandon; 08.02.2009
comment
+1 - Это сэкономит вам пропускную способность и создаст более качественные изображения меньшего размера, чем оригинал. Браузер не использует анизотропную фильтрацию или какой-либо другой метод изменения размера изображения, поэтому оно будет выглядеть паршиво. Тривиально создать HttpHandler, который может изменять размер изображения и поддерживать соотношение сторон. - person Ben Scheirman; 09.02.2009
comment
IE7 может выполнять анизотропное изменение размера, если вы укажете ему: изменение размера изображения/" rel="nofollow noreferrer">code.flickr.com/blog/2008/11/12/ - person Zhaph - Ben Duguid; 10.02.2009