Domanda

Sto lavorando per migliorare una delle mie applicazioni Facebook, consentendo all'utente di caricare un'immagine e applicare un bordo in stile, o una cornice ad esso (cioè le nuvole, le stelle, il cielo, ecc). L'utente chould anche in grado di salvare l'immagine, con il bordo dopo che è stato applicato. Questo spiega un po 'meglio quello che mi serve:

http://zbrowntechnology.info/ImgDisp/imgdisp.php

Se avete altre domande o bisogno di maggiori dettagli, per favore fatemelo sapere .. Io modificare questo post.

È stato utile?

Soluzione

imagecopy () . L'esempio in quella pagina viene fatto usando l'opzione di trasparenza imagecopymerge (), ma io non credo che si bisogno di questo.

Uso imagecopy () è necessario specificare le coordinate X / Y da utilizzare per il posizionamento:

imagecopy( $borderimage, $topimage, 20, 20, 0, 0, $width, $height);

Dove $width e $height sarà tutta la larghezza e l'altezza dell'immagine superiore. Ti consigliamo di sostituire 20 e 20 con la misura per la quantità di immagine del confine sarà mostrando attorno ai confini. Si dovrà probabilmente per ridimensionare l'immagine in alto per le dimensioni esatte desiderate, altrimenti potrebbe sovrapporsi al confine un po 'troppo per la destra o in basso. (Vedi imagecopyresampled () )

Modifica:

Ecco un modo ruvido di fare tutto il processo (supponendo chosenborder.png è il confine hanno scelto, e uploadedimage.png è l'immagine che caricati Se si tratta di un diverso tipo di immagine che verrà utilizzato il corrispondente funzione ).

$borderx = 20; // The width of our border
$border = imagecreatefrompng("chosenborder.png");
$topimage = imagecreatefrompng("uploadedimage.png");
$bordersize = getimagesize($border);
$topimagesize = getimagesize($topimage);

/* The new dimensions of topimage. $borderx*2 means we account for
   the border on both left and right, top and bottom. */
$newx = $bordersize[0] - ($borderx*2);
$newy = $bordersize[1] - ($borderx*2);
imagecopyresampled( $topimage_scaled, $topimage, 0, 0, 0, 0,
              $newx, $newy, $topimagesize[0], $topimagesize[1]);

/* Merge the images */
imagecopy( $border, $topimage_scaled, $borderx, $borderx,
              0, 0, $width, $height);
/* Output the image */
imagepng($border, "newimage.png");
/* Free up the memory occupied by the image resources */
imagedestroy($border);
imagedestroy($topimage);

Dopo che l'utente carica la loro immagine, trovare chosenborder.png e uploadedimage.png, eseguire lo script di cui sopra, quindi visualizzare newimage.png per l'utente e si sta bene ad andare. Basta fare in modo di chiamare imagedestroy() sulle risorse di immagine temporanei o si mangia la memoria.

Se non si desidera conservare l'immagine generata sul server, è possibile omettere il secondo argomento a imagepng() che renderà inviare le informazioni di immagine direttamente come immagine al browser, nel qual caso si vorrà scrivere il href="http://www.tuxradar.com/practicalphp/11/2/1" rel="nofollow"> corretta immagine .

Altri suggerimenti

soluzione client-side utilizzando css3:

checkout la proprietà css3 border-immagine (Dose non incontrano l'esigenza di salvare l'img con il confine)

soluzione lato server unendo 2 immagini differenti:

<?php


$imgFile = 'img.jpg';
$brdFile = 'brd.jpg';
$img = addBorder($imgFile,$brdFile);
outputImage($img);

function addBorder($imgFile,$brdFile)
{
    $img=imagecreatefromjpeg($imgFile);
    $brd=imagecreatefromjpeg($brdFile);

    $imgSize = getimagesize($imgFile);
    $brdSize = getimagesize($brdFile);


    //NOTE: the border img MUST be bigger then the src img
    $dst_x = ceil(($brdSize[0] - $imgSize[0])/2);
    $dst_y = ceil(($brdSize[1] - $imgSize[1])/2);


    imagecopymerge  ( $brd, $img, $dst_x,  $dst_y,  0, 0, $imgSize[0], $imgSize[1] ,100  );

    return $brd;
}   

function outputImage($img)
{
    header('Content-type: image/png');  
    imagepng($img);
}

?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top