Вызов функции

S
На сайте с 15.12.2009
Offline
67
508

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

http://blog.pracucci.com/2008/08/30/watermarks-with-php-and-imagick/

когда делаю:

drawWatermark ("pic.jpg", "wm.png", "0");

выдает ошибку: Parse error: syntax error, unexpected T_PRIVATE in /home/speen/data/www/site.ru/watm.php on line 3

juniorspecialistphp
На сайте с 08.08.2010
Offline
25
#1

Не хватает символа в строке 3

Пишу скрипты любой сложности на РНР. (http://elagin.su)
S
На сайте с 15.12.2009
Offline
67
#2

строка 3, это начало функции:

private function drawWatermark($image, $watermark, $padding = 0)

{
// Check if the watermark is bigger than the image
$image_width = $image->getImageWidth();
$image_height = $image->getImageHeight();
$watermark_width = $watermark->getImageWidth();
$watermark_height = $watermark->getImageHeight();

if ($image_width < $watermark_width + $padding || $image_height < $watermark_height + $padding) {
return false;
}

// Calculate each position
$positions = array();
$positions[] = array(0 + $padding, 0 + $padding);
$positions[] = array($image_width - $watermark_width - $padding, 0 + $padding);
$positions[] = array($image_width - $watermark_width - $padding, $image_height - $watermark_height - $padding);
$positions[] = array(0 + $padding, $image_height - $watermark_height - $padding);

// Initialization
$min = null;
$min_colors = 0;

// Calculate the number of colors inside each region
// and retrieve the minimum
foreach($positions as $position)
{
$colors = $image->getImageRegion(
$watermark_width,
$watermark_height,
$position[0],
$position[1])->getImageColors();

if ($min === null || $colors <= $min_colors)
{
$min = $position;
$min_colors = $colors;
}
}

// Draw the watermark
$image->compositeImage(
$watermark,
Imagick::COMPOSITE_OVER,
$min[0],
$min[1]);

return true;
}
?>
D
На сайте с 09.07.2009
Offline
79
#3

Уберите private.

ДП
На сайте с 23.11.2009
Offline
203
#4

Либо у вас неполный файл watm.php, либо одно из двух.

В данном случае drawWatermark - это метод класса. И даже если вы вычлените его в отдельную функцию, то посмотрите на первый параметр - это не имя файла с картинкой.

В строке 6:

 $image_width         = $image->getImageWidth(); 

Первым параметром должен быть объект, судя по всему.

Да и второй параметр судя по строке:

$watermark_width     = $watermark->getImageWidth(); 

Тоже не имя файла, а объект.

D
На сайте с 09.07.2009
Offline
79
#5

Дикий пионер, это уже не относится к вопросу ТС.

S
На сайте с 15.12.2009
Offline
67
#6

Дикий пионер, а вы бы не могли помочь создать 2 объекта?

пожалуйста, очень нужно!

privat там не влияет.

D
На сайте с 09.07.2009
Offline
79
#7

Эти объекты, судя по всему, должны быть созданы функциями типа imagecreatefromjpeg ( string $filename ) и т.д.

digwnews добавил 02.11.2010 в 21:47

И вообще на вашу тему посмотрите здесь: http://www.php.net/manual/en/ref.image.php

stifler_x
На сайте с 19.06.2008
Offline
193
#8

Чтобы это добро работало, нужна дополнительная библиотека http://php.net/manual/en/book.imagick.php

Смотрите, если ли она у вас.

ДП
На сайте с 23.11.2009
Offline
203
#9
speen:
Дикий пионер, а вы бы не могли помочь создать 2 объекта?
пожалуйста, очень нужно!
privat там не влияет.

Я с imagemagick работаю через командную только, поэтому вряд ли что-то подсказать смогу. Что за объект там должен быть я не знаю и из приведенного кода это не очень понятно :(

Если вам надо просто наложить одну картинку на другую - это можно одной командой сделать, типа:


composite -geometry +130+60 rob.jpg adv.png adv.png

Накладывает картинку rob.jpg на adv.png со смещением 130 и 60 пикселей (по х и у соответств), если вам надо от какого-то края - то можно укзаать явно парметр -gravity, в общем там настроек много достаточно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий