Форум сетевых администраторов
Показаны 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)


Помещено Dr. Shost 12-09-2004 в 15:08:

Контроль размера картинок, вставленных тегом Img

Вопрос вот в чем, где можно ограничить размеры картинок, вставленных по средствам тега IMG? Т.е. где дается ссылка на картинку. Возможно ли ограничить размеры? Или делать ресайз картинок? Или еще какие есть варианты, чтобы не растягивался скин по размеру картинки?
VB3.0.3


Помещено polo 12-09-2004 в 20:42:

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

__________________
Всегда есть решение.


Помещено Dr. Shost 13-09-2004 в 00:33:

А может есть какие хаки для этого написанные? Или можно какие-либо настройки самого скина изменить, чтобы он не менял свой размер, даже если картинка больше его ширины?


Помещено polo 13-09-2004 в 10:02:

Ну можно конечно прописать явно размеры картинки но ведь просто так нельзя узнать исходный размер картинки, поэтому не удасться сохранить пропорции.

__________________
Всегда есть решение.


Помещено MCTarakan 13-09-2004 в 10:12:

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 - хомяк музыканта


Помещено Dr. Shost 13-09-2004 в 10:14:

А нельзя только по ширине прописать, а что не влезает, то пусть обрезается что ли..? Главное, чтобы скин не растягивался...

MCTarakan
Спасибо за ссылки, попробую разобраться, что там к чему... Только мне, как не имеющиму статуса зарегенново не показываются все коды на их форуме... А не можешь поделиться этим хаком?


Помещено polo 13-09-2004 в 10:57:

Чето поспешил я, экспромтом функцию немного переделал.
Вобщем нужно в includes/functions_bbcodeparse.php найти функцию function handle_bbcode_img_match и заменить ее на:

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; // указываем максимально допустимую высоту
    
$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="" />';
}

__________________
Всегда есть решение.


Помещено Dr. Shost 13-09-2004 в 19:02:

polo
БОЛЬШОЕ СПАСИБО! Очень помог.


Помещено Gyrus 20-09-2004 в 20:37:

Да, действительно, спасибо POLO! нужная доработка...

__________________
Всё в наших руках.


Помещено AFGAN 23-10-2004 в 06:20:

все классно работает, до тех пор, пока кто то из узеров не пихнет ссылку на несуществующую картинку (в тегах [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

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


Помещено Bochkarev_D.S. 23-10-2004 в 15:51:

Считаю, что IMG код нужно отключать сразу во всех форумах. Исключение могут составлять подписи, да и то, под вопросом. Если возникла неодходимость в fullscreen картинки в сообщениях, то можно использовать стандартную возможность ограничения размера картирки аттача. IMG это зло, IMG нарушает целостность проекта, заставляет его зависить от других серверов.


Помещено AFGAN 23-10-2004 в 16:16:

А как баг исправить то?


Помещено kerk 24-10-2004 в 18:16:

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, поймут, что я хотел сказать...


Помещено fStrange 29-10-2004 в 15:49:

не проверял..
навскидку вариант Поло с проверкой на отсутствие картинки


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


Помещено kerk 29-10-2004 в 16:27:

fStrange
спасибо
проверю, как поставлю форум на локалку заново, обрушил нах, своими экспериментами...


Помещено fStrange 29-10-2004 в 17:29:

kerk
неза что..
там ошибка..
проверка неправильно
уже разобрался.. но времени нет исправлю в понедельник..

__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru


Помещено fStrange 01-11-2004 в 16:37:

НЕЛП!!!

час постучался об стенку и выяснил, что ни фига не получается

мне пришло в голову 3 варианта проверки и все не работают
проверка вида

PHP:


$fp 
= @fopen($link,"r");

if (!
$fp)


не работает .. ругается с 500 ошибкой

пробуем через getimagesize

PHP:

if ($image_data = getimagesize($link))


та же 500

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

__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru


Помещено phprus 01-11-2004 в 19:01:

fStrange
PHP и ошибка 500?! Ð_азве такое возможно? Ð_то скорее всего глюки сервера Apache.


Помещено fStrange 02-11-2004 в 07:20:

phprus
Глюк это когда один раз..
но когда регулярно повторяется это уже баг
могу и скрин бросить...
я же говорю вчера час бился... сначала я думал, что я полный идиот.. как работать с функцией fopen и getimagesize не знаю

__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru


Помещено polo 03-11-2004 в 08:36:

Вот исправленная версия.

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; // указываем максимально допустимую высоту 
    
    
    
$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="" />'; 
}

__________________
Всегда есть решение.


Помещено kerk 03-11-2004 в 20:28:

polo
я тут нашел более "утяжеленный" вариант, с такими настройками, как и хотел,
размер указывается только по ширине, в сообщении появляется уменьшенное кликабельное изображение с надписью внизу: "кликнуть здесь, для просмотра оригинала"
========
при вставке в теги [img] ссылку с неверным расширением или без расширения, в посте получаем маленькое окошко с текстом "Link is Broken" (настраивается, можно например предупредить узера, что бы указывал правильный линк)
в случае отсутствия картинки на сервере, получаем окошко "not found" (так же настраивается, можно написать "404 не найдено" )
в случае обращения к серверу и он не отвечает, получаем: "Server is Down"
========
поставил на локалке, все работает пока...
но уж больно много исправлений и дополнений нужно делать возможно ли облегчить?
хотя автор этого хака не убирает оригинальные строки кода, а только делает их закоментированными, ниже подставляя свой код
========
что интересно, можно указать совсем маленький размер картинки (почти тоже самое, что реализовано в vB 3.0.3 с кликабельными картинками в аттачах) и она так и будет отображаться, но вот размер в KB такой же и останется...
========
если интересно, поковыряй, скажи свое мнение...
хак прикреплю в этом сообщении


Помещено Konkere 19-03-2005 в 16:24:

kerk хак действительно довольно сложный проще в хак polo добавить несколько строк

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 = 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" />'; 
    }
}


Помещено kerk 24-03-2005 в 03:41:

снес тот, что поставил раньше, потому как все равно ошибки вылетают, если в теме много картинок, да даже если теги отключены в этом разделе, но узер постит фотку, заключая ее в теги - вылетает ошибка (не долго продержался этот хак)...
Konkere
поставил твой вариант, теперь вообще ничего не показывает
в коде хака есть упоминание о том, что 404-ю гифку нужно пихнуть в дир. images/misc форума, но путем экспериментов удалось выяснить, что показывает этот гиф только если он лежит в корне форума
вот только его и показывает....
сам реальный рисунок существует, но его не показывает, наверное где то ошибка...
самому сложно разобраться в этом, ну никак мне пхп не дается... =))

kerk добавил 24-03-2005 в 04:45:47:
нашел еще одно решение проблеммы, тоже не очень много изменять в коде:

PHP:


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>';
}
}


но при просмотре темы - подтормаживает...


Помещено Konkere 24-03-2005 в 07:59:

quote:
поставил твой вариант, теперь вообще ничего не показывает
в коде хака есть упоминание о том, что 404-ю гифку нужно пихнуть в дир. images/misc форума, но путем экспериментов удалось выяснить, что показывает этот гиф только если он лежит в корне форума
вот только его и показывает....


я забыл вставить в начало функции

PHP:

global $stylevar;


а всё остальное работате
можешь посмотртеть вот например: http://vlab.netsys.ru/forum/showpos...91&postcount=14

Konkere добавил 24-03-2005 в 09:09:34:
Вот последний, самый свежий вариант

Фразы
тип GLOBAL
имя: in_new_windows
текст: Open in New Windows
перевод: Открыть в новом окне

имя: pic_located
текст: The Picture is located on other Server
перевод: Картинка расположена на другом сервере

имя: pic_not_found
текст: 404 Picture not found
перевод: 404 Картинка не найдена

нужно в includes/functions_bbcodeparse.php найти функцию function handle_bbcode_img_match и заменить ее на:

PHP:

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;
}


Помещено kerk 24-03-2005 в 23:06:

Konkere
все равно не показывает...
сейчас 404 гиф лежит там, где нужно и отображает от-туда и только его
положил 2 одинаковые картинки в разные места и все равно - ничего...
версия форума 3.0.7


Помещено Konkere 25-03-2005 в 08:46:

чего-то ты не так сделал, http://testf.netsys.ru/forum/showthread.php?t=4 у меня то-же 3.0.7 и всё работате


Помещено kerk 25-03-2005 в 12:54:

Да вроде все правильно...
копи/паст в одном месте - трудно ошибиться... =))
заменяем функцию:
function handle_bbcode_img_match($link)
на код из поста выше
а может еще где чего нужно править?


Помещено Konkere 25-03-2005 в 21:16:

да вроде больше ничего не надо
а посмотри как выглядит адрес до картинок в теле страницы


Формат времени GMT. Текущее время 12:25.
Показаны 28 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.