Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работаем с картинками с помощью PHP.
 
 автор: JIEXA   (08.04.2005 в 17:49)   письмо автору
 
 

Я не умею работать с графикой в PHP.
Не буду заморачивать ваши головы всякой ерундой, а просто опишу, что мне нужна сделать.

---------- Задача №1 -------------
1. Я через форму загружаю картинку (формат может быть GIF, JPG, PNG).
2. Если она GIF или PNG формата, то конвертируем её в JPG.
3. Оригинал сохраняем в каталог mediabank/original/
4. Уменьшаем картинку до определенного размера.
5. На уменьшенную картинку накладываем заранее приготовленую и распологаем эту маленькую картинку в нижнем левом углу.
6. Сохраняем картинку в деректорию mediabank/small/
--------- Задача №2 --------------
1. Открываем деректорию images/news/big/
2. Все находящиеся в ней картинки уменьшаем до размера (11х11) # картинки все в GIF формате
3. Уменьшённые картинки пихаем в деректорию images/news/small/

Заранее спасибо!

   
 
 автор: Akira   (08.04.2005 в 17:59)   письмо автору
 
   для: JIEXA   (08.04.2005 в 17:49)
 

Отличная статья http://php5.ru/articles/image Мне очень понравилась. НЕ первому человеку ее советую.

   
 
 автор: JIEXA   (08.04.2005 в 23:10)   письмо автору
 
   для: Akira   (08.04.2005 в 17:59)
 

Да статья хорошая, но я так и не нашёл ответы на все вопросы!
[это сообщение я правил 10.5.2005]

   
 
 автор: cheops   (08.04.2005 в 23:42)   письмо автору
 
   для: JIEXA   (08.04.2005 в 17:49)
 

Хм... вообще готовый код можно посмотреть в фотогалереях в разделе downloads http://www.softtime.ru/info/downloads.php, в которых все перечисленные задачи решаются.
№ 1.
1. Загрузку файлов на сервер можно посмотреть в http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1693
2. Не уверен, что можно на лету сделать, здесь нужно Дизайнера спросить или ещё кого-то, кто с GDLib много работал...
3. Для этого после загрузки файла следует перебросить его из временного каталога в каталог назначения
<?php
  
if(copy($_FILES["filename"]["tmp_name"], "file/новое_имя_файла.txt")) 
  {
     echo 
"Файлы успешно перенесены";
  }
  else
  {
     echo 
"Ошибка в перенесении файлов";
  }
?>

4. Про создание уменьшенных копий изображений можно почитать в ссылке по теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145
5. Здесь имеется ввиду защита изображений? Об этом можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=787
6. Это можно сделать при помощи функции copy http://www.softtime.ru/dic/id_dic=160&id_group=6
№ 2
1. Имена файлов в директории можно выяснить при помощи связки opendir+readdir. Подробности по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1718
2. Про создание уменьшенных копий изображений можно почитать в ссылке по теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145
3. Это можно сделать при помощи функции copy http://www.softtime.ru/dic/id_dic=160&id_group=6

   
 
 автор: JIEXA   (09.04.2005 в 00:40)   письмо автору
 
   для: cheops   (08.04.2005 в 23:42)
 

Большое спасибо, буду ждать ответа Дизайнера насчёт №1 пункт 2. Боюсь это невозможно сделать :(.

   
 
 автор: Никоза   (09.04.2005 в 01:21)
 
   для: JIEXA   (09.04.2005 в 00:40)
 

Вот насчёт того, что сервер может (???) конвертировать gif в JPG...
если это возможно, ув. Дизайнер, очень прошу сообщить.
Иначе теоретически можно испортить настроение владельцу (например) службы знакомств, у которого позаолено загружать gif.
Для этого просто нужно загрузить анимационный gif, где первые пару минут будет хорошая фотография. а потом вдруг коварно выскочит порно!!!
Поэтому я и не люблю gif агрузку. (На моей службе знакомств это возможно...).
действительно ли можно конвертировать gif в JPG ?

   
 
 автор: glsv (Дизайнер)   (09.04.2005 в 05:36)   письмо автору
 
   для: Никоза   (09.04.2005 в 01:21)
 

Проверил работу с анимационными GIF - работает :)
Но, думаю, что необязательно сохранять в JPEG. Можно просто пересохранить GIF и так, как GD не поддерживат анимацию, то должен быть сохранен только первый кадр. Либо можно использовать PNG - в нем тоже не поддерживаеся анимация, а одна из его разновидностей (PNG-8) является почти полным аналогом GIF.

   
 
 автор: JIEXA   (09.04.2005 в 10:47)   письмо автору
 
   для: glsv (Дизайнер)   (09.04.2005 в 05:36)
 

Всем большое спасибо за помощь. Сейчас буду пробывать.

   
 
 автор: glsv (Дизайнер)   (09.04.2005 в 05:31)   письмо автору
 
   для: JIEXA   (09.04.2005 в 00:40)
 

Да, можно конвертировать. Принцип работы следующий:
1. Считываем изображение из файла во внутренний формат библиотеки GD.
2. Сохраняем изображение из внутреннего формата в любой другой (из поддерживаемых).

Чтобы это сделать, нужно заменить в коде только 1-2 строки, сохраняющие или выводящие в браузер изображение

<?
// Считываем из GIF
$image imagecreatefromgif("softtime.gif");
//////////////
// Обработка
/////////////
// Сохранение JPEG
// Вывод заголовка нужен, если изображение выводим сразу в браузер
header ("Content-type: image/jpeg");
// Сохранение в файл
imagejpeg($image);
?>

   
 
 автор: Sfinks   (09.04.2005 в 12:45)   письмо автору
 
   для: glsv (Дизайнер)   (09.04.2005 в 05:31)
 

небольшая поправочка:
<? 
header 
("Content-type: image/jpeg"); 
// Вывод на экран
imagejpeg($image); 
// Сохранение в файл 
imagejpeg($image,"filename.jpg"); 
?> 
т.е. для сохранения нужно указать имя файла.
+ после имени файла можно третим параметром указать с каким качеством (от 0 - худшее, до 100 - лучшее) следует сохранить файл. Если не указывать, сохранит с качеством 75.

   
 
 автор: JIEXA   (09.04.2005 в 15:58)   письмо автору
 
   для: Sfinks   (09.04.2005 в 12:45)
 

cheops дал ссылку по задачи №1 пункт 5. Там был код я оттуда убрал лишнее для меня, и получился код:
<?
$imagefile 
"test.jpg";
$img imagecreatefromjpeg($imagefile);
// Если изображение создано
if ($img)
{
          
// Назначаем цвет
          
$color imagecolorallocatealpha($img0255050);
          
// Пишем текст поверх изображения
          
$box imagettftext($img50010150$color"arbat.ttf""Торговая марка");
          
// Выводим изображение в браузер
          
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_JPEG));
          
imagejpeg($img);
}
?>

Но мне нужно накладывать картинку, а не текст. А как я писал с самого начала:"Я не умею работать с графикой в PHP".
Мне не понятно как сделать, чтобы вместо текста накладывалась картинка... Может кто подскажет?

   
 
 автор: JIEXA   (09.04.2005 в 19:15)   письмо автору
 
   для: JIEXA   (09.04.2005 в 15:58)
 

help plz

   
 
 автор: glsv (Дизайнер)   (09.04.2005 в 20:00)   письмо автору
 
   для: JIEXA   (09.04.2005 в 15:58)
 

Вам необходимо использовать функцию imagecopyresampled()

http://www.softtime.ru/dic/id_dic=359&id_group=15

   
 
 автор: JIEXA   (09.04.2005 в 21:21)   письмо автору
 
   для: glsv (Дизайнер)   (09.04.2005 в 20:00)
 

ага спасибо.
P.S. это подтверждает, что надо выложить ваш "список фукций" для скачивания, т.к. я скачал самый последний "русский" мануал по пшп с php.net и там половина инфы на ангийском языке!!!

   
 
 автор: JIEXA   (10.04.2005 в 23:49)   письмо автору
 
   для: JIEXA   (09.04.2005 в 21:21)
 

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

   
 
 автор: glsv (Дизайнер)   (11.04.2005 в 10:44)   письмо автору
 
   для: JIEXA   (10.04.2005 в 23:49)
 

Пожалуйста

<?
$imagefile 
"min.jpg"
$img imagecreatefromjpeg($imagefile); 
// Если изображение создано 
if ($img

  
// копируем на него другое.
  
$image_small "logo.jpg"
  
$img_sm imagecreatefromjpeg($image_small);
  
// Координаты точки вставки изображения
  
$x 100;
  
$y 100
  
// Определяем размеры копируемого изображения
  
$size getimagesize($image_small);
  
$w $size[0];
  
$h $size[1];  
  
// Копируем одно изображение ($img_sm) на другое ($img)
  
$result imagecopy($img$img_sm$x$y00$w$h);
  if (!
$result)
  {
    echo 
"Ошибка копирования изображения";
    exit();
  }
  
// Выводим изображение на экран
  
header("Content-type: image/jpeg");
  
imagejpeg($img); 

?>

   
 
 автор: JIEXA   (11.04.2005 в 14:33)   письмо автору
 
   для: glsv (Дизайнер)   (11.04.2005 в 10:44)
 

Спасибо большое :)

   
 
 автор: JIEXA   (11.04.2005 в 17:35)   письмо автору
 
   для: JIEXA   (11.04.2005 в 14:33)
 

скопировать картинку друг на друга получилось, а как сделать, чтобы картинка, которую мы накладываем расположилась в левом нижнем углу?

   
 
 автор: JIEXA   (11.04.2005 в 18:28)   письмо автору
 
   для: JIEXA   (11.04.2005 в 17:35)
 

Всё с этим разобрался. Оказывается для размещения картинки в нижнем левом углу надо из длинны изображения, на которое мы
копируем картинку, вычесть длинну картинки - это будут координаты оси ox. Соответственно для определения координатов оси oy
надо из ширинны картинки, на которую мы копируем изображение, вычесть ширину картинки.
Вот на примере кода Дизайнера:
<?
$imagefile 
"min.jpg"
$img imagecreatefromjpeg($imagefile); 
// Если изображение создано 
if ($img

  
// копируем на него другое. 
  
$image_small "logo.jpg"
  
$img_sm imagecreatefromjpeg($image_small); 
  
// Координаты точки вставки изображения 
  
$x 100
  
$y 100
  
// Определяем размеры копируемого изображения 
  
$size getimagesize($image_small); 
  
$w $size[0]; 
  
$h $size[1];
  
// Определяем координаты
  
$coord getimagesize("min.jpg");
  
// Ось "OX"
  
$x $coord[0]-$size[0];
  
// Ось "OY"
  
$y $coord[1]-$size[1]; 
  
// Копируем одно изображение ($img_sm) на другое ($img) 
  
$result imagecopy($img$img_sm$x$y00$w$h); 
  if (!
$result
  { 
    echo 
"Ошибка копирования изображения"
    exit(); 
  } 
  
// Выводим изображение на экран 
  
header("Content-type: image/jpeg"); 
  
imagejpeg($img); 
}
?>


Ещё один простой вопрос:
А как сделать если изображение, которое накладываем, содержит прозрачную облость, то она не заполнялась белым, а оставалась прозрачной?

   
 
 автор: glsv (Дизайнер)   (12.04.2005 в 07:10)   письмо автору
 
   для: JIEXA   (11.04.2005 в 18:28)
 

Прозрачные области у вас в gif-файлах?
И сохраняете тоже в gif?

   
 
 автор: JIEXA   (12.04.2005 в 19:03)   письмо автору
 
   для: glsv (Дизайнер)   (12.04.2005 в 07:10)
 

Нет в jpg, но я разабрался. Нужно было ту маленькую картинку сохранить в формате PNG

   
 
 автор: glsv (Дизайнер)   (13.04.2005 в 10:58)   письмо автору
 
   для: JIEXA   (12.04.2005 в 19:03)
 

Да, PNG или GIF, т.к. JPEG не поддерживает прозрачность.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования