while в whil'e? + imagick

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

Здравствуйте, столкнулся с проблемой. Не могу после селекта в цикле вайл выполнять следуюющее:

$result = mysql_query("SELECT id, rating, weight, height, folder, category FROM dle_post WHERE folder='".$date."' ORDER BY rating DESC LIMIT 30");


while($row = mysql_fetch_array($result))
{
$ii++;
if ($row['category'] != 0 AND $row['category'] != 3) {
$false = 0;

if ($row['weight'] >= 2560 && $row['height'] >= 1600 && $false == 0) {

$a = 2560; $b = 1600;
$aa = $a-145; $bb = $b-23;
$image = new imagick("images/".$row['folder']."/site_name_".$row['id'].".jpg");
$text = "www.watermark.com";
$draw = new ImagickDraw();
$draw->setGravity( Imagick::GRAVITY_CENTER );
$draw->setFont( "Comfortaa.ttf" );
$draw->setFontSize( 18 );
$im = new imagick();
$properties = $im->queryFontMetrics( $draw, $text );
$watermark['w'] = intval( $properties["textWidth"] + 5 );
$watermark['h'] = intval( $properties["textHeight"] +5 );
$im->newImage( $watermark['w'], $watermark['h'],
new ImagickPixel( "transparent" ) );
$it = $image->getPixelRegionIterator( 0, 0, $watermark['w'], $watermark['h'] );
$luminosity = 0;
$i = 0;
while( $row = $it->getNextIteratorRow() )
{
foreach ( $row as $pixel )
{ $hsl = $pixel->getHSL();
$luminosity += $hsl['luminosity'];
$i++; }
}
$textColor = ( ( $luminosity / $i )> 0.5 ) ?
new ImagickPixel( "black" ) :
new ImagickPixel( "white" );
$draw->setFillColor( $textColor );
$draw->setFillAlpha( 0.5 );
$im->setGravity( Imagick::GRAVITY_CENTER );
$im->annotateImage( $draw, 0, 0, 0, $text );
$watermark = $im->clone();
$watermark->setImageBackgroundColor( $textColor );
$watermark->shadowImage( 10, 2, 2, 2 );
$watermark->compositeImage( $im, Imagick::COMPOSITE_OVER, 0, 0 );
$image->compositeImage( $watermark, Imagick::COMPOSITE_OVER, $aa, $bb );
$image->cropThumbnailImage( 2560, 1600 );
$image->writeImage( "tor/".$date."/site_name_$ii.jpg" );
$false = 1;
}

}
}

очень прошу помочь разобраться в чем же проблема(

Ошибку выдает: Fatal error: Cannot use object of type Imagick as array in /home/name/data/www/site.com/imtor.php on line 38

speen добавил 02.11.2010 в 14:26

апнусь, т.к. обновил и ошибку видно.

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

Проблема в этих строках:


while($row = mysql_fetch_array($result))
while( $row = $it->getNextIteratorRow() )

Сначала вы в $row записвыаете результат от запроса из БД, а затем пытаетесь что-то с картинкой сделать.

Ругается он когда после работы с изображением пытаетесь объект как массив использовать.

Используйте другую переменную в каком-либо месте.

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