我有这个测试页http://thechozenfew.net/projects/write_font.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 :(得分: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张图片相互靠近。
答案 1 :(得分: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