2009-11-12 4 views
0

У меня есть эта тестовая страница http://thechozenfew.net/projects/write_font.php, которая генерирует текст в поле ввода как шрифт. Каждая буква - это другое изображение. Как бы я соединить все эти изображения в одно изображение с помощью php-скрипта?Объединение нескольких изображений в один с PHP-скриптом

Это то, что я пробовал до сих пор, но изображения появляются друг на друга.

Header ("Content-type: image/gif"); 

$image1Url = "../images/avatar.png"; 
$image2Url = "../images/key.png"; 
$image3Url = "../images/safari.png"; 
$image1 = imageCreateFromPNG($image1Url); 
$image2 = imageCreateFromPNG($image2Url); 
$image3 = imageCreateFromPNG($image3Url); 

$colorTransparent = imagecolorat($image1, 0, 0); 
imageColorTransparent ($image1, $colorTransparent); 

$colorTransparent = imagecolorat($image2, 0, 0); 
imageColorTransparent ($image2, $colorTransparent); 

$colorTransparent = imagecolorat($image3, 0, 0); 
imageColorTransparent ($image3, $colorTransparent); 

imageCopyMerge($image1, $image2, 0, 0, 0, 0, 96, 96, 100); 

imageCopyMerge($image1, $image3, 0, 0, 0, 0, 96, 96, 80); 

ImagePng ($image1); 


ImageDestroy ($image1); 
ImageDestroy ($image2); 
+0

Он не может работать на какой-то браузер, если заголовок и фактический тип содержимого не совпадают. Заголовок («Content-type: image/gif»); ... ImagePng ($ image1); – Darkerstar

ответ

1

Так вот, что я закончил с

<?php 
header('Content-type: image/png'); 

function imageComposeAlpha(&$src, &$ovr, $ovr_x, $ovr_y, $ovr_w = false, $ovr_h = false, $opc = 127){ 
imagecopy($src, $ovr, $ovr_x, $ovr_y, 0, 0, imagesx($ovr), imagesy($ovr)); 
} 

////////////////////////---////////----------------------------------- 

$url = "../../images/socom_font/normal/Socom"; 

//Covert the String iinto an Array 
$letter = str_split(strtoupper ($_GET['name'])); 
//Populate Letters Image Path 
foreach($letter as $a){ 
    //exeptions 
    if($a == "?"){ $a = "Question"; } 
    if($a == "/"){ $a = "Slash"; } 
    if($a == "%"){ $a = "Percent"; } 
    if($a == " "){ $a = "Space"; } 
    $image[] = $url.$a.".png"; 
}unset($a); 
//Create the Letters Image Objects 
foreach($image as $a){ 
    $image['obj'][] = imageCreateFromPNG($a); 
}unset($a); 
//calculate Canvas Width 
foreach($image['obj'] as $a){ 
    if(!isset($canvasW)){ $canvasW = 0; } 
    $canvasW = imagesx($a) + $canvasW; 
}unset($a); 
//Create Canvas 
$photoImage = imagecreatetruecolor($canvasW,100); 
imagesavealpha($photoImage, true); 
$trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); 
imagefill($photoImage, 0, 0, $trans_color); 

//Merge Images 
foreach($image['obj'] as $a){ 
    $width = ceil(imagesx($a)); 
    if(!isset($offset)){ $offset = 1; } 

    imageComposeAlpha($photoImage, $a, $offset, 0,$width,100); 

    if($offset >= 1){ 
    $offset = $offset + $width; 
    } 
}unset($a); 
// Save it 
//Imagepng($photoImage, 'done.png'); 
// Output to browser 
Imagepng($photoImage); 

//Destroy all Image Objects 
foreach($image['obj'] as $a){ 
    ImageDestroy($a); 
} 
ImageDestroy($photoImage); 
?> 

Живая ссылка http://thechozenfew.net/projects/font/ImageMerge.php?name=it%20works

4

Ваш сценарий объединения изображений друг на друга (см инструкцию для imagecopymerge). Параметры $dst_x и $dst_y управляют местом размещения исходного изображения на объединенном холсте.

Вы должны указать смещение от предыдущего изображения, чтобы объединить их:

<? 
    $offset2x = imagesx($image1); 
    imageCopyMerge($image1, $image2, $offset2x, 0, 0, 0, 96, 96, 100); 

    $offset3x = $offset2x + imagesx($image2); 
    imageCopyMerge($image1, $image3, $offset3x, 0, 0, 0, 96, 96, 80); 
?> 

Обратите внимание, что вы должны увеличить размер $image1 держать все 3 изображения рядом друг с другом.

+0

спасибо за ваш ответ Я видел много вопросов и ответов, связанных с слиянием изображений, но этот лучший, и я думаю, что это решит мою проблему. благодарит :( –

Смежные вопросы