Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Работа с изображениями


Автор: Ground 30.9.2006, 04:00
Как наложить друг на друга 2 изображения?
Можно ли автоматически обрезать изображение и уменьшить, с последующим сохранением в файл?
Какая функция используется для сохранения файлов на сервер (с помощью элемента формы file)?

Автор: ZlojEzh 30.9.2006, 08:43
imagecreate/imagecopyresampled
аналогично + imagejpeg (imagepng, ...)
move_uploaded_file()

Добавлено @ 08:46 
прогнал немного
для наложения изображений лучше использовать функцию imagemerge

Автор: Ground 30.9.2006, 11:00
Про imagemerge я ничего не нашел...
Как выводить в браузер результат imagecopy?

Автор: ZlojEzh 30.9.2006, 13:22
сорри, описка... imagecopymerge
Код

  header("Content-type: image/jpeg");
  imageJpeg($img);

при этом следить за тем, чтобы скрипт не выводил ничего лишнего (новые строки в конце файла, варнинги и т.д.), иначе картинка не отобразится

Автор: Ground 1.10.2006, 09:06
Пишет Warning: imagejpeg(): supplied argument is not a valid Image resource in z:\home\localhost\www\gui.php on line 6
Код:
Код

<?php
$image = ImageCreateFromJpeg('Z:\home\localhost\www\11.jpg');
$image1 = ImageCreateFromJpeg('Z:\home\localhost\www\12.jpg');
$q = imagecopy($image1, $image, 10, 10, 0, 0, 350, 350);
  header("Content-type: image/jpeg");
  imageJpeg($q);
?>

Автор: ZlojEzh 2.10.2006, 16:53
<?php
  $image = ImageCreateFromJpeg('Z:\home\localhost\www\11.jpg');
  $image1 = ImageCreateFromJpeg('Z:\home\localhost\www\12.jpg');
  imagecopy($image1, $image, 10, 10, 0, 0, 350, 350);
  header("Content-type: image/jpeg");
  imageJpeg($image1);
?>
imagecopy копирует изображение $image в image1
а возращает bool, а не хендл картинки

Автор: Ground 3.10.2006, 07:35
Огромное спасибо за помощь!
А как насчет быстродействия? Если сделать к примеру 40 наложенных друг на друга картинок? Не будет страница тормозить?

Автор: Ground 3.10.2006, 11:22
Еще: Написал цикл, для вывода картинок, с измененым размером. Выводит только первыю картинку. Потом останавливается. В чем проблема?
Код

<?php
$var = 402;
echo("<table>");
for ($i = 10; $i <= $var; $i++)
   {
echo("<tr><td>");
$filename = 'gothic3-'.$i.'.jpg';

$width = 160;
$height = 120;

header('Content-type: image/jpeg');

list($width_orig, $height_orig) = getimagesize($filename);

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

imagejpeg($image_p, null, 100);
echo("</tr></td>");
}
echo("</table>");
?>

Автор: ZlojEzh 3.10.2006, 18:13
странно
по-моему он ничего кроме ошибок выводить не должен...

картинка должна формироваться отдельным скриптом
а адрес этого скрипта должен вписываться в img src

приблизительно так:

Код

  $var = 402;
  echo("<table>");
  for ($i = 10; $i <= $var; $i++) {
    echo("<tr><td>");
    echo("<img src='gothic_image.php?i=".$i."'>");
    echo("</tr></td>");
  }
  echo("</table>");


gothic_image.php:
Код

$_GET['i'] = intval(@$_GET['i']);
$filename = 'gothic3-'.$_GET['i'].'.jpg';
if (!is_file($filename)) {
  die();
}
$width = 160;
$height = 120;

header('Content-type: image/jpeg');

list($width_orig, $height_orig) = getimagesize($filename);

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

imagejpeg($image_p, null, 100);

может где-то лопухнулся - отладка за тобой )

а вообще такие вещи надо делать по-другому - создавать превьюшки заранее

Добавлено @ 18:14 
а еще у тебя html какой-то странный smile :
Цитата(Ground @  3.10.2006,  11:22 Найти цитируемый пост)
echo("</tr></td>");


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)