Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модифицировать функцию ресайза 
:(
    Опции темы
kulikoff
Дата 26.5.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Добрый день!
Нашел такую вот функцию ресайза картинки:
Код

/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
  $src             - имя исходного файла
  $dest            - имя генерируемого файла
  $width, $height  - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
  $rgb             - цвет фона, по умолчанию - белый
  $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;

  // Определяем исходный формат по MIME-информации, предоставленной
  // функцией getimagesize, и выбираем соответствующую формату
  // imagecreatefrom-функцию.
  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = "imagecreatefrom" . $format;
  if (!function_exists($icfunc)) return false;

  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];

  $ratio       = min($x_ratio, $y_ratio);
  $use_x_ratio = ($x_ratio == $ratio);

  $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, $rgb);
  imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
    $new_width, $new_height, $size[0], $size[1]);

  imagejpeg($idest, $dest, $quality);

  imagedestroy($isrc);
  imagedestroy($idest);

  return true;

}

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

  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];

но ничего не получилось smile 
Помогите, плиз!
PM MAIL WWW ICQ Skype   Вверх
gta4kv
Дата 26.5.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Вообще этот код писал -=Ustas=-, и он вполне может работать не передавая width / height:

Код

function image_resize ( $src, $width = 100, $height = 100, $resize = 'w', $dest = FALSE, $rgb = 0xFFFFFF, $quality = 100 )
{
    if (! file_exists($src))
    {
        return FALSE;
    }
    $size = getimagesize($src);
    if ($size === FALSE)
    {
        return FALSE;
    }
    if ($resize == 'w')
    {
        if ($size[0] > $width)
        {
            $proportion = (($width * 100) / $size[0]);
            $height = (($size[1] * $proportion) / 100);
        }
    }
    else
    {
        if ($size[1] > $height)
        {
            $proportion = (($height * 100) / $size[1]);
            $width = (($size[0] * $proportion) / 100);
        }
    }
    if (! isset($proportion))
    {
        $width = $size[0];
        $height = $size[1];
    }
    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    $icfunc = 'imagecreatefrom' . $format;

    if (! function_exists($icfunc))
    {
        return FALSE;
    }
    else
    {
    }

    header('Content-type: ' . $size['mime']);

    $x_ratio = ($width / $size[0]);
    $y_ratio = ($height / $size[1]);
    $ratio = min($x_ratio, $y_ratio);
    $use_x_ratio = ($x_ratio == $ratio);

    $new_width = ($use_x_ratio) ? $width : floor($size[0] * $ratio);
    $new_height = (! $use_x_ratio) ? $height : floor($size[1] * $ratio);
    $new_left = ($use_x_ratio) ? 0 : floor(($width - $new_width) / 2);
    $new_top = (! $use_x_ratio) ? 0 : floor(($height - $new_height) / 2);

    $isrc = $icfunc($src);

    $idest = imagecreatetruecolor($width, $height);

    imagefill($idest, 0, 0, $rgb);
    imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

    imagedestroy($isrc);
    imagedestroy($idest);

    return TRUE;
}



Это сообщение отредактировал(а) gta4kv - 26.5.2009, 18:41
PM MAIL   Вверх
kulikoff
Дата 26.5.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Так тут просто стоят же значения по умолчанию. А если мне надо масштабировать изображения пропорциолнально? Скажем, чтоб высота была строго 115 пикселей, а ширина - всё равно какая, лишь бы не было искажений... Как мне в таком случае вызывать функцию? Какие параметры и как передавать?
PM MAIL WWW ICQ Skype   Вверх
gta4kv
Дата 26.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



вы функцию попробуйте, нормально она все высчитывает.
PM MAIL   Вверх
kulikoff
Дата 26.5.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Не получается что-то запустить этот скрипт... Не пойму, в чем проблема. Вызываю функцию следующим образом:
переделал строку вызова функции
Код

function image_resize ( $src, $dest = FALSE, $width = 100, $height = 100, $resize = 'w',  $rgb = 0xFFFFFF, $quality = 100 )

Код

image_resize("img/123.jpg", "img/126.jpg", 180);

взять картинку 123.jpg из папки img (CHMOD 777 у неё), сделать её шириной 180 пикселей и записать в файл 126.jpg. Запускаю - пустой экран, крестик только, как-будто картинка должна быть, но её нет на хосте...

В чем проблема - не пойму
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 26.5.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а причём здесь крестик, здесь ни в одном коде не приведено, как вы смотрите эту картинку. на самом сервер смотрели? картинка создаётся?
PM MAIL WWW   Вверх
kulikoff
Дата 26.5.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



нет, в том-то и дело, что не генерится картинка, нет её...
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 26.5.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



хм, может адрес некоректный задаёшь? или каталог не существует?

воспользуйся вот этой функцией http://forum.vingrad.ru/index.php?showtopi...t&p=1877225
судя по всему - это тоже самое, слегка переработанное, но 100% работает, пару дней назад проверял
PM MAIL WWW   Вверх
NLspieler
Дата 27.5.2009, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



А что такое ресайс? Не изменение ли размера картинки? Если да, то идет ли без gcd?
Для получения недостоющего значения, нужно хотя бы три известных


Код

/*
x       x1
__  =   ___

y       y1

___________________

x1 = x * y1 / y

*/


function otnoschenie($x , $y , $y1)
{
    return $x * $y1 / $y ;
}

function get_wight_new ($wight , $height , $height_new)
{
    $wight_new = otnoschenie ($wight , $height , $height_new) ;
    return $wight_new ;
} 

function get_height_new ($wight , $height , $wight_new)
{
    $height_new = otnoschenie ($height , $wight , $wight_new) ;
    return $height_new ;
}


Это сообщение отредактировал(а) NLspieler - 27.5.2009, 02:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.