Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: наложение ватемарка при загрузке файла
Форумы портала PHP.SU » PHP » Программирование на PHP » наложение ватемарка при загрузке файла

Страниц (1): [1]
 

1. broshurkaplus - 25 Января, 2011 - 11:49:28 - перейти к сообщению
памагите если возможно:
есть скрипт который загружает файл картинки на сервер.
всё работает, но мне нужно наложить ватемарк
пробую так: загружаю файл на сервер, сохраняю, создаю новую картинку по размерам загрузки, копирую внеё загруженый файл, создаю новую картинку из файла ватемарка, копирую её часть в новую картинку, сохраняю на сервере под другим именем.
НЕ НАКЛАДЫВАЕТ !!! хотя файл новый создаётся!
в папке куда загружается права максимальны. может чтото с правами не так? и мне надо чтобы грузилось в другую папку.
подскажите пожалста
привожу кусок кода

PHP:
скопировать код в буфер обмена
  1. ...
  2.                  //Перемещаем загруженный файл в необходимую папку $url
  3. //НУЖНО ЧТОБЫ ПЕРЕМЕЩАЛО КАК В СЛЕДУЮЩЕЙ СТРОКЕ В ДРУГУЮ ПАПКУ
  4.                //  if(move_uploaded_file($FILE['FILE']['tmp_name'], $url."/"$newname)) {
  5. //ХОТЯ ПОКА ПРОБУЮ В ПАПКУ ОТКУДА СКРИПТ
  6. if(move_uploaded_file($FILE['FILE']['tmp_name'], $newname)) {
  7. //накладываем ватемарк
  8. $filename_watermark = 'watermark.png';
  9. $bb="123".$newname;
  10. $aaa=$newname;
  11. $imgsource = imagecreatefromjpeg($aaa);
  12.   $src_w = imagesx($imgsource);
  13.   $src_h = imagesy($imgsource);
  14. $imgdest = imagecreatetruecolor($src_w, $src_h);
  15. imagecopyresampled($imgdest, $imgsource, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);
  16. $imgadd = imagecreatefrompng($filename_watermark);
  17. imagecopy($imgdest, $imgadd, 0, 0, 0, 0, imagesx($imgadd), imagesy($imgadd));
  18. imagejpeg($imgdest, $bb, 90);
  19. if (! file_exists ($bb)) {
  20. die("файла нет ".$bb);}
  21.  // Чистим мусор
  22.   imagedestroy($imgadd);
  23.   imagedestroy($imgdest);
  24.   imagedestroy($imgsource);
  25.                     //Выводим сообщение что файл обработа и загружен
  26.                     return TRUE;
  27.                                                                                                            }



ну так памагите или укажите путь истинный
2. Uchkuma - 25 Января, 2011 - 12:35:15 - перейти к сообщению
Как минимум массив с данными по загруженным файлам находится здесь $_FILES, а не здесь $FILE.
И оформляйте код!
3. broshurkaplus - 25 Января, 2011 - 12:46:38 - перейти к сообщению
Uchkuma

я php 1 мксяц а Вы видно меньше ,я же описал что работает
ведь я полагаю раз

echo 'Выберите файл (не более 1мб): <input type="file" name="FILE" size="20" />&nbsp;&nbsp;';

то и массиф
$_FILE а не $FILES.

у меня всё работает
ПО ДЕЛУ ПРО НАЛОЖЕНИЕ ЧТО НИТЬ ЕСТЬ ? ГДЕ ОШИБКА В НАЛОЖЕНИИ?
ВЕДЬ У МЕНЯ ВСЁ ГРУЗИТ И СОЗДАЁТ НО БЕЗ ВАТЕМАРКА!!!
4. Uchkuma - 25 Января, 2011 - 12:53:12 - перейти к сообщению
broshurkaplus пишет:
php 1 мксяц а Вы видно меньше
Спасибо, желание помогать вам отпало. Почитайте http://php.su/phphttp/?uploads .
5. SAD - 25 Января, 2011 - 13:01:39 - перейти к сообщению
broshurkaplus пишет:
у меня всё работает
ПО ДЕЛУ ПРО НАЛОЖЕНИЕ ЧТО НИТЬ ЕСТЬ ? ГДЕ ОШИБКА В НАЛОЖЕНИИ?
ВЕДЬ У МЕНЯ ВСЁ ГРУЗИТ И СОЗДАЁТ НО БЕЗ ВАТЕМАРКА!!!

наглый еще оказывается - получишь штраф или бан
6. broshurkaplus - 25 Января, 2011 - 13:20:18 - перейти к сообщению
чего Вы злитесь и обижаетесь
забанить можно всё что угодно
ведь цель форума ПОМОГАТЬ И ОБЪЯСНЯТЬ друг другу
я ведь описал задачу и то что где работает и где не работает

отписал тока щас, читал ссылку и проверял указанный недостаток ставил из массивов
$_FILES['FILE']['tmp_name'] и $FILE['FILE']['tmp_name'] вроде скрипт всё равно загружает картинки, но не выполняет задачу, объясните ЗЕЛЁНОМУ
в чём разница , и почему работает в обоих случаях...

ведь основной вопрос в другом: где ошибка в коде при наложении ватемарка ?
или всё неправильно? укажите на путь истинный . я уже читал много инета , бьюсь 7й день,
но везде немного не то, нужно чтобы накладывало именно при загрузке...
7. JustUserR - 25 Января, 2011 - 15:59:21 - перейти к сообщению
broshurkaplus пишет:
$_FILES['FILE']['tmp_name'] и $FILE['FILE']['tmp_name'] вроде скрипт всё равно загружает картинки, но не выполняет задачу, объясните ЗЕЛЁНОМУ
Использование PHP-интерпретатора предполагает автоматизированное осуществление загрузки передаваемых браузером пользователя файлов во временную директорию - при этом данный процесс осуществляется до начала исполнения основного потока программного кода и не контролируется текущим PHP-приложением
8. broshurkaplus - 25 Января, 2011 - 19:08:21 - перейти к сообщению
я панимаю что процесс автоматически загружает файлы пользователей ...,
я сделал проверку есть ли файл, переместил его в каталог куда нужно,
далее делаю ватемарк ----- НО ОН НЕ НАКЛАДЫВАЕТСЯ хотя файлы и создаются.
я уже описывал выше...

у меня ВАТЕМАРК не накладывается, что описано в первом посте
подскажите в чём дело, где ошибка , или кака можно реализовать данную задачу подругому - по делу темы , по сути вопроса.
если это возможно?!
9. Invert - 27 Января, 2011 - 04:53:19 - перейти к сообщению
Про ImageMagic писать? =)
10. Zuldek - 27 Января, 2011 - 07:35:34 - перейти к сообщению
Если вы работаете с удалённым сервером, то проверьте физическое наличие создаваемого результирующего файла в указанной директории, а также время создания файла. Если файла там не будет, а так скорее всего и есть, смотрите лог сервера.
Цитата:
$newnameUchkuma
я php 1 мксяц а Вы видно меньше ,я же описал что работает
ведь я полагаю раз
<input type="file" name="FILE" size="20" />&nbsp;&nbsp;';
то и массиф
$_FILE а не $FILES.

Дочитал. Массив с данными по загруженным файлам тут $_FILES.
Цитата:
то и массиф
$_FILE а не $FILES
- Бред.
Цитата:
я php 1 мксяц а Вы видно меньше
После таких сообщений помощь автору темы на этом форуме обычно заканчивается. Моя, во всяком случае, точно.
11. JustUserR - 27 Января, 2011 - 09:47:20 - перейти к сообщению
broshurkaplus Возможной причиной осуществления некорректного функционирования предплагаемого PHP-приложения может являться использование некорретных базовых файловых путей обеспечивающих параметр сохранения целевого файла - значения которого может варьироваться в зависимости от системного окружения и конфигурации PHP-интерпретатора а также расположения целевого приложения - в качестве возможного варианта решения в таком случае допустимо использование абсолютного пути генерируемого на основе переменной окружения DOCUMENT_ROOT
Кроме того при осуществлении просмотра целевого объекта изображения в браузере может иметь место отображение устаревшей версии графического файла - связанного с механизмом кеширования
12. broshurkaplus - 27 Января, 2011 - 19:49:55 - перейти к сообщению
Invert
Про ImageMagic писать?
если возможно напишите, я пока неопытный, и что это не знаю, хотя полагаю что это при выводе уже готового изображения.

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


файл есть он грузиться на сервер см пост 1
яж полагаю что
CODE (htmlphp):
скопировать код в буфер обмена
  1. [PHP]if(move_uploaded_file($_FILES['FILE']['tmp_name'], $newname)) {[/PHP]


здесь - если файл переместился и сохранился под указаным именем, что и происхотит (у меня фактически), то далее обрабатывается мой код ватемарка из поста 1 внутри функции, которая возвращает true. Возможно я не туда всталяю фун.наложения?и её нужно использовать позже , после возвращения true.



приведу кусок скрипта с комментариями что где работает а где нет, чтобы видно было в контексте
отсюда вызываем
...
PHP:
скопировать код в буфер обмена
  1.      if(uploadfile($url,$_FILES)!== FALSE) {
  2. //сдесь вставляем в базу - это работает
  3.           $q5 ="INSERT INTO gallery VALUES ('".$_POST[new_name]."','".$_POST['desc']."','".date("d-m-Y")."')";  
  4. //тк работает, то выводит страницу
  5.           if(@mysql_query($q5)) {
  6.           header("location:admin.php");     }}
  7.                  else {echo 'Ошибка <br/>';}
  8.                    }

...
далее функция, может чтото неправильно и Вам смешно, но я её и так уже повсякому кручу верчу
PHP:
скопировать код в буфер обмена
  1. function uploadfile($url,$FILE) {
  2.       //Проверяем, существует ли имя. -сдесь работает
  3. if($FILE['FILE']['name']){
  4.     //Проверяем размер файла-сдесь работает
  5.     if($FILE['FILE']['size'] != 0 AND $FILE['FILE']['size']<=1024000) {
  6.         //Проверяем загрузился ли файл на сервер-сдесь работает
  7.         if(is_uploaded_file($_FILES['FILE']['tmp_name'])) {
  8. $newname=$_POST[new_name];
  9.  
  10. // проверяем тип файла-сдесь работает
  11. if(!function_exists(getimagesize)){die("getimagesize() required.");}
  12. $file_types = array("image/jpeg" => "jpg","image/pjpeg" => "jpg","image/gif" => "gif","image/png" => "png",);
  13. $width=null;
  14. $img_info = getimagesize($_FILES['FILE']['tmp_name']);
  15. $img_type = $img_info["mime"];
  16. list($width, $height, $t, $attr)=$img_info;
  17. if(!$file_types[$img_type]) {
  18. die("Просим прощения, но картинка должна быть в jpeg, jpg, gif или png формате. Пожалуйста, попробуйте ещё раз.");
  19. }
  20. else
  21. {$file_suffix=$file_types[$img_type];}
  22.  
  23.                  //Перемещаем загруженный файл в необходимую папку $url
  24.                //  if(move_uploaded_file($_FILES['FILE']['tmp_name'], $url."/"$newname)) {
  25. if(move_uploaded_file($_FILES['FILE']['tmp_name'], $newname)) {
  26. //-сдесь работает
  27. //накладываем ватемарк
  28. $filename_watermark = 'watermark.png';
  29. $bb="123".$newname;
  30. $aaa=$newname ;
  31. $imgsource = imagecreatefromjpeg($aaa);//-сдесь работает
  32.   $src_w = imagesx($imgsource);
  33.   $src_h = imagesy($imgsource);
  34. $imgdest = imagecreatetruecolor($src_w, $src_h);//-сдесь работает
  35. imagecopyresampled($imgdest, $imgsource, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);//-сдесь работает
  36. $imgadd = imagecreatefrompng($filename_watermark);//-сдесь работает
  37. imagecopy($imgdest, $imgadd, 0, 0, 0, 0, imagesx($imgadd), imagesy($imgadd));// сдесь не вставляет
  38. imagejpeg($imgdest, $bb, 90);//-сдесь работает
  39.  
  40. if (! file_exists ($bb)) {die("файла нет ".$bb);}
  41.  // Чистим мусор
  42.   imagedestroy($imgadd);
  43.   imagedestroy($imgdest);
  44.   imagedestroy($imgsource);
  45.  
  46.                     //Выводим сообщение что файл обработа и загружен--сдесь работаети выполняетсяся вставка б базу...
  47.                     return TRUE;
  48.                                                                                                            }
  49.             else { return 'Произошла ошибка при перемещении файла в папку'.$url;}
  50.  
  51.                                                                               }
  52.         else {return 'Прозошла ошибка при загрузке файла на сервер';}
  53.  
  54.                                                         }
  55.     else { return 'Размер файла не должен превышать 100Кб';}
  56.                              }
  57.  
  58. else { return 'Файл должен иметь название';}
  59.  
  60.     }
  61. ?>



полагаю что не доконца работает сдесь
$imgadd = imagecreatefrompng($filename_watermark );
или совсем не работает сдесь
imagecopy($imgdest, $imgadd, 0, 0, 0, 0, imagesx($imgadd), imagesy($imgadd));

или в правах дело
файлы $newname и $bb создаются на сервере с правами rw- r-- r--
и когда я проверяю на их сервере то права не подсвечиваются - не подлежат изменению
ИТОГ
ошибка скорей сего в правах
или
переместить ф.наложения ватемарка после возвр true

вот как то так подскажите кто что может.

простите если код смешной просто кручу верчу его уже очень долкго
(Добавление)
да и полагаю сто
$_FILES,массив с данными по загруженным файлам
$FILE - до отправки -?
13. broshurkaplus - 28 Января, 2011 - 22:15:52 - перейти к сообщению
ВСЁ !!! разобрался - всё работает, просто изначально в файле ватемарка не наложил фон в фотошопе (белый фон и надпись). так что это рабочий скрипт только остаётся вставить имя файла под себя.
14. JustUserR - 29 Января, 2011 - 17:07:27 - перейти к сообщению
broshurkaplus пишет:
Всё работает, просто изначально в файле ватемарка не наложил фон в фотошопе (белый фон и надпись
В качестве возможного варианта позволяющего осуществить проверку предполагаемого PHP-приложения на предмет функционирования системы добавления watermark-элемента - допустимо произвести сравнение времени последней модификации а также контрольной суммы байт целевого файлового элемента

 

Powered by ExBB FM 1.0 RC1