2015-08-02 2 views
0

Я пытаюсь объединить два моих изображения в php. Одно изображение загружается в мою систему, а другое - тот, который я создаю с прозрачным фоном. Вот мой код. Мой код просто показывает значок без изображения. Я не понимаю, где я ошибаюсь.слияние двух изображений png в php

<?php 
    //Set the Content Type 
    header("Content-type: image/png"); 
    #dispaly the image 
    $file=$_GET['file']; 
    // echo file_get_contents($file); 
    $im = imagecreatetruecolor(250, 200); 
    $black = imagecolorallocate($im, 255, 255, 255); 
    $blue = imagecolorallocate($im, 0, 0, 255); 

    imagecolortransparent($im, $black); 

    //text to draw 
    $text="hello world"; 
    //font path 
    $font = '/usr/share/fonts/truetype/droid/DroidSans.ttf'; 
    // Add the text 
    imagettftext($im, 15, 0, 50, 50, $blue, $font, $text); 

    $dest=imagecreatefrompng($file); 
    $src=imagecreatefrompng($im); 

    imagealphablending($dest, false); 
    imagesavealpha($dest, true); 

    imagecopymerge($dest, $src, 10, 10, 0, 0, 100, 250, 200); 

    imagepng($dest); 

    imagedestroy($dest); 
    imagedestroy($src); 

    ?> 
+0

Не используйте '' imagecreatefrompng' для $ im' – Sayed

+0

Black будет '0,0,0', а не '255255255' я думаю. –

ответ

0

Использование $ им не $ ЦСИ, - как Сайед отметил, imagecreatefrompng принимает имя файла (строка) в качестве аргумента - не GD ресурсов. Зачем устанавливать $ src, если $ im уже содержит ресурс GD, готовый для использования?

Важная часть с imagettftext. Я смог воспроизвести эффект пустой иконки, если GD не может найти шрифт в заданном пути. Проверьте свое местоположение, разрешения и почтовый ящик. Кроме того, если вы решили просто скопировать файл .ttf прямо в место расположения сценария, см. imagettftext() documentation, так как существует важное предостережение с расширением «.ttf».

Кроме того, чтобы создать полностью прозрачное использование изображения: (Джорджа Эдисона в PHP doc for imagefill

$im = imagecreatetruecolor(317, 196); 
    $transparent = imagecolorallocatealpha($im, 0, 0, 0, 127); 
    imagefill($im, 0, 0, $transparent); 
    imagesavealpha($im, TRUE); 

Кроме того, из PHP doc for imagecopymerge() Сина Салека: функция imagecopymerge_alpha для обеспечения истинного transperency в imagecopymerge()

Итак, мое решение:

<?php 
    //Set the Content Type 
    header("Content-type: image/png"); 
    #dispaly the image 
    $file='test.png'; 

    $im = imagecreatetruecolor(317, 196); 
    $transparent = imagecolorallocatealpha($im, 0, 0, 0, 127); 
    imagefill($im, 0, 0, $transparent); 
    imagesavealpha($im, TRUE); 

    $blue = imagecolorallocatealpha($im, 0, 0, 255, 0); 

    //text to draw 
    $text="hello world"; 
    putenv('GDFONTPATH=' . realpath('.')); 
    $font = 'lucida'; 
    imagettftext($im, 20, 0, 10, 50, $blue, $font, $text); 

    $dest=imagecreatefrompng($file); 
    imagealphablending($dest, false); 
    imagesavealpha($dest, true); 

    imagecopymerge_alpha($dest, $im, 10, 10, 0, 0, 200, 180, 100); 
    imagepng($dest); 

    imagedestroy($dest); 
    imagedestroy($im); 

    function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ 
     // creating a cut resource 
     $cut = imagecreatetruecolor($src_w, $src_h); 

     // copying relevant section from background to the cut resource 
     imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 

     // copying relevant section from watermark to the cut resource 
     imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 

     // insert cut resource to destination image 
     imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
    } 
    ?> 
0

Вы должны использовать функцию imagecopymerge() для t его.

Узнайте ссылку

http://php.net/manual/en/function.imagecopymerge.php 
Смежные вопросы