|
|
|
| когда пишем что-то при загрузке на фотографии, шрифт где должен быть установлен?
я просто кинула в ту же папку, указала к нему путь. когда гружу фотку со своего компа -
пишет на ней. с другого - не пишет. кто виноват? посмотрела - шрифт и на моем компе
НЕ установлен.
$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");
|
| |
|
|
|
|
|
|
|
для: elenaki
(20.03.2009 в 20:46)
| | Шрифт должен быть на сервере и указан в пути, если в папке со скритом, то хватит и имени. Все. | |
|
|
|
|
|
|
|
для: sim5
(20.03.2009 в 21:12)
| | на сервере должен быть установлен? или просто лежать в папке?
кто ж мне даст на сервере шрифты устанавливать? :O
у меня он именно что лежит в папке и скрипту указано его имя. но с моего компа фотки с
надписями грузятся, а с чужого без. | |
|
|
|
|
|
|
|
для: elenaki
(20.03.2009 в 21:31)
| | Просто лежать в папке. Как вы устнавите шрифт на сервере?) Что значит "с мого" компа, и что "с чужого", я не понял. | |
|
|
|
|
|
|
|
для: sim5
(20.03.2009 в 21:57)
| | в веб-интерфейс по загрузке фоток можно заходить с разных компьютеров. когда я гружу
со своего компа - все фотки ложатся на сервер с надписями нужным шрифтом. когда
другие люди со своих компов это делают - фотки ложатся чистенькие. вот сижу, голову
ломаю, что это может быть. | |
|
|
|
|
|
|
|
для: elenaki
(20.03.2009 в 22:12)
| | Такого не может быть - к шрифтам клиента GD уж никак не доберется :) | |
|
|
|
|
|
|
|
для: sim5
(21.03.2009 в 04:43)
| | значит, я сошла с ума. какая досада!
сделала модуль загрузки фоток. клиент попросил "водяной знак". никогда не делала, но с
помощью форума сделала и это. тестировала на локалке, на сервере - все работалo. а
вчера захожу на сайт и вижу - фотки БЕЗ надписи. загрузить их без моего модуля, т.е.
непосредственно по FTP, клиент не мог. пути к фоткам должны быть прописаны в базе.
да и не знает клиент таких умных слов. он знает путь до формы с выбором фотки и кнoпку
"Загрузить", все. как ему удалось в обход формы грузануть чистые фотки, да еще и базу
обновить - загадка. сама попробовала изменить те фотки, которые он загрузил - грузятся
с надписью... | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 10:18)
| | Не знаю кто сошел с ума:), но шрифт по тому и "ложится" для скрипта, чтобы не зависеть от факторов. А отсутствие надписей можно объяснить, например, если логика скрипта выполнена так, что надпись наносится по пост-условию, то возможно, что эта часть не была выполнена. Иначе объяснить эту ситуацию не возможно. | |
|
|
|
|
|
|
|
для: sim5
(21.03.2009 в 10:28)
| | Нужно смотреть код.
Если скрипт построен так, что сперва сохраняет изображение по целевому пути без водяного знака, а затем открывает его в GDLIB, ставит знак и сохраняет по тому же самому пути, то происходящее вполне объяснимо.
Любая исключительная ситуация на стадии работы GDLIB (нехватка памяти, к примеру) приведет к тому, что изображение останется загруженным без водяного знака. | |
|
|
|
|
|
|
|
для: Trianon
(21.03.2009 в 11:45)
| | Ну я о чем? :) | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 10:18)
| | Вы бы код показали, на всяк случай) | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 12:21)
| | У вас собственно на недопустимый размер как раз нет проверки. | |
|
|
|
|
|
|
|
для: sim5
(21.03.2009 в 12:30)
| | так я и мысли не допускала, что они по 10Мб соберутся грузить... и я не знала, что GD не
успеет нарисовать то, что должна... а если поставить проверку, то большие фотки не будут
грузиться вообще, и клиент будет ворчать, т.к. уменьшить их он тоже не сможет. а если
делать надпись не GD, т.е. не рисовать ее на фотке, а наклеивать поверх другую, прозрачную,
маленькую картинку с надписью? это прокатит при больших размерах загружаемых фоток? | |
|
|
|
|
|
|
|
для: 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); // освобождаем память
|
| |
|
|
|
|
|
|
|
для: Trianon
(21.03.2009 в 13:17)
| | ааааааа! теперь шрифт стал черный!!!!! был белый! ничего ведь не меняла! в команде
$color = imagecolorallocatealpha($src_img, 255, 255, 255, 30);
|
все три 255 - это ведь и есть БЕЛЫЙ цвет? а 30 - это прозрачность? что за засада?
не рано ли мы сделали imagedestroy($src_img); - ведь цвет берется из него строчкой ниже...
отбой. поставила в выборе цвета другое имя... теперь белый. по крайней мере с моего
компа грузит 800Кб-е фотки (а если больше, уже хостер ругается, запрос отвергнут, говорит). | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 15:23)
| | Да, вы определили палитру для ресурса, и тут же удалили его. | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 15:23)
| | ну да.
создавать цвет нужно в контексте целевой картинки, а не исходной. Я не заметил. | |
|
|
|
|