Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   можно ли изменить ширину картинки посредством php? (http://forum.oszone.net/showthread.php?t=46612)

E-mail 13-03-2005 00:05 306205

можно ли изменить ширину картинки посредством php?
 
например есть картинка размером 1024 на *
мы обычно лезем в фотожоп кс и меняем его на 300 например и высоту какая получится,
а можноли это автоматизировать через php?

т.е. например при аплодиньи картинок на сервер чтобы они уменьшались?

vadimiron 13-03-2005 00:18 306208

Читаем про библиотеку GD, в основном, она везде поддерживается (я имею в виду хостинг с PHP)
В мануале функции этой библиотеки стоят в главе "Функции изображений"
В данном конкретном случае можно например использовать imagecopyresized(), эта функция не только меняет размеры, но ещё при этом следит и за качеством (которое может испортиться при изменении размеров картинки)

Официальная страница этой библиотеки, но в интернете есть туториалы, в том числе и конкретное использование вместе с PHP, например тут

E-mail 13-03-2005 01:45 306231

а ктонибудь подсакажет откуда этот модуль скачать и как поставить под винд и линкс?

E-mail 13-03-2005 01:46 306232

а с видио какнибудь php работает?

mar 13-03-2005 20:41 306396

под win - "Как установить модуль GD для PHP"
как в Linux - как ставить будем? (компилим, пакеты, apt... )
для все случаев phpinfo(); (на предмет - не стоит ли уже :))

KGB 14-03-2005 02:18 306449

E-mail
Есть куча б/скриптов для этого.

Вот например (с _php5.ru)
PHP код:

<?php
/***********************************************************************************
Функция 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  floor(($width $new_width) / 2);
  
$new_top     = !$use_x_ratio floor(($height $new_height) / 2);

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

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

  
imagejpeg($idest$dest$quality);

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

  return 
true;

}
?>

Использование
PHP код:

<?php

  
require ('imgresize.php');
  if (
img_resize('original.jpg''small.jpg'10060)) // 100 - новая ширина 60 - высота
    
echo 'Image resized OK';
  else
    echo 
'Resize failed!';

?>

А это тоже самое, но размер меняется в % (слегка переделал для своих нужд)
PHP код:

<?php
function img_resize($src$dest$new_size$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;

    if(
$new_size>100$new_size=40;//  эту строчку можно убрать, если надо увеличивать
    
$width$size[0]* $new_size/100;
    
$height=$size[1]* $new_size/100;


  
$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  floor(($width $new_width) / 2);
  
$new_top     = !$use_x_ratio floor(($height $new_height) / 2);

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

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

  
imagejpeg($idest$dest$quality);

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

  return 
true;

}
?>

Соответственно использование
PHP код:

<?php

  
require ('imgresize.php');
  if (
img_resize('original.jpg''small.jpg'60)) // здесь 60 - это проценты от оригинала
    
echo 'Image resized OK';
  else
    echo 
'Resize failed!';

?>




E-mail 14-03-2005 17:17 306652

ваУ, неожидал таких больших листингов:) спасип)

меня инересует как установить под unix модули php в часности gd,
как собстно компилить? или может готовое скачать откуда можно и чтото прописать в апач конфиги?
хелп.

php установлен как модуль к апачу

Prisoner 17-03-2005 14:20 307591

Доки тут. Там же и скачать. В доках вариации: установить, обновить - выбираем по вкусу.

E-mail 06-06-2005 02:53 330259

кстати вопрос все есче в силе: с видио работает какнибудь?

archy 07-06-2005 12:55 330658

E-mail
Что подразумевается в работе с видео?

E-mail 08-06-2005 00:43 330888

archy
при аплодиньи менять битрейд вставлять картинку логотип в видио и т.п.

archy 08-06-2005 12:30 331014

Средствами php навряд ли, для этого нужно юзать внешние проги типа всяких dumpmpeg и различных кодеков-перекодеков :).
Но делать это при аплоаде, не лету... маразм, имхо.

E-mail 08-06-2005 20:25 331171

archy при аплодиньи - образноговоря ;)

про внешние проги - знаем, юзвереем:)

вопрос открыт:]

archy 08-06-2005 21:58 331191

E-mail
Юзай их из php (внешние проги) и вопрос будет закрыт, нет в php интерфейсов к таким прогам

E-mail 19-06-2005 15:33 334413

никак не могу придумать алгоритм для изменения изображения..
т.е. мне нужно из любого изображения больше 400 пикселей по горизонтали сделать изображение 400 пикселей по горизонтали и по вертикали сколько получится в процентном соотношении, но как это процентное отношение посчитать? :not-me:

Prisoner 20-06-2005 02:24 334512

В шестом классе математики преподают пропорции, а по геометрии подобность треугольников. Т.к. треугольники подобны по двум сторонам и углу между ними, то:
iHeightNew = iWidthNew * iHeightOld / iWidthOld,
где
iHeightNew - высота нового прямоугольника
iWidthNew - ширина нового прямоугольника (=400)
iHeightOld - высота старого прямоугольника (getimagesize)
iWidthOld - ширина старого прямоугольника (getimagesize)

E-mail 20-06-2005 02:49 334516

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

но всеравно спасип


Время: 14:12.

Время: 14:12.
© OSzone.net 2001-