Как добавить цвет фона с помощью этого кода в php image create из текста в изображение? - PullRequest
0 голосов
/ 12 января 2019
<?php


    function create_image($user)
    {

        global $img_source; global $render_folder;
        global $id; global $folder;
        $quality = 9;
        $im = imagecreatefrompng($img_source);
        $clr=""; 
        foreach ($user as $value)
        {

            if(!empty($_SESSION['img_name']))
            {
                $im = imagecreatefrompng($_SESSION['img_name']);
            }
            $img_width=imagesx($im);    
            list($r, $g, $b) = sscanf($value['color'], "#%02x%02x%02x");
            $clr=imagecolorallocate($im, $r, $g, $b);

            $text_a = explode(' ', $value['name']);
            $text_new = ''; $width = $value['box-width']; $linex=1;
            foreach($text_a as $word)
            {
                //Create a new text, add the word, and calculate the parameters of the text
                $box = imagettfbbox($value['font-size'], 0, $folder.$value['font'], $text_new.' '.$word);
                //if the line fits to the specified width, then add the word with a space, if not then add word with new line
                //echo $box[2]." ";
                if($box[2] > $width){
                    $text_new .= "\n".$word; $linex++;  //echo "<br>";
                } else { 
                    $text_new .= " ".$word;
                }
            }
            $text_new = trim($text_new);





                $linslikh=explode("\n",$text_new); $ff=1; 
                foreach($linslikh as $linslikh1)
                {


                    if($value['center']=="Y")
                    {
                        //die();
                $xpos = center_text($linslikh1, $folder.$value['font'], $value['font-size'],$width);
                $xpos+=$value['x'];

                    }
                    else
                    {
                        $xpos = $value['x'];
                    }

                    $acfont = $value['font-size']*$ff ; $ypos = $acfont + $value['y'];

                    $ff=$ff+2;


                    imagettftext($im, $value['font-size'], 0, $xpos, $ypos,$clr, $folder.$value['font'],$linslikh1);


                // create the image


                }

                $output_filename = $id.'_render.png';
                imagepng($im, $render_folder.$output_filename, $quality);
                imagedestroy($im);
                $_SESSION['img_name']=$render_folder.$output_filename;
                $_SESSION['render_name']= $output_filename;




        }

    //die();
    }

    function center_text($string, $font, $font_size, $image_width){
        $dimensions = imagettfbbox($font_size, 0, $font, $string);
        return ceil(($image_width - $dimensions[4]) / 2);
    }

     ?>

Код файла ввода данных (откуда ввод данных)

 <div class="col-sm-1">

            <input required type="text" value="FF8C66"  class="jscolor form-control input-lg" name="clr[]" onChange="setColor(this.value,<?php echo $row; ?>);" >
       </div>

       <div class="col-sm-1">

            <input required type="text" value="FF8C66"  class="jscolor form-control input-lg" name="Bclr[]" onChange="setBColor(this.value,<?php echo $row; ?>);" >
       </div>

(Данные, хранящиеся в этом файле) Код другого файла

$new_array[]=array("name"=>$_POST['text'][$i],
                                "font-size"=>$_POST['font-size'][$i],
                                "color"=>$_POST['clr'][$i],
                                "background-color"=>"#".$_POST['Bclr'][$i],

Выше приведена часть моего кода из некоторых файлов. Я просто хочу добавить цвет фона в моем изображении. Я могу добавить опцию и получить данные. но не могу добавить вывод в мой php файл, который делает изображение из ввода. Надеюсь, вы понимаете мою точку зрения. Пожалуйста, помогите мне, как я могу добавить цвет фона из входного значения в моем файле php. Извините за плохой английский.

Обновление: я пробовал это таким образом, но не повезло

 //
//    other code part
// 

    $Bclr="";
        $clr=""; 
                    foreach ($user as $value)
//
//    other code part
// 
    list($r, $g, $b) = sscanf($value['Bcolor'], "#%02x%02x%02x");
                    $Bclr=imagecolorallocate($im, $r, $g, $b);
    //
   // Other Code Part 
   // 
    imagettftext($im, $value['font-size'], 0, $xpos, $ypos,$clr, $Bclr,$folder.$value['font'],$linslikh1);

Ответы [ 2 ]

0 голосов
/ 12 января 2019

На самом деле, более простой метод объясняется в руководстве: imagecreatetruecolor ImageColorAllocate затем создайте imagefilledrectangle, используя цвета из imagecolorallocate, затем напишите свой текст на изображение. Смотрите пример с Php.net ниже http://php.net/manual/en/function.imagettfbbox.php

0 голосов
/ 12 января 2019

Создайте другое изображение с imagecreatetruecolor того же размера, что и ваше изображение, выделите фоновый цвет (rgb), используйте imagecopyresampled для объединения двух изображений

...