|
|
|
|
|
для: elenaki
(21.03.2009 в 15:23)
| | ну да.
создавать цвет нужно в контексте целевой картинки, а не исходной. Я не заметил. | |
|
|
|
|
|
|
|
для: 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Кб-е фотки (а если больше, уже хостер ругается, запрос отвергнут, говорит). | |
|
|
|
|
|
|
|
для: 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); // освобождаем память
|
| |
|
|
|
|
|
|
|
для: sim5
(21.03.2009 в 12:30)
| | так я и мысли не допускала, что они по 10Мб соберутся грузить... и я не знала, что GD не
успеет нарисовать то, что должна... а если поставить проверку, то большие фотки не будут
грузиться вообще, и клиент будет ворчать, т.к. уменьшить их он тоже не сможет. а если
делать надпись не GD, т.е. не рисовать ее на фотке, а наклеивать поверх другую, прозрачную,
маленькую картинку с надписью? это прокатит при больших размерах загружаемых фоток? | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 12:21)
| | У вас собственно на недопустимый размер как раз нет проверки. | |
|
|
|
|
|
|
|
для: Trianon
(21.03.2009 в 11:45)
| | Ну я о чем? :) | |
|
|
|
|
|
|
|
для: 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 в 10:28)
| | Нужно смотреть код.
Если скрипт построен так, что сперва сохраняет изображение по целевому пути без водяного знака, а затем открывает его в GDLIB, ставит знак и сохраняет по тому же самому пути, то происходящее вполне объяснимо.
Любая исключительная ситуация на стадии работы GDLIB (нехватка памяти, к примеру) приведет к тому, что изображение останется загруженным без водяного знака. | |
|
|
|
|
|
|
|
для: elenaki
(21.03.2009 в 10:18)
| | Вы бы код показали, на всяк случай) | |
|
|
| |
|