PDA

View Full Version : [PHP] $this->var question..


ianaz
10-07-2006, 15:31
Salve,
ho appena iniziato con l'utilizzo delle classi e della libreria gd.
Questo pomeriggio mi sono trovato dinnanzi il seguente problema:

Il $this->variabile non mi funziona...
Mi dice Notice: Undefined property: im in c:\programmi\easyphp1-8\www\img.class.php on line 41
Il mio problema é come fare ad utilizzare la variabile $im nelle altre funzioni?
Potrei passarlo in ogni funzione ma mi pare piuttosto un codice sporco
Il codice della classe é;

potrebbero esserci piccoli errori che per provare forse ho dimenticato di rimettere a posto...

<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);

function loadImg($img_percorso, $testo)
{
$im = imagecreatefromjpeg($img_percorso);
$this->insertLogo($im, "logo.png");
$this->insertTesto($testo);
$this->saveImg();
return 1;
}

function insertLogo($im, $logoz="logo.png")
{
$watermark = imagecreatefrompng($logoz);
$waterm_w = imagesx($watermark);
$waterm_h = imagesy($watermark);
imagecopymerge($im, $watermark, 0, 0, 0, 0, $waterm_w, $waterm_h, 100);
}

function insertTesto($testo)
{

$colore['bianco'] = imagecolorallocate($im, 255, 255, 255);
$colore['blu'] = imagecolorallocate($im, 0, 0, 255);
$colore['rosso'] = imagecolorallocate($im, 255, 0, 0);
$colore['verde'] = imagecolorallocate($im, 0, 255, 0);
$colore['nero'] = imagecolorallocate($im, 0, 0, 0);
$width = imagesx($this->im);
$height = imagesy($this->im);
$testo = "www.ianaz.ch";
$lung_testo = strlen($testo);
imagestring($this->im, 5, $width/2-$lung_testo*5, $height-20, $testo, $colore['bianco']);
}
function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;
?>



Nell'altra pagina ho fatto un semplice

<?php
include "img.class.php";
$nome_img = 'img.jpg';
$immagine = $img->loadImg($nome_img, "www.ianaz.ch");
if($immagine == 1)
{
echo "<p>Immagine modificata correttamente!</p>";
}
?>

max246
10-07-2006, 17:13
Perchè devi emttere una "VAR IM" se vuoi utilizzare la stessa variabile.
Se è nella stessa funzione non serve.. ma se la utilizzi fuori dalla funzione devi dichiararla prima come var im e poi puoi usare il $this->im o $<nomeclasse>-im


:)

ianaz
10-07-2006, 17:46
Quindi basta che metto semplicemente un var $im sopra? :p

ianaz
11-07-2006, 07:50
Pure mettendo il
var $im;
non funziona.... help

max246
11-07-2006, 09:21
<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);
var $im = "";
function loadImg($img_percorso, $testo)
{
$im = imagecreatefromjpeg($img_percorso);
$this->insertLogo($im, "logo.png");
$this->insertTesto($testo);
$this->saveImg();
return 1;
}

function insertLogo($im, $logoz="logo.png")
{
$watermark = imagecreatefrompng($logoz);
$waterm_w = imagesx($watermark);
$waterm_h = imagesy($watermark);
imagecopymerge($im, $watermark, 0, 0, 0, 0, $waterm_w, $waterm_h, 100);
}

function insertTesto($testo)
{

$colore['bianco'] = imagecolorallocate($im, 255, 255, 255);
$colore['blu'] = imagecolorallocate($im, 0, 0, 255);
$colore['rosso'] = imagecolorallocate($im, 255, 0, 0);
$colore['verde'] = imagecolorallocate($im, 0, 255, 0);
$colore['nero'] = imagecolorallocate($im, 0, 0, 0);
$width = imagesx($this->im);
$height = imagesy($this->im);
$testo = "www.ianaz.ch";
$lung_testo = strlen($testo);
imagestring($this->im, 5, $width/2-$lung_testo*5, $height-20, $testo, $colore['bianco']);
}
function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;
?>

ianaz
11-07-2006, 09:31
Warning: imagecolorallocate(): supplied argument is not a valid Image resource in c:\programmi\easyphp1-8\www\img.class.php on line 29

ora mi da questo errore...praticamente non la vede come immagine

max246
11-07-2006, 09:46
<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);
var $im = "";
function loadImg($img_percorso, $testo)
{
$im = imagecreatefromjpeg($img_percorso);
$this->insertLogo($im, "logo.png");
$this->insertTesto($testo);
$this->saveImg();
return 1;
}

function insertLogo($im, $logoz="logo.png")
{
$watermark = imagecreatefrompng($logoz);
$waterm_w = imagesx($watermark);
$waterm_h = imagesy($watermark);
imagecopymerge($im, $watermark, 0, 0, 0, 0, $waterm_w, $waterm_h, 100);
}

function insertTesto($testo)
{

$colore['bianco'] = imagecolorallocate($this->im, 255, 255, 255);
$colore['blu'] = imagecolorallocate($this->im, 0, 0, 255);
$colore['rosso'] = imagecolorallocate($this->im, 255, 0, 0);
$colore['verde'] = imagecolorallocate($this->im, 0, 255, 0);
$colore['nero'] = imagecolorallocate($this->im, 0, 0, 0);
$width = imagesx($this->im);
$height = imagesy($this->im);
$testo = "www.ianaz.ch";
$lung_testo = strlen($testo);
imagestring($this->im, 5, $width/2-$lung_testo*5, $height-20, $testo, $colore['bianco']);
}
function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;
?>

ianaz
11-07-2006, 09:55
ehm....e cosa cambia?

Il codice attuale é (tolto l'inserimento del testo che é inutile):


<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);
var $im;
function loadImg($img_percorso, $testo, $posizione_x, $posizione_y)
{
$im = imagecreatefromjpeg($img_percorso);
$im_w = imagesx($im);
$im_h = imagesy($im);
$this->insertLogo($im, "logo.png");
//$wt_x = $this->calc_pos_x($posizione_x);
//$wt_y = $this->calc_pos_y($posizione_y);
$this->saveImg();
return 1;
}

function insertLogo($im, $logoz="logo.png")
{
$watermark = imagecreatefrompng($logoz);
$waterm_w = imagesx($watermark);
$waterm_h = imagesy($watermark);
imagecopymerge($im, $watermark, 0, 0, 0, 0, $waterm_w, $waterm_h, 100);
}

/*
function calc_pos_x($position_x='LEFT')
{
switch($position_x)
{
case 'LEFT':
$x = 0;
break;
case 'CENTER':
$x = $this->im_w / 2 - $this->waterm_w;
break;
case 'RIGHT':
$x = $this->im_w - $this->waterm_w;
break;
default:
$x = 0;

}
return $x;

}

function calc_pos_y($position_y='TOP')
{
switch($position_y)
{
case 'TOP':
$y = 0;
break;
case 'MIDDLE':
$y = $this->im_h / 2 - $this->waterm_h;
break;
case 'BOTTOM':
$y = $this->im_h - $this->waterm_h;
break;
default:
$y = 0;

}
return $y;

}
*/

function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;
?>


Quindi ora l'errore me lo da solamente alla creazione dell'immagine

imagepng($this->im, "lol.png");

che dice is not a valid Image resource

max246
11-07-2006, 10:03
ti potei picchiare :muro:

$im = imagecreatefromjpeg($img_percorso);

$im è una variabile locale non $this->im ....

ianaz
11-07-2006, 10:09
ti potei picchiare :muro:

$im = imagecreatefromjpeg($img_percorso);

$im è una variabile locale non $this->im ....
e infatti io ^come ho fatto? -.-

$im = imagecreatefromjpeg($img_percorso);

max246
11-07-2006, 10:29
ora ti picchio veramente :) tanto sei a 2 km di distanza vengo li....


$im è una variabile che tiene solo nella funziona non nella classe, se metti $this->im la inserisci nella variabile dichiarata nella classe

DEVI METTERE $this->im non $im :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro:

ianaz
11-07-2006, 10:36
ora ti picchio veramente :) tanto sei a 2 km di distanza vengo li....


$im è una variabile che tiene solo nella funziona non nella classe, se metti $this->im la inserisci nella variabile dichiarata nella classe

DEVI METTERE $this->im non $im :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro:

uahhahhah cucciolooooo
tu intendi fare:

function loadImg($img_percorso, $posizione_x, $posizione_y)
{
$this->im = imagecreatefromjpeg($img_percorso);
$im_w = imagesx($im);
$im_h = imagesy($im);
$this->insertLogo($im, "logo.png");
$wt_x = $this->calc_pos_x($posizione_x);
$wt_y = $this->calc_pos_y($posizione_y);
$this->saveImg();
return 1;
}

giusto?

e guarda gli errori che mi da dopo:

Notice: Undefined variable: im in c:\programmi\easyphp1-8\www\img.class.php on line 12

Warning: imagesx(): supplied argument is not a valid Image resource in c:\programmi\easyphp1-8\www\img.class.php on line 12

Notice: Undefined variable: im in c:\programmi\easyphp1-8\www\img.class.php on line 13

Warning: imagesy(): supplied argument is not a valid Image resource in c:\programmi\easyphp1-8\www\img.class.php on line 13

Notice: Undefined variable: im in c:\programmi\easyphp1-8\www\img.class.php on line 14

Warning: imagecopymerge(): supplied argument is not a valid Image resource in c:\programmi\easyphp1-8\www\img.class.php on line 26


é nella funzione loadImg() che creo la variabile $im e quindi devo utilizzarla come $im al suo interno no?!



LOL

max246
11-07-2006, 10:51
<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);
var $im;

function loadImg($img_percorso, $testo)
{
$this->im = imagecreatefromjpeg($img_percorso);
$this->insertLogo($this->im, "logo.png");
$this->insertTesto($testo);
$this->saveImg();
return 1;
}

function insertLogo($im, $logoz="logo.png")
{
$watermark = imagecreatefrompng($logoz);
$waterm_w = imagesx($watermark);
$waterm_h = imagesy($watermark);
imagecopymerge($im, $watermark, 0, 0, 0, 0, $waterm_w, $waterm_h, 100);
}

function insertTesto($testo)
{

$colore['bianco'] = imagecolorallocate($this->im, 255, 255, 255);
$colore['blu'] = imagecolorallocate($this->im, 0, 0, 255);
$colore['rosso'] = imagecolorallocate($this->im, 255, 0, 0);
$colore['verde'] = imagecolorallocate($this->im, 0, 255, 0);
$colore['nero'] = imagecolorallocate($this->im, 0, 0, 0);
$width = imagesx($this->im);
$height = imagesy($this->im);
$testo = "www.ianaz.ch";
$lung_testo = strlen($testo);
imagestring($this->im, 5, $width/2-$lung_testo*5, $height-20, $testo, $colore['bianco']);
}
function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;
?>



e se non funziona cosi ti uccidi...

ianaz
11-07-2006, 10:53
Ok, grazie mille

quindi nel nuovo ora é così:


function loadImg($img_percorso, $posizione_x, $posizione_y)
{
$this->im = imagecreatefromjpeg($img_percorso);
$im_w = imagesx($this->im);
$im_h = imagesy($this->im);
$this->insertLogo($this->im, "logo.png");
$wt_x = $this->calc_pos_x($posizione_x);
$wt_y = $this->calc_pos_y($posizione_y);
$this->saveImg();
return 1;
}


ma non sapevo che bisognava mettere $this->im anche all'interno dove si crea...come mai?
Perché l'ho dichiarata sopra con il var?

max246
11-07-2006, 10:55
$im con $this->im ( sta diventando una chat di msn questo topic...)

ianaz
11-07-2006, 10:56
e ma lol, se entro in msn mi uccidono :p

ianaz
11-07-2006, 11:02
il var $im; si poteva anche tralasciare se non sbaglio no?!

ianaz
11-07-2006, 11:14
Ok così é perfettamente funzionante:


<?php
class img
{
var $errore = array(
"Errore sconosciuto", // 0
"Errore nel caricamento dell immagine" // 1
);
var $im;
function loadImg($img_percorso, $posizione_x, $posizione_y)
{
$this->im = imagecreatefromjpeg($img_percorso);
$this->im_w = imagesx($this->im);
$this->im_h = imagesy($this->im);
$this->logoProperties("logo.png");
$this->wt_x = $this->calc_pos_x($posizione_x);
$this->wt_y = $this->calc_pos_y($posizione_y);
imagecopymerge($this->im, $this->watermark, $this->wt_x, $this->wt_y, 0, 0, $this->waterm_w, $this->waterm_h, 100);
$this->saveImg();
return 1;
}

function logoProperties($logoz="logo.png")
{
$this->watermark = imagecreatefrompng($logoz);
$this->waterm_w = imagesx($this->watermark);
$this->waterm_h = imagesy($this->watermark);
}


function calc_pos_x($position_x='LEFT')
{
switch($position_x)
{
case 'LEFT':
$x = 0;
break;
case 'CENTER':
$x = $this->im_w / 2 - $this->waterm_w / 2;
break;
case 'RIGHT':
$x = $this->im_w - $this->waterm_w;
break;
default:
$x = 0;

}
return $x;

}

function calc_pos_y($position_y='TOP')
{
switch($position_y)
{
case 'TOP':
$y = 0;
break;
case 'MIDDLE':
$y = $this->im_h / 2 - $this->waterm_h / 2;
break;
case 'BOTTOM':
$y = $this->im_h - $this->waterm_h;
break;
default:
$y = 0;

}
return $y;

}

function saveImg()
{
imagepng($this->im, "lol.png");
}
}
$img = new img;

?>





:D
grazie

max246
11-07-2006, 13:31
non andava bene quello che ti avevo fatto io? :confused: :mbe:

ianaz
11-07-2006, 13:54
non andava bene quello che ti avevo fatto io? :confused: :mbe:
???
si...bigolo :)