Watermark da database e file

sto scrivendo una classe semplicissima per aggiungere il watermark alle immagini,

solo che ( leggendo l'articolo su sitepoint ) sto avendo alcuni problemi perchè non conosco da dove arriva l'immagine ( database o file ), il codice è questo :

      public function watermark($handle)
   {
      $watermark = $this->open( DIR_WATERMARKS . 'default.png');
      
      $wat_h = imagesy( $watermark );
      $wat_w = imagesx( $watermark );
      
      $img_h = imagesy( $handle );
      $img_w = imagesx( $handle );

      $pos_x = $img_h - $wat_h - 5;
      $pos_y = $img_w - $wat_w - 5;
      
      $image = imagecreatetruecolor($wat_w, $wat_h);
      $image = $handle;
            
      imagecopymerge($image, $watermark, $pos_x, $pos_y, 0, 0, $wat_w, $wat_h, 100);
      
   }

il problema è che nell'articolo affrontano il problema partendo da un file passato come nome file via get, invence io mi trovo nella situazione in cui i file possono essere nel database o nel filesystem ( qui andrebbe bene lo script dell'articolo ).

Come devo sistemare il codice per utilizzarlo in tutt'edue i modi?

e affinche funzioni, è ovvio ( ora non funzia  ;D )

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Parti dalla funzione che effettua l'aggiunta del watermark, imagecopymerge(), e cerca quali sono i parametri che necessita. Questi parametri devono essere disponibili sia se l'immagine è su file, sia se è su DB.

Quindi la funzione della classe che effettua il watermark deve ricevere come parametri tutte queste informazioni, in modo che non debba preoccuparsi di ricercarle. Poi scrivi 2 funzioni in grado di ottenere tali parametri, una partendo dal presupposto che l'immagine è su file, l'altra invece supponendo che il file sia nel DB. Tieni presente che in questo secondo caso forse è necessario memorizzare altre informazioni nel database (altezza, larghezza?) per ciascuna foto perché forse non sarà possibile ottenerle in altro modo.

A questo punto il gioco è fatto.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

domani mi metterò all'opera, grazie Gianni giravo nel buio prima :)

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Gianni questa è la funzione che mi restituisce l'handle dell'immagine :

   public function open($filename)
   {      
      switch ( true ) {
         case ($handle = @imagecreatefromjpeg($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromgif($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefrompng($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromgd2($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromwbmp($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromxpm($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromxbm($filename)) !== false :
            return $handle;
            break;
         case ($handle = @imagecreatefromstring(file_get_contents($filename))) !== false :
            return $handle;
            break;
      }
        return false;
   }

mentre questa è la funzione che DOVREBBE fare il watermark :

   public function watermark($img)
   {   
      $watermark = $this->open( DIR_WATERMARKS . 'default.png' );   
      $handle   = $this->open($img);
      
      imagealphablending($watermark, false);
      imagesavealpha($watermark, true);
      
      $wat_h = imagesy( $watermark );
      $wat_w = imagesx( $watermark );   
      $img_h = imagesy( $handle );
      $img_w = imagesx( $handle );
      
      $pos_x = ($img_h - $wat_h) - 5;
      $pos_y = ($img_w - $wat_w) - 5;
      
      imagecopymerge($handle, $watermark, 10, 10, 0, 0, $wat_w, $wat_h, 80);
      
      $this->destroyimage($watermark);
      
      return $handle;
      
   }

ma non dico che il risultato è penoso , una PNG trasparente me la mette come watermark sotto forma di bollino rosso e bianco ( un quadrato rosso al posto del carattere e il bianco al posto del trasparente ).

PS: come posso usare un testo come watermark e ripeterlo su tutta l'immagine, magari anche senza usare altre immagini esterne?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda