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

Форум PHP

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

 

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

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

тема: Как добавить водяной знак для всех картинок из папки?
 
 автор: volodumir   (14.10.2010 в 20:51)   письмо автору
 
 

Скрипт добавления водяного знака на картинку:

<?

$image = imagecreatefromjpeg('image.jpg');
$watermark = imagecreatefrompng('watermark.png');
$image_watermark = create_watermark($image, $watermark, 'right', 30);
header('Content-Type: image/jpeg');
imagejpeg($image_watermark);

functiоn create_watermark( $image, $watermark, $positiоn = 'right', $alpha_level = 100 ) ;
{
// ширина и высота водяного знака
$width = imagesx($watermark);
$height = imagesy($watermark);
if ( $positiоn == 'right' ) { // водяной знак будет внизу справа
$dest_x = imagesx($image) - $width - 5;
$dest_y = imagesy($image) - $height - 5;
} else { // водяной знак будет по центру
$dest_x = intval(imagesx($image)*0.5) - intval($width*0.5);
$dest_y = intval(imagesy($image)*0.5) - intval($height*0.5);
}
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $width, $height, $alpha_level);
return $image;
}

?>

Есть папка, в ней около 300 картинок. Как добавить водяной знак на все сразу ? Этот скрипт добавляет только на картинку image.jpg.

  Ответить  
 
 автор: sim5   (14.10.2010 в 20:55)   письмо автору
 
   для: volodumir   (14.10.2010 в 20:51)
 

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

  Ответить  
 
 автор: Gubichev   (14.10.2010 в 21:05)   письмо автору
 
   для: sim5   (14.10.2010 в 20:55)
 

Как это никак?

  Ответить  
 
 автор: sim5   (14.10.2010 в 21:25)   письмо автору
 
   для: Gubichev   (14.10.2010 в 21:05)
 

Вы хотите сказать, что GD будет обрабатывать одновременно 300 изображений?

  Ответить  
 
 автор: Gubichev   (14.10.2010 в 21:37)   письмо автору
 
   для: sim5   (14.10.2010 в 21:25)
 

Одновременно не знаю а циклом будет. Мне кажется автору именно это и нужно - за один запуск "пометить" все картинки.

  Ответить  
 
 автор: volodumir   (14.10.2010 в 23:48)   письмо автору
 
   для: Gubichev   (14.10.2010 в 21:37)
 

Вы правильно поняли, как это сделать?

  Ответить  
 
 автор: sim5   (15.10.2010 в 04:54)   письмо автору
 
   для: volodumir   (14.10.2010 в 23:48)
 

Пройтись по каталогу, отдавая последовательно каждое изображение в функцию добавления логотипа. Удобнее это сдлеать функцтей glob(), но.... Код приведенный накладывает логотипы только временно, при каждой выдаче изображения в браузер, что уже накладно, а увас 300 изображений. Неуж-то пользователь будет терпеть загрузку такого большого объема?

Что касается непосредственно кода - кто его писал?
1. Слово function пишется строго английским, у вас литера "о" в нем русская. Эта же ошибка у вас в объявленной переменной $positiоn.
2. После скобок с аргументами функции ставится открывающая фигурная скобка, а не точка с запятой.
3. Открытие изображений нужно перенести в функцию, передавая ей имя, и после окончания работы функции высвобождать их дескрипторы, тем более в вашем случае. Функция же должна и отдавать результат работы в браузер, ничего не возвращая.
4. У фунции imagecopymerge() несколько иные задачи, а вам нужна imagecopy().
5. В браузер отдавать теги изображений, которые должны обращаться к этому скрипту.

Если у вас не галерея предполагающая выдачу изображений пользователю без логотипа, то наложение его лучше перенести в операцию загрузки изображений. Этим вы исключите нагрузку на сервер, и уменьшите время ожидания пользователя.

  Ответить  
 
 автор: volodumir   (15.10.2010 в 16:36)   письмо автору
 
   для: sim5   (15.10.2010 в 04:54)
 

Я только недавно подключил скрипт водяного знака к сайту, он используется при загрузке картинок на сервер. Проблема в том что ранее загружанные картинки без водяного знака (~300 шт.). Эти ранее загруженные картинки лежат в отдельной папке. Мне нужно переделать этот скрипт чтобы он выбрал по-очереди каждую картинку из этой папки, добавил водяной знак и перезаписал ее. Может есть альтернативный какой-то метод?
А нащет ошибок не знаю, он у меня прекрасно работает.

  Ответить  
 
 автор: sim5   (15.10.2010 в 16:59)   письмо автору
 
   для: volodumir   (15.10.2010 в 16:36)
 

>А нащет ошибок не знаю, он у меня прекрасно работает.
<?
//вот это будет работать
$имя "Значение";
echo 
$имя;
//и это будет работать
function имяФункции($v) {
  echo 
$v;
}
имяФункции(12);
//если функция объявляется как ей и положено
//замените в бъявлении английское о на русское о
//теперь работает?

Насчет - не поэтому ли работает?
Собственно достачто вместо вывода в браузер записывать файл на диск, вот и вся переделка. Для этого функции imagejpeg($image_watermark) добавить путь, имя файла, компрессия. Передачу заголовка удалить.

  Ответить  
 
 автор: sim5   (15.10.2010 в 04:12)   письмо автору
 
   для: Gubichev   (14.10.2010 в 21:37)
 

А циклом это сразу всем? И ежу известно, что все операции происходят последовательно, и работа с изображениями не исключение.

  Ответить  
 
 автор: Gubichev   (15.10.2010 в 15:57)   письмо автору
 
   для: sim5   (15.10.2010 в 04:12)
 

По мне да, циклом это сразу всем, т.е. скрипт запускаем только раз.

  Ответить  
 
 автор: sim5   (15.10.2010 в 16:27)   письмо автору
 
   для: Gubichev   (15.10.2010 в 15:57)
 

Значит ваши циклы эксклюзивные.

  Ответить  
Rambler's Top100
вверх

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