PHP нестандартная открытка - PullRequest
22 голосов
/ 19 ноября 2011

Я создаю новую функцию на своем сайте, которая позволяет людям отправлять открытки друзьям.в этом разделе они могут выбрать изображение, которое они хотят отправить (они уже загрузили изображение в свой профиль -> раздел «Мои рисунки»)

Я использую функцию php для создания текста, который идет правильно, но какМогу ли я добавить другое изображение к этому изображению с текстом?

Я использую imagettftext, чтобы создать текст, imagecreatefromjpeg, чтобы открыть основное изображение (см. ниже), и imagedestroy, когда я закончу

спасибо

Я использую эту открытку: postcard-template.jpg

Ответы [ 2 ]

41 голосов
/ 20 ноября 2011

Сначала вам нужно обрезать изображение, чтобы оно поместилось на вашей открытке. На основании вашего изображения вот что вам нужно сделать:

<?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);

Например, я использую это изображение (нужно обрезать):

testimage

тогда будет выведено:

final

0 голосов
/ 20 ноября 2011

Используйте imagecopymerge , чтобы скопировать фотографию на открытку

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 )
...