2011-11-19 6 views
22

Tworzę nową funkcję na mojej stronie, która pozwala ludziom wysyłać pocztówki do przyjaciół. w tej sekcji mogą wybrać obraz, który chcą wysłać (już uplaampowali obraz do swojego profilu -> moje zdjęcia)Niestandardowa pocztówka PHP

Używam funkcji php do tworzenia tekstu, który idzie po prawej, ale jak mogę dodać kolejny obraz do tego obrazu z tekstem?

używam imagettftext stworzyć tekst, imagecreatefromjpeg aby otworzyć główne zdjęcie (patrz poniżej) i imagedestroy gdy im zrobić

dzięki

używam tej pocztówki: postcard-template.jpg

Odpowiedz

41

Najpierw musisz przyciąć obraz, aby zmieścił się w pocztówce. podstawie obrazu Oto co trzeba zrobić:

<?php 

$sourceImage = './postcard-template.jpg'; 
$uploadedImage = '/path/to/image/hong-kong2.jpg'; // let's get hong kong as example 
$mime = ''; 
$font = '/path/to/font/arial.ttf'; 

function CroppedThumbnail($source, $width, $height, &$mime) { 
    $data = getimagesize($source); 
    $sourceWidth = $data[0]; 
    $sourceHeight = $data[1]; 
    $mime = $data['mime']; 
    $image = imagecreatefromjpeg($source); 
    $sourceRatio = $sourceWidth/$sourceHeight; 
    if (($width/$height) > $sourceRatio) { 
    $newHeight = $width/$sourceRatio; 
    $newWidth = $width; 
    } 
    else { 
    $newWidth = $height*$sourceRatio; 
    $newHeight = $height; 
    } 
    $croppedImage = imagecreatetruecolor(round($newWidth), round($newHeight)); 
    imagecopyresampled($croppedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $sourceWidth, $sourceHeight); 
    $thumb = imagecreatetruecolor($width, $height); 
    imagecopyresampled($thumb, $croppedImage, 0, 0, (($newWidth/2)-($width/2)), (($newHeight/2)-($height/2)), $width, $height, $width, $height); 
    imagedestroy($croppedImage); 
    imagedestroy($image); 
    return $thumb; 
} 

// Create the cropped image first 
$newThumb = CroppedThumbnail($uploadedImage,240,315, $mime); 
switch($mime) { 
    case 'image/gif': 
    $image = imagecreatefromgif($sourceImage); 
    break; 
    case 'image/jpeg': 
    $image = imagecreatefromjpeg($sourceImage); 
    break; 
    case 'image/png': 
    $image = imagecreatefrompng($sourceImage); 
    break; 
    default: 
    // error or stop script 
    break; 
} 
$message = "this is some text\nsome other text\ntext text"; 

imagettftext($image, 21, 0, 320, 255, imagecolorallocate($image, 0, 0, 0), $font, $message); 
imagecopy($image, $newThumb, 40, 40, 0, 0, 240, 315); 
header('Content-Type: image/jpeg'); 
imagejpeg($image); 
imagedestroy($image); 

Na przykład używam tego obrazu (musi być przycięte):

testimage

następnie wyświetli:

final

+6

+1 wow ładnie wykonane, użyję go do użytku – Tech4Wilco

+4

+1 imponujące bardzo ładne – ana

0

Korzystając imagecopymerge aby skopiować zdjęcie na kartkę pocztową

bool imagecopymerge (resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct)