![]() |
Показаны 28 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- Хаки от Netadmin или "Сделай сам" (http://netadmin.ws/forum/forumdisplay.php?forumid=76)
-- Контроль размера картинок, вставленных тегом Img (http://netadmin.ws/forum/showthread.php?threadid=9516)
Контроль размера картинок, вставленных тегом Img
Вопрос вот в чем, где можно ограничить размеры картинок, вставленных по средствам тега IMG? Т.е. где дается ссылка на картинку. Возможно ли ограничить размеры? Или делать ресайз картинок? Или еще какие есть варианты, чтобы не растягивался скин по размеру картинки?
VB3.0.3
Самое простое решение это запретить показ картинок и вставлять ссылку на них, в противном случае требуеться трудоемкое программирование.
__________________
Всегда есть решение.
А может есть какие хаки для этого написанные? Или можно какие-либо настройки самого скина изменить, чтобы он не менял свой размер, даже если картинка больше его ширины?
Ну можно конечно прописать явно размеры картинки но ведь просто так нельзя узнать исходный размер картинки, поэтому не удасться сохранить пропорции.
__________________
Всегда есть решение.
Dr. Shost да такие хаки имеются:
http://www.vbulletin.org/forum/showthread.php?t=63458
http://www.vbulletin.org/forum/showthread.php?t=68429
http://www.vbulletin.org/forum/showthread.php?t=67743
__________________
yMC.ru - хомяк музыканта
А нельзя только по ширине прописать, а что не влезает, то пусть обрезается что ли..? Главное, чтобы скин не растягивался...
MCTarakan
Спасибо за ссылки, попробую разобраться, что там к чему... Только мне, как не имеющиму статуса зарегенново не показываются все коды на их форуме...
А не можешь поделиться этим хаком?
Чето поспешил я, экспромтом функцию немного переделал.
Вобщем нужно в includes/functions_bbcodeparse.php найти функцию function handle_bbcode_img_match и заменить ее на:
function handle_bbcode_img_match($link)
{
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
$max_width = 250; // указываем максимально допустимую ширину
$max_height = 150; // указываем максимально допустимую высоту
$image_data = getimagesize($link);
$width = $image_data['0'];
$height = $image_data['1'];
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if ($width > $max_width OR $height > $max_height)
{
if (($width*$y_ratio) < $max_width)
{
$width = ceil($y_ratio*$width);
$height = $max_height;
}
else
{
$height = ceil($x_ratio*$height);
$width = $max_width;
}
}
$image_size = " width=\"$width\" height=\"$height\"";
return '<img src="' . $link . '" border="0"' . $image_size .' alt="" />';
}
__________________
Всегда есть решение.
polo
БОЛЬШОЕ СПАСИБО! Очень помог.
Да, действительно, спасибо POLO!
нужная доработка...
__________________
Всё в наших руках.
все классно работает, до тех пор, пока кто то из узеров не пихнет ссылку на несуществующую картинку (в тегах [img]естессно)
или с другим расширением, чем на самом деле (gif вместо jpg, например. хз, как так можно, но было один раз...)
или вообще без расширения...
тогда форум выкидывает ошибку:
Warning: getimagesize(http://ссылка/на/картинку/без расширения): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/htdocs/web/html/forum/includes/functions_bbcodeparse.php on line 1039
Warning: Division by zero in /home/htdocs/web/html/forum/includes/functions_bbcodeparse.php on line 1042
Warning: Division by zero in /home/htdocs/web/html/forum/includes/functions_bbcodeparse.php on line 1043
и указывает на линии хака в файле
страница не загружается полностью, сначала эта ошибка, потом лого, и все... "сообщение форума, бла, бла, бла..."
приходится лезть на фтп, убирать хак, что бы страница загрузилась и потом удалять/редактировать сообщение...
как это можно пофиксить?
Считаю, что IMG код нужно отключать сразу во всех форумах. Исключение могут составлять подписи, да и то, под вопросом. Если возникла неодходимость в fullscreen картинки в сообщениях, то можно использовать стандартную возможность ограничения размера картирки аттача. IMG это зло, IMG нарушает целостность проекта, заставляет его зависить от других серверов.
А как баг исправить то?
Bochkarev_D.S.
я тоже так считаю, но узерам это сложно объяснить...
да и не об этом сейчас речь идет, был задан вопрос, как изменить размер картинки в постах, polo предложил свое решение, ок...
но появились баги, можно попытаться общими усилиями их побороть, а запретить или разрешить никогда не поздно...
--------------
AFGAN
спасибо, что перенес пост сюда...
kerk добавил 24-10-2004 в 18:58:25:
мысль тут одна появилась...
я не очень то разбираюсь в php, поэтому постарайтесь понять меня правильно...
как видно из сообщения, фукция ......getimagesize возвращает нам .....HTTP request failed! HTTP/1.1 404 Not Found in......
т.е. не найдена 404 что бы нам ее показать, если картинки не существует..., а если где то там прописать так, что бы при обращении и ненахождении картинки, возвращало бы 404.
то есть если картинка есть, но большая=> изменяет размер на указанный в коде и показывает картинку, если нету или ссылка введена неправильно=> отображало бы 404 объект не найден и белый квадрат с крестиком
===============================
все как то путанно, но надеюсь, что знающие php, поймут, что я хотел сказать...
не проверял..
навскидку вариант Поло с проверкой на отсутствие картинки
function handle_bbcode_img_match($link )
{
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
$max_width = 250; // указываем максимально допустимую ширину
$max_height = 150; // указываем максимально допустимую высоту
if (fopen($link,"r")===0)
// пробуем открыть на чтение
// если открылся то работаем с картинкой
{
$image_data = getimagesize($link);
$width = $image_data['0'];
$height = $image_data['1'];
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if ($width > $max_width OR $height > $max_height)
{
if (($width*$y_ratio) < $max_width)
{
$width = ceil($y_ratio*$width);
$height = $max_height;
}
else
{
$height = ceil($x_ratio*$height);
$width = $max_width;
}
}
$image_size = " width=\"$width\" height=\"$height\"";
return '<img src="' . $link . '" border="0"' . $image_size .' alt="" />';
}
else
// нету файла
// выводим "а файла то нету"
{
return '<b>Где ка-а-артинка-а-а? Не-е-ет картинки! :( </b>';
}
}
__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru
fStrange
спасибо
проверю, как поставлю форум на локалку заново, обрушил нах, своими экспериментами... 
kerk
неза что..
там ошибка..
проверка неправильно
уже разобрался.. но времени нет исправлю в понедельник..
__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru
НЕЛП!!!
час постучался об стенку и выяснил, что ни фига не получается
мне пришло в голову 3 варианта проверки и все не работают
проверка вида
$fp = @fopen($link,"r");
if (!$fp)
if ($image_data = getimagesize($link))
__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru
fStrange
PHP и ошибка 500?! Ð_азве такое возможно? Ð_то скорее всего глюки сервера Apache.
phprus
Глюк это когда один раз..
но когда регулярно повторяется это уже баг 
могу и скрин бросить...
я же говорю вчера час бился... сначала я думал, что я полный идиот.. как работать с функцией fopen и getimagesize не знаю
__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru
Вот исправленная версия.
function handle_bbcode_img_match($link)
{
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
$max_width = 250; // указываем максимально допустимую ширину
$max_height = 150; // указываем максимально допустимую высоту
$image_data = @getimagesize($link);
if (!empty($image_data))
{
$width = $image_data['0'];
$height = $image_data['1'];
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if ($width > $max_width OR $height > $max_height)
{
if (($width*$y_ratio) < $max_width)
{
$width = ceil($y_ratio*$width);
$height = $max_height;
}
else
{
$height = ceil($x_ratio*$height);
$width = $max_width;
}
}
$image_size = " width=\"$width\" height=\"$height\"";
}
return '<img src="' . $link . '" border="0"' . $image_size . ' alt="" />';
}
__________________
Всегда есть решение.
polo
я тут нашел более "утяжеленный" вариант, с такими настройками, как и хотел,
размер указывается только по ширине, в сообщении появляется уменьшенное кликабельное изображение с надписью внизу: "кликнуть здесь, для просмотра оригинала"
========
при вставке в теги [img] ссылку с неверным расширением или без расширения, в посте получаем маленькое окошко с текстом "Link is Broken" (настраивается, можно например предупредить узера, что бы указывал правильный линк)
в случае отсутствия картинки на сервере, получаем окошко "not found" (так же настраивается, можно написать "404 не найдено" )
в случае обращения к серверу и он не отвечает, получаем: "Server is Down"
========
поставил на локалке, все работает пока...
но уж больно много исправлений и дополнений нужно делать
возможно ли облегчить?
хотя автор этого хака не убирает оригинальные строки кода, а только делает их закоментированными, ниже подставляя свой код
========
что интересно, можно указать совсем маленький размер картинки (почти тоже самое, что реализовано в vB 3.0.3 с кликабельными картинками в аттачах) и она так и будет отображаться, но вот размер в KB такой же и останется...
========
если интересно, поковыряй, скажи свое мнение...
хак прикреплю в этом сообщении
kerk хак действительно довольно сложный проще в хак polo добавить несколько строк
function handle_bbcode_img_match($link)
{
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
$max_width = 400; // указываем максимально допустимую ширину
$max_height = 200; // указываем максимально допустимую высоту
$space = 5; // указываем максимально допустимое свободное пространство вокруг картинки
$origin = '';
$image_data = @getimagesize($link);
if (!empty($image_data))
{
$width = $image_data['0'];
$height = $image_data['1'];
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if ($width > $max_width OR $height > $max_height)
{
if (($width*$y_ratio) < $max_width)
{
$width = ceil($y_ratio*$width);
$height = $max_height;
}
else
{
$height = ceil($x_ratio*$height);
$width = $max_width;
}
$origin = '<br /><div class="smallfont"><a href="' . $link . '" target="_blank">Открыть в новом окне</a></div>';
}
$image_size = " width=\"$width\" height=\"$height\" hspace=\"$space\" vspace=\"$space\"";
return '<a href="' . $link . '" target="_blank"><img src="' . $link . '" border="0"' . $image_size . ' alt="Картинка расположена на другом сервере" /></a>' . $origin;
}
else
{
return '<img src="' . $stylevar['imgdir_misc'] . '/404.gif" alt="404 Object not found" width="104" height="81" border="0" />';
}
}
снес тот, что поставил раньше, потому как все равно ошибки вылетают, если в теме много картинок, да даже если теги отключены в этом разделе, но узер постит фотку, заключая ее в теги - вылетает ошибка (не долго продержался этот хак)...
Konkere
поставил твой вариант, теперь вообще ничего не показывает
в коде хака есть упоминание о том, что 404-ю гифку нужно пихнуть в дир. images/misc форума, но путем экспериментов удалось выяснить, что показывает этот гиф только если он лежит в корне форума
вот только его и показывает....
сам реальный рисунок существует, но его не показывает, наверное где то ошибка...
самому сложно разобраться в этом, ну никак мне пхп не дается... =))
kerk добавил 24-03-2005 в 04:45:47:
нашел еще одно решение проблеммы, тоже не очень много изменять в коде:
function handle_bbcode_img_match($link)
{
global $vboptions;
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
if ($vboptions['legacypostbit'])
{
return '<a href=' . $link . ' target="_blank"><img src="' . $link . '" onload="if(screen.width-600 < this.width) {this.width=screen.width-600;this.alt='Full View';}" onmouseover="if(this.alt) this.style.cursor='hand';" border="0"></a>';
}
else
{
return '<a href=' . $link . ' target="_blank"><img src="' . $link . '" onload="if(screen.width-80 < this.width) {this.width=screen.width-80;this.alt='Full View';}" onmouseover="if(this.alt) this.style.cursor='hand';" border="0"></a>';
}
}
quote:
поставил твой вариант, теперь вообще ничего не показывает
в коде хака есть упоминание о том, что 404-ю гифку нужно пихнуть в дир. images/misc форума, но путем экспериментов удалось выяснить, что показывает этот гиф только если он лежит в корне форума
вот только его и показывает....
global $stylevar;
function handle_bbcode_img_match($link)
{
global $stylevar, $vbphrase;
$link = strip_smilies(str_replace('\"', '"', $link));
// remove double spaces -- fixes issues with wordwrap
$link = str_replace(' ', '', $link);
$max_width = 400; // указываем максимально допустимую ширину
$max_height = 200; // указываем максимально допустимую высоту
$space = 5; // указываем максимально допустимое свободное пространство вокруг картинки
$image_data = @getimagesize($link);
if (!empty($image_data))
{
$width = $image_data['0'];
$height = $image_data['1'];
$x_ratio = $max_width/$width;
$y_ratio = $max_height/$height;
if ($width > $max_width OR $height > $max_height)
{
if (($width*$y_ratio) < $max_width)
{
$width = ceil($y_ratio*$width);
$height = $max_height;
}
else
{
$height = ceil($x_ratio*$height);
$width = $max_width;
}
$origin = '<br /><div class="smallfont"><a href="' . $link . '" target="_blank">' . $vbphrase['in_new_windows'] . '</a></div>';
}
$image_link = '<a href="' . $link . '" target="_blank"><img src="' . $link . '" border="0" width="' . $width . '" height="' . $height . '" hspace="' . $space . '" vspace="' . $space . '" alt="' . $vbphrase['pic_located'] . '" /></a>' . $origin;
}
else
{
$image_link = '<img src="' . $stylevar['imgdir_misc'] . '/404.gif" alt="' . $vbphrase['pic_not_found'] . '" width="104" height="81" border="0" />';
}
return $image_link;
}
Konkere
все равно не показывает...
сейчас 404 гиф лежит там, где нужно и отображает от-туда и только его
положил 2 одинаковые картинки в разные места и все равно - ничего...
версия форума 3.0.7
чего-то ты не так сделал, http://testf.netsys.ru/forum/showthread.php?t=4 у меня то-же 3.0.7 и всё работате
Да вроде все правильно...
копи/паст в одном месте - трудно ошибиться... =))
заменяем функцию:
function handle_bbcode_img_match($link)
на код из поста выше
а может еще где чего нужно править?
да вроде больше ничего не надо
а посмотри как выглядит адрес до картинок в теле страницы
| Формат времени GMT. Текущее время 12:25. | Показаны 28 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.