Newsgroup: it.comp.www.php
Titolo: Librerie Gd: Help Cornice

Salve a tutti,
sono alle prese con la creazione del solito upload foto con
ridimensionamento all'interno di una cornice logicamente in PHP.
Vorrei capire come si realizza una semplice funzione che recupera un
file jpg (la cornice) e gli sovrappone l'immagine inviata dall'utente.
In sintesi dovrei
1. recuperare il file dell'utente
2. creare la "Tela" dove inserire la Cornice
3. ridimensionare il file utente affinchè entri nella cornice
4. sovrapporre l'immagine dell'utente sulla cornice
5. salvare il file
Non sono molto "ferrato" con le GD ma se avete un esempio ve ne sarei
veramente grato.
Grazie mille
Mikunos


-- 
Su, non fare cosi', vedrai che avrai tante porte aperte...
A proposito, la vedi quella porta? Bene, adesso infilala e
togliti dai piedi... (G.)

Mikunos ha scritto:

invece di "sovrapporre la cornice", per evitare di dover lavorare con 
trasparenze, ti convine sovrapporre le porzioni di cornici(rappresentate 
da 4 immagini rettangolari, se la cornice è regolare).
Non importa essere "ferrati" con le gd per fare questo, è sufficiente 
documentarsi un pelo: 
http://www.php.net/manual/it/ref.image.php
, dove 
trovi diversi esempi. QUi un tutorial 
http://www.nyphp.org/content/presentations/GDintro/
ciao

La cornice è un quadrato leggermente ruotato di una 10ina di gradi
sulla sinistra. La cornice non è molto regolare e per questo cercherò
di sovrapporre o la cornice alla foto o viceversa.
Qualche altro consiglio?
Grazie mille delle risposte, sono alle prese però con un codice
estraneo e alle volte si impazzisce per delle stupidaggini.
A presto
mikunos

Mikunos ha scritto:

Quindi hai bisogno di lavorare con le trasparenze.
Dai un'occhio a questa nota:
http://www.php.net/manual/it/function.imagecopy.php#27287

Caspita non riesco a combinare niente di buono! Non riesco ad unire le
immagini una sull'altra!
Questo è quello che sono riuscito a fare finora. Ma vedo un quadrato
nero con sopra un'immagine o l'altra mai tutt'e due insieme.
<?php
header('Content-type: image/jpg');
$myimage = resizeImage('user.jpg', '154', '187');
print $myimage;
function resizeImage($filename, $newwidth, $newheight){
   list($width, $height) = getimagesize($filename);
   if($width > $height && $newheight < $height){
       $newheight = $height / ($width / $newwidth);
   } else if ($width < $height && $newwidth < $width) {
       $newwidth = $width / ($height / $newheight);
   } else {
       $newwidth = $width;
       $newheight = $height;
   }
   $source1 = imagecreatetruecolor(154, 187);
   $source2 = imagecreatefromjpeg("canvas.jpg");
   $source3 = imagecreatefromjpeg($filename);
   imagecopyresized($source1, $source3, 0, 0, 0, 0, $newwidth,
$newheight, 154, 187);
   return imagejpeg($source1);
}
?>
Grazie
Mikunos

Sto perdendo la testa con questo codice esiste un'anima pìa che può
darmi una mano?
grazie
Mikunos

Mikunos ha scritto:

in precedenza ti ho consigliato di leggere questa nota:
http://www.php.net/manual/it/function.imagecopy.php#27287
Cosa non ti è chiaro?

Ciao Magilla,
   la funzione a cui ti riferisci è questa:
$board = imagecreatefrompng ("board.png");
$pawn  = imagecreatefrompng ("pawn.png");
imagecolortransparent ($pawn, imagecolorat ($pawn, 0, 0));
imagecopy ($board, $pawn, $x, $y, 0, 0, $pawnWidth, $pawnHeight);
imagedestroy ($pawn);
ora analizzandola:
:: Richiama la prima immagine in formato PNG
$board = imagecreatefrompng ("board.png");
:: Richiama la seconda immagine in formato PNG
$pawn  = imagecreatefrompng ("pawn.png");
:: Questa non l'ho capita bene: Serve per impostare il colore di
trasparenza?
imagecolortransparent ($pawn, imagecolorat ($pawn, 0, 0));
:: Copia $pawn in $board ma  $pawnWidth e  $pawnWidth che valori sono?
imagecopy ($board, $pawn, $x, $y, 0, 0, $pawnWidth, $pawnHeight);
:: Distrugge l'immagine
imagedestroy ($pawn);
Non riesco ancora a capire come realizzare questa piccola funzione.
Devo sovrapporre, secondo te l'immagine della cornice alla foto inviata
o viceversa?
Grazie del tuo aiuto
Mikunos

ho realizzato una funzione con le dovute immagini png seguendo
l'esempio ma non riesco a fare ciò che mi piacerebbe realizzare.
Prima di tutto un utente invia l'immagine in jpg/bmp/gif o chissà
altro. Controllerò l'estensione prima dell'upload consigliandogli di
inviare una foto in Jpg di certe dimensioni. A questo punto mi trovo la
sua immagine in jpg e la mia cornice in png.
<?
header("Content-type: image/png");
imagepng(thumbnail());
function thumbnail(){
  $x = 30;
  $y = 9;
  $userWidth = 119;
  $userHeight = 155;
  $r = -1.5;
  $thumb = imagecreatefrompng ("thumb.png");
  $user  = imagecreatefrompng ("user.png");
  $user = imagerotate($user, $r, 0);
  imagecolortransparent ($thumb, imagecolorat ($thumb, 50, 50));
  imagecopy ($thumb, $user, $x, $y, 0, 0, $userWidth, $userHeight);
  return $thumb;
  imagedestroy ($user);
}
?>
qui troverete l'esempio:
http://xoomer.virgilio.it/miku/thumb.zip
se non dovesse aprirsi al click con il mouse copiate l'url nella barra
degli url

 o viceversa?
non so quale deve essere il risultato finale, ma sempre a naso, anche 
perché in precedenza hai detto che la cornice è leggeremente ruotata (è 
per questo che serve la trasparenza), sovrapporrei la cornice all'immagine.
Le misure in pixel del lavoro finale sono sempre le stesse?
Se si ti conviene costruire l'immagine della cornice di quelle 
dimensioni, e quidi fare una copia sopra la risorsa immagine della quale 
avrai fatto eventuale resampling.
Ciao

 l'esempio ma non riesco a fare ciň che mi piacerebbe realizzare.
Mi sembra che funzioni, ma devi fare un resampling di una delle 2 immagini.

 > l'esempio ma non riesco a fare ciò che mi piacerebbe realizzare.


 Mikunos
http://www.php.net/manual/it/function.imagecopyresampled.php
Oppure valuta se è il caso di utilizzare questa, ma non fa un vero 
resampling:
http://www.php.net/manual/it/function.imagecopyresized.php
Ciao

<?
  header("Content-type: image/png");
  imagepng(thumbnail());
  function thumbnail(){
    $x = 30;
    $y = 9;
    $userWidth = 119;
    $userHeight = 155;
    $r = -2;
    $thumb = imagecreatefrompng ("thumb.png");
    $user = resizeJPG("user.jpg", $userWidth);
    $user = imagerotate($user, $r, 0);
    imagecolortransparent ($thumb, imagecolorat ($thumb, 50, 50));
    imagecopy ($thumb, $user, $x, $y, 0, 0, $userWidth, $userHeight);
    return $thumb;
    imagedestroy ($user);
  }
  function resizeJPG($filename, $new_width) {
    // Get new dimensions
    list($width, $height) = getimagesize($filename);
    $new_height = (int) (($new_width / $width) * $height);
    // Resample
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width,
$new_height, $width, $height);
    return $image_p;
  }
?>
L'utente invia un file JPG!
vi chiedo un aiuto per migliorarla. Sostituitela al codice contenuto in
http://xoomer.virgilio.it/miku
 /thumb.zip