Создать изображение из текста с помощью формы и сохранить на сервере - PullRequest
0 голосов
/ 28 августа 2018

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

Php -

$to = $paths. '/card.png';

if (isset($_POST['make_pic'])) {
$text = $_POST['txt_input'];
$im = imagecreate(200, 80);

// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

imagestring($im, 4, 30, 25, $text, $textcolor);

ob_start();
imagepng($im);
$data = ob_get_clean();
file_put_contents($to,$data);
imagedestroy($im);
}

HTML -

<form name="picform" id="picform" action="" method="post" enctype="multipart/form-data">
<input type="text" class="input-field" name="txt_input" maxlength="50">
<input type="submit" id="make_pic" name="make_pic" value="Convert">
</form>

Форма не имеет действия, потому что я использую ajax -

$("#make_pic").click(function() {
    $('#picform').ajaxForm();
});

UPDATE

Я пытаюсь поместить одно изображение поверх созданного мной изображения, таким образом создавая одно окончательное изображение. Это мой текущий код, который работает для создания изображения, но не для размещения наложенного изображения ---

$paths = "/uploads/". $current_user->ID."/".$v_Id;
$assets = "/uploads/assets";

$to = $paths. '/contact_card.png';

// Text from form to be used
$c_name1 = $_POST['c_name'];
$c_biz1 = $_POST['c_biz'];
$c_num = $_POST['c_num'];
$c_mail1 = $_POST['c_email'];

$c_name = strtoupper($c_name1);
$c_biz = strtoupper($c_biz1);
$c_mail = strtoupper($c_mail1);


$headliner = "Contact Info\r\n";

$text = $headliner."\r\n".$c_name."\r\n".$c_biz."\r\n".$c_num."\r\n".$c_mail;

$im = imagecreate(1280, 720);
$im2 = $paths. '/profile_pic.png';

// Black background
$bg = imagecolorallocate($im, 0, 0, 0);

// Text Colors
$black = imagecolorallocate($im, 0, 0, 0);
$grey = imagecolorallocate($im, 128, 128, 128);
$white = imagecolorallocate($im, 255, 255, 255);

// Font text options
$font = $assets.'/fonts/PlayfairDisplay-Regular.ttf';
$font_size = 24;
$angle = 45;

// Get image Width and Height
$image_width = imagesx($im);  
$image_height = imagesy($im);

// Get Bounding Box Size
$text_box = imagettfbbox($font_size,$angle,$font,$text);

// Get your Text Width and Height
$text_width = $text_box[2]-$text_box[0];
$text_height = $text_box[7]-$text_box[1];

// Calculate coordinates of the text
$x = 440;
$y = 260;

// Add the text
imagettftext($im, $font_size, 0, $x, $y, $white, $font, $text);

// HERE I AM TRYING TO PLACE A PICTURE LEFT CENTERED ON TOP OF THE OTHER PICTURE
imagecopymerge($im, $im2, 0, 0, 0, 0, 50, 50, 100);


// Create the image and save to server
ob_start();
imagepng($im);
$data = ob_get_clean();
file_put_contents($to,$data);
imagedestroy($im);

1 Ответ

0 голосов
/ 29 августа 2018

PHP часть на самом деле работает для меня, хотя это можно заменить:

ob_start();
imagepng($im);
$data = ob_get_clean();
file_put_contents($to,$data);
imagedestroy($im);

с этим:

imagepng($im, $to);
imagedestroy($im);

Но я не уверен, что это проблема, так как ваш существующий код работал на меня. Поэтому попробуйте проверить, является ли $paths допустимым каталогом?

UPDATE

похоже, ничего не происходит

Может быть, потому что вы не echo (или что-то выводили) после создания изображения? Ну, я имею в виду, что изображение, возможно, было успешно (заново) создано, но ваш скрипт PHP / JS не «сообщает» вам о статусе; следовательно, вы видите «ничего». Попробуйте echo -ing примерно так:

if (isset($_POST['make_pic'])) {
  ...
  imagedestroy($im);

  echo 'Success!';
}

А затем используйте этот JS:

$('#picform').ajaxForm({
  success: function(res){
    alert(res);
  }
});

(Обновление № 2: я намеренно удалил часть «Дополнительная заметка», но вы всегда можете увидеть ревизии ответа , чтобы найти эту часть.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...