nixp.ru v3.0

23 января 2017,
понедельник,
11:33:17 MSK

DevOps с компанией «Флант»
slv написал 2 августа 2008 года в 05:53 (302 просмотра) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 2 комментария на сайте.

У меня на сайте (пишу на php) есть возможность вставлять в камментарии картинки тегами [ img ]radikal.ru/123.jpg[ /img ] и возникла проблема с большими разрешениями, никто ведь не запрещает вставить картинку 1600х1200, со всеми вытекающими последствиями для дизайна, какие есть способы ограничить размеры?

Дмитрий Шурупов

Можно ведь получить размеры удаленной картинки. Ну, а далее — варианты:

1) Ругаться на пользователя, что он вставляет слонов.

2) Добавлять насильные width=, height= в HTML (пропорциональные оригинальным размерам).

3) Придумать что-нибудь новенькое и интересное :-) — например, с помощью imagemagick/gdlib/… отмасштабировать картинку, сохранить на своем сервере и показывать уже ее.

Dmitry Shurupov
Можно ведь получить размеры удаленной картинки

это будет тормозить скрипт, но все же интересно как это реализуется на пхп.

Dmitry Shurupov
Добавлять насильные width=, height= в HTML (пропорциональные оригинальным размерам).

наверное это будет самый оптимальный вариант, вот накатал скриптик:

<img border=«0» id=«i1217675751» onload="</p><p> var s=getElementById(’i1217675751\′);</p><p> var w=s.width;</p><p> var h=s.height;</p><p> var wr=screen.width-590;</p><p> var hr=screen.height-590;</p><p> if(wr<435){wr=435;}</p><p> if(w>h||w==h){</p><p> if(w>wr){</p><p> this.width=wr;this.height=h/(w/wr);</p><p> }</p><p> }</p><p> if(w<h){</p><p> if(h>hr){</p><p> this.height=hr;this.width=w/(h/hr);}</p><p> }</p><p>» src=«1.jpg»>

только он в ИЕ и файерфоксе работает, а в Опере — нет. Где тут ошибка?

Дмитрий Шурупов

Вот это лишнее:

var s=getElementById('i1217675751');
 var w=s.width;
 var h=s.height;

Логично не создавать никакую s, а делать сразу:

var w=this.width;
 var h=this.height;

У меня работает в Opera 9.50 Linux, сборка 2042.

да все уже разбрался, вынес в отдельную функцию, теперь все пашет:

function resize_image(arg){
 var s=document.images[arg];
 var w=s.width;
 var h=s.height;
 var wr=screen.height*(4/3)-590;
 var hr=screen.height-590;
 if(wr<435)wr=435;
 if((w>h||w==h)&&(w>wr)){
   s.width=wr;s.height=h/(w/wr);
   }
 if((whr)){
   s.height=hr;s.width=w/(h/hr);
  }
}
ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.