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

Форум PHP

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

 

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

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

тема: когда пишем что-то при загрузке на фотографии, шрифт где должен быть установлен?
 
 автор: elenaki   (20.03.2009 в 20:46)   письмо автору
 
 

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


$color = imagecolorallocatealpha($src_img, 255, 255, 255, 0);
$x = intval(($size0/2) - 200);
$y = intval($size1/2);
$box = imagettftext($dst_img, 26, 0, $x, $y, $color, "SPROKETF.TTF", "text na fotke");

  Ответить  
 
 автор: sim5   (20.03.2009 в 21:12)   письмо автору
 
   для: elenaki   (20.03.2009 в 20:46)
 

Шрифт должен быть на сервере и указан в пути, если в папке со скритом, то хватит и имени. Все.

  Ответить  
 
 автор: elenaki   (20.03.2009 в 21:31)   письмо автору
 
   для: sim5   (20.03.2009 в 21:12)
 

на сервере должен быть установлен? или просто лежать в папке?
кто ж мне даст на сервере шрифты устанавливать? :O

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

  Ответить  
 
 автор: sim5   (20.03.2009 в 21:57)   письмо автору
 
   для: elenaki   (20.03.2009 в 21:31)
 

Просто лежать в папке. Как вы устнавите шрифт на сервере?) Что значит "с мого" компа, и что "с чужого", я не понял.

  Ответить  
 
 автор: elenaki   (20.03.2009 в 22:12)   письмо автору
 
   для: sim5   (20.03.2009 в 21:57)
 

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

  Ответить  
 
 автор: sim5   (21.03.2009 в 04:43)   письмо автору
 
   для: elenaki   (20.03.2009 в 22:12)
 

Такого не может быть - к шрифтам клиента GD уж никак не доберется :)

  Ответить  
 
 автор: elenaki   (21.03.2009 в 10:18)   письмо автору
 
   для: sim5   (21.03.2009 в 04:43)
 

значит, я сошла с ума. какая досада!
сделала модуль загрузки фоток. клиент попросил "водяной знак". никогда не делала, но с
помощью форума сделала и это. тестировала на локалке, на сервере - все работалo. а
вчера захожу на сайт и вижу - фотки БЕЗ надписи. загрузить их без моего модуля, т.е.
непосредственно по FTP, клиент не мог. пути к фоткам должны быть прописаны в базе.
да и не знает клиент таких умных слов. он знает путь до формы с выбором фотки и кнoпку
"Загрузить", все. как ему удалось в обход формы грузануть чистые фотки, да еще и базу
обновить - загадка. сама попробовала изменить те фотки, которые он загрузил - грузятся
с надписью...

  Ответить  
 
 автор: sim5   (21.03.2009 в 10:28)   письмо автору
 
   для: elenaki   (21.03.2009 в 10:18)
 

Не знаю кто сошел с ума:), но шрифт по тому и "ложится" для скрипта, чтобы не зависеть от факторов. А отсутствие надписей можно объяснить, например, если логика скрипта выполнена так, что надпись наносится по пост-условию, то возможно, что эта часть не была выполнена. Иначе объяснить эту ситуацию не возможно.

  Ответить  
 
 автор: Trianon   (21.03.2009 в 11:45)   письмо автору
 
   для: sim5   (21.03.2009 в 10:28)
 

Нужно смотреть код.
Если скрипт построен так, что сперва сохраняет изображение по целевому пути без водяного знака, а затем открывает его в GDLIB, ставит знак и сохраняет по тому же самому пути, то происходящее вполне объяснимо.
Любая исключительная ситуация на стадии работы GDLIB (нехватка памяти, к примеру) приведет к тому, что изображение останется загруженным без водяного знака.

  Ответить  
 
 автор: sim5   (21.03.2009 в 12:24)   письмо автору
 
   для: Trianon   (21.03.2009 в 11:45)
 

Ну я о чем? :)

  Ответить  
 
 автор: Valick   (21.03.2009 в 10:49)   письмо автору
 
   для: elenaki   (21.03.2009 в 10:18)
 

Вы бы код показали, на всяк случай)

  Ответить  
 
 автор: elenaki   (21.03.2009 в 12:21)   письмо автору
 
   для: Valick   (21.03.2009 в 10:49)
 

да, вроде, у меня ничего не сохраняется предварительно... вычисляю размеры, уменьшаю
пропорционально, рисую надпись, потом сохраняю, потом очищаю память. перенесла
добавление в базу вниз, после загрузки. a клиент вполне мог мегабайтные фотки грузить,
такие имена файлов обычно цифровой аппарат дает... вот уж действительно: дураки -
двигатели прогресса. нормальному человеку не придет в голову грузить мегабайты по сети. :(


if ($_FILES['photos']['tmp_name'] != "") {
$size = getimagesize($_FILES['photos']['tmp_name']);

if ($size[0]>=$size[1])
{
    $size0=540;
    $size1=540/$size[0]*$size[1];
    $size2=130;
    $size3=130/$size[0]*$size[1];
}
else
{
    $size1=540;
    $size0=540/$size[1]*$size[0];
    $size3=130;
    $size2=130/$size[1]*$size[0];
}

$src_img=imagecreatefromjpeg($_FILES['photos']['tmp_name']);
$dst_img=imagecreatetruecolor($size0, $size1);
$dst_img1=imagecreatetruecolor($size2, $size3);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $size0, $size1, $size[0], $size[1]);
imagecopyresampled($dst_img1, $src_img, 0, 0, 0, 0, $size2, $size3, $size[0], $size[1]);


$color = imagecolorallocatealpha($src_img, 255, 255, 255, 0);
$x = intval(($size0/2) - 200);
$y = intval($size1/2);
$box = imagettftext($dst_img, 26, 0, $x, $y, $color, "SPROKETF.TTF", "text na fotke");

imagejpeg($dst_img, "../../photos/".$_FILES['photos']['name'], 90);
imagejpeg($dst_img1, "../../photos/s_".$_FILES['photos']['name'], 90);
imagedestroy($src_img);
imagedestroy($dst_img);
imagedestroy($dst_img1);
}//==================== end of upload photo

  Ответить  
 
 автор: sim5   (21.03.2009 в 12:30)   письмо автору
 
   для: elenaki   (21.03.2009 в 12:21)
 

У вас собственно на недопустимый размер как раз нет проверки.

  Ответить  
 
 автор: elenaki   (21.03.2009 в 13:08)   письмо автору
 
   для: sim5   (21.03.2009 в 12:30)
 

так я и мысли не допускала, что они по 10Мб соберутся грузить... и я не знала, что GD не
успеет нарисовать то, что должна... а если поставить проверку, то большие фотки не будут
грузиться вообще, и клиент будет ворчать, т.к. уменьшить их он тоже не сможет. а если
делать надпись не GD, т.е. не рисовать ее на фотке, а наклеивать поверх другую, прозрачную,
маленькую картинку с надписью? это прокатит при больших размерах загружаемых фоток?

  Ответить  
 
 автор: Trianon   (21.03.2009 в 13:17)   письмо автору
 
   для: elenaki   (21.03.2009 в 12:21)
 

чтобы рационально расходовать память, нужно поменять порядок формирования изображений.
К примеру, при размерах загружаемой картинки 1024*768 ,
для $src_img потребуется памяти около 3840 Кб
для $dst_img - около 1068 Кб
для $dst_img1 - около 60 Кб
последнее - мелочь, а первое запросто может привести к тому, что загрузить шрифт и выполнить надпись не получится.

А можно сделать так:

$src_img=imagecreatefromjpeg($_FILES['photos']['tmp_name']); // захватили 3840 Кб
$dst_img1=imagecreatetruecolor($size2, $size3);
imagecopyresampled($dst_img1, $src_img, 0, 0, 0, 0, $size2, $size3, $size[0], $size[1]);
imagejpeg($dst_img1, "../../photos/s_".$_FILES['photos']['name'], 90);
imagedestroy($dst_img1); // поскольку более ничего с ним мы не делаем. 60Кб освободили 


$dst_img=imagecreatetruecolor($size0, $size1); // захватили еще 1068 Кб
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $size0, $size1, $size[0], $size[1]);
imagedestroy($src_img); // освободили исходное изображение - 3840 Кб


$color = imagecolorallocatealpha($src_img, 255, 255, 255, 0);
$x = intval(($size0/2) - 200);
$y = intval($size1/2);
// на свободной памяти подгружаем шрифт, делаем надпись. 
$box = imagettftext($dst_img, 26, 0, $x, $y, $color, "SPROKETF.TTF", "text na fotke");

imagejpeg($dst_img, "../../photos/".$_FILES['photos']['name'], 90);
imagedestroy($dst_img); // освобождаем память

  Ответить  
 
 автор: elenaki   (21.03.2009 в 15:23)   письмо автору
 
   для: Trianon   (21.03.2009 в 13:17)
 

ааааааа! теперь шрифт стал черный!!!!! был белый! ничего ведь не меняла! в команде
$color = imagecolorallocatealpha($src_img, 255, 255, 255, 30); 

все три 255 - это ведь и есть БЕЛЫЙ цвет? а 30 - это прозрачность? что за засада?
не рано ли мы сделали imagedestroy($src_img); - ведь цвет берется из него строчкой ниже...


отбой. поставила в выборе цвета другое имя... теперь белый. по крайней мере с моего
компа грузит 800Кб-е фотки (а если больше, уже хостер ругается, запрос отвергнут, говорит).

  Ответить  
 
 автор: sim5   (21.03.2009 в 15:32)   письмо автору
 
   для: elenaki   (21.03.2009 в 15:23)
 

Да, вы определили палитру для ресурса, и тут же удалили его.

  Ответить  
 
 автор: Trianon   (21.03.2009 в 16:25)   письмо автору
 
   для: elenaki   (21.03.2009 в 15:23)
 

ну да.
создавать цвет нужно в контексте целевой картинки, а не исходной. Я не заметил.

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

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