Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ошибка вычисления image.width (https://javascript.ru/forum/misc/3201-oshibka-vychisleniya-image-width.html)

anikey99 27.03.2009 15:53

ошибка вычисления image.width
 
кто знает в чем отличие между
gg=100
file="http://kachay.ucoz.org/"+gg+".jpg";
и file="http://kachay.ucoz.org/100.jpg";
в первом случае image.width не вычисляется?

Kolyaj 27.03.2009 15:58

Нет никакой разницы.

AzriMan 27.03.2009 16:50

да. теоретически всё должно быть одинаково. и там и там строка..

anikey99 28.03.2009 08:06

тем не менее:
----------------------------------------
<!--
g=Math.round(Math.random()*200000) +1
gg=400000+g
var image = new Image();
//file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/523088.jpg";
file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/"+gg+".jpg";
image.src =file;
w=image.width;
h=image.height;
document.write("Размер фото:"+file+"/"+w +"/"+h);
//-->
------------------------------------------
w=0
h=0
а это не правильно,
если подставлять готовый url, то все работает

Kolyaj 28.03.2009 12:36

Пока картинка не загружена, ее размеры не узнать.
img.onload = function() {
    alert([img.width, img.height]);
};
img.src = file;

anikey9999 29.03.2009 10:40

file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/"+gg+".jpg";
image.src =file; <-- это что по вашему?
w=image.width;
h=image.height;

anikey99999 29.03.2009 10:51

g=Math.round(Math.random()*200000) +1
gg=400000+g
var image = new Image();
file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/523088.jpg";
file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/"+gg+".jpg";
image.src =file;
w=image.width;
h=image.height;
img.onload = function() {
document.write("Размер фото:"+file+"/"+w +"/"+h);
}
-------------
на экране пусто

Kolyaj 29.03.2009 20:04

Цитата:

Сообщение от anikey9999
image.src =file; <-- это что по вашему?

Установка источника картинки. А вы что подумали? Загрузка картинки асинхронно происходит.

Цитата:

Сообщение от anikey99999
на экране пусто

Бред написан, поэтому и пусто.

anikey99999 30.03.2009 17:41

с вашей подачи)
не надо умничать, просто напишите код, если знаете,
при котором у
file="http://www.irk.kp.ru/upimg/38fd25d0148fde2be07a6b7b4f6431b14dc82cf0/"+gg+".jpg"
определяются размеры картинки,
если уж вы подписались под обсуждение этого вопроса

Kolyaj 30.03.2009 17:54

Цитата:

Сообщение от anikey99999
с вашей подачи)

Ну дык не надо писать глупости с умным видом, типа
Цитата:

Сообщение от anikey9999
image.src =file; <-- это что по вашему?

Цитата:

Сообщение от anikey99999
просто напишите код, если знаете

Я уже написал, а у вас все имена переменных перепутаны. И сделайте alert, а не document.write.

anikey999999 30.03.2009 22:14

"Ну дык не надо писать глупости с умным видом, типа"
Я пишу глупости, потому что не разбираюсь в этом вопросе, потому и спрашиваю, в чем мои ошибки.
"сделайте "alert"
мне надо следующее
===========================
image.onload = function() {
alert(this.width+","+this.height);
}
image.src = file;
--------------------------
значения картинки this.width и this.height определяются в alert,
но не работают в конструкции типа
if ((this.width>0)&(this.height>0)) {
document.write(...);
}
========================
как это победить
задача такая, если картинка маленькая или отсутствует - ищем другую
методом случайного перебора (random)

Kolyaj 30.03.2009 22:30

Цитата:

Сообщение от anikey999999
Я пишу глупости, потому что не разбираюсь в этом вопросе, потому и спрашиваю, в чем мои ошибки.

Почувствуйте разницу между
image.src =file; <-- это что по вашему?
и
image.src =file; <-- я же вот здесь устанавливаю
Как почувствуете, вам сразу на форумах отвечать охотнее будут.

Цитата:

Сообщение от anikey999999
как это победить

Нельзя использовать document.write после загрузки страницы, используйте innerHTML.

anikey9999999 31.03.2009 10:50

при чем здесь document.write
если не проходит if ((this.width>0)&(this.height>0)) {
кто-нибудь полный код решения задачи в состоянии прописать?

Valentin Gvozdev 01.04.2009 22:31

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

Т.е. нужно было посмотреть ее реальный размер, вычислить коээфициент уменьшения, и если он >1, то уменьшить размер картинки - вроде бы все просто. Однако несмотря на примитивность задачи, долбался я очень долго - в зависимости от ситуации width получался либо 1, либо соответсвовал предыдущей загруженной картинке, либо еще как (а порой и соотвествовал тому, что надо, но было это совершенно непредсказуемо).
Проблема решилась очень просто. Все вычисления пришлось выполнять в функции, вызываемой по onload картинки. Только так удалось добиться того, что значения ее размеров в свойстве width соответсвуют реальности вне зависимости от браузера, скорости соединения итд. Уверен, что и вашем случае такое пройдет.
Удачи!

Валентин
http://vgvozdev.narod.ru

Kolyaj 01.04.2009 22:38

Цитата:

Сообщение от Valentin Gvozdev
Все вычисления пришлось выполнять в функции, вызываемой по onload картинки. Только так удалось добиться того, что значения ее размеров в свойстве width соответсвуют реальности вне зависимости от браузера, скорости соединения итд.

Потому что по другому невозможно, чисто теоретически.

anikey99999999 03.04.2009 12:07

Все! Удалось решить задачу. Аж, двумя спослбами. Исходники и реализацию можно посмотреть на
http://kachay.ucoz.org/rend_foto_dosug2.htm
http://kachay.ucoz.org/rend_foto_forum2.htm


Часовой пояс GMT +3, время: 22:42.