如何将多个图像和文本合并为单个图像?

时间:2016-01-27 10:12:34

标签: php image php-gd

我在div中有多个PNG图像,这些图像是PNG,并根据他/她选择的自定义选项呈现为用户的单个图像。此外,添加文本也可以作为其他功能启用,它允许带有文本的div添加到这些图像的上方。

现在我想生成一个图像,其中包含多个图像和文本,保持字体系列和文字大小。

例如。界面上显示的图像与图像和文本的组合。 (它设法用css定位出现) enter image description here 这是由下面的两个图像和文本

组成的

![enter image description here enter image description here

这是我尝试拍摄的照片:create-image.php文件

readFile

但这给了我整个黑色的图像 ![enter image description here

另外,我需要在最终生成的图像上混合使用文本

已修改

  • jpg图片更改为png

  • data已更改为<?php createimageinstantly(); function createimageinstantly($img1='',$img2='',$img3=''){ $x=$y=1000; header('Content-Type: image/png'); $targetFolder = '/gw/media/uploads/processed/'; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $img1 = $targetPath.'img1.png'; $img2 = $targetPath.'img2.png'; $img3 = $targetPath.'img3.png'; $outputImage = imagecreatetruecolor(1000, 1000); $first = imagecreatefrompng($img1); $second = imagecreatefrompng($img2); $third = imagecreatefrompng($img3); imagecopy($outputImage,$first,0,0,0,0, $x, $y); imagecopy($outputImage,$second,0,0,0,0, $x, $y); imagecopy($outputImage,$third,0,200,-200,0, $x, $y); imagepng($outputImage, $targetPath .round(microtime(true) * 1000).'.png'); imagedestroy($outputImage); } ?>

最新结果:

imagecopymege

输出图像 enter image description here

2 个答案:

答案 0 :(得分:3)

我用这种方式实现了它,

使用这3张图片,img1.png,img2.png,img3.png

enter image description here enter image description here enter image description here

create-image.php档案

 <?php
        createimageinstantly();
        //$targetFolder = '/gw/media/uploads/processed/';
        //$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
        //$img3 = $targetPath.'img3.png';
        //print_r(getimagesize('http://www.vapor-rage.com/wp-content/uploads/2014/05/sample.jpg'));
        function createimageinstantly($img1='',$img2='',$img3=''){
            $x=$y=600;
            header('Content-Type: image/png');
            $targetFolder = '/gw/media/uploads/processed/';
            $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;

            $img1 = $targetPath.'img1.png';
            $img2 = $targetPath.'img2.png';
            $img3 = $targetPath.'img3.png';

            $outputImage = imagecreatetruecolor(600, 600);

            // set background to white
            $white = imagecolorallocate($outputImage, 255, 255, 255);
            imagefill($outputImage, 0, 0, $white);

            $first = imagecreatefrompng($img1);
            $second = imagecreatefrompng($img2);
            $third = imagecreatefrompng($img3);

            //imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
            imagecopyresized($outputImage,$first,0,0,0,0, $x, $y,$x,$y);
            imagecopyresized($outputImage,$second,0,0,0,0, $x, $y,$x,$y);
            imagecopyresized($outputImage,$third,200,200,0,0, 100, 100, 204, 148);

            // Add the text
            //imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
            //$white = imagecolorallocate($im, 255, 255, 255);
            $text = 'School Name Here';
            $font = 'OldeEnglish.ttf';
            imagettftext($outputImage, 32, 0, 150, 150, $white, $font, $text);

            $filename =$targetPath .round(microtime(true)).'.png';
            imagepng($outputImage, $filename);

            imagedestroy($outputImage);
        }
    ?>

结果图片是 enter image description here

参考:imagecopyresized&amp; imagettftext

感谢您通过评论/答案提出的建议。 我还详细地在博客中发表了这篇文章http://sumankc.com/2016/01/30/merge-multiple-images-and-text-to-create-single-image-php-gd-library/ 美好的一天!!

答案 1 :(得分:2)

首先,jpeg图像没有alpha通道 - 这意味着图像中的每个像素都有某种颜色,而没有关于它的信息透明度。为此创建一个解决方法可能很困难,但您可以谷歌它。如果可以 - 我建议你使用PNG格式,它保存透明度信息。

其次 - 尝试阅读PHP docs for imagecopymerge中的评论部分。 This comment提供了一些您可以使用的有用信息:

  

新浪Salek:我刚刚检查了PHP的问题跟踪器,核心开发人员说   这个功能从来没有打算支持alpha通道!和他们   拒绝提交提供的补丁!

然后,评论者提供了一个我认为可行的例子。