2017-05-22 1 views
0

tout le monde. Je fais un projet de collège sur Online Photo Editor mais je suis confronté à un problème en ajoutant une couleur de fond au texte que j'ajoute sur une image en utilisant Imagick. Voici le code php pour Imagick utiliséAjout de fond au texte annoté sur l'image dans Imagick

caption.php

<?php 
$caption = $_POST['caption']; 
$caption_color = $_POST['caption_color']; 
$caption_color = "#".$caption_color; 
$font = $_POST['font']; 

$image = new Imagick(); 
$draw = new ImagickDraw(); 
$data = "\intermediate.jpg"; 
$im = new Imagick(__DIR__.$data); 
$im->setImageFormat("jpg"); 

$draw->setFillColor($caption_color); 
$draw->setFont('Arial'); 
$draw->setFontSize($font); 

$im->annotateImage($draw, $im->getImageWidth()/2, $im->getImageHeight()/2, 0, $caption); 

header('Content-type: image/jpg'); 
$im->writeImages(__DIR__.$data, true); 

?>

Ceci est le résultat que je reçois Link to Resulted Image

C'est ce que je veux Link to Desired Result

Comment puis-je obtenir le résultat souhaité? Toute aide est fortement appréciée. Juste au cas où nécessaire, ci-dessous est la demande ajax et html qui envoie les valeurs

effect.php

function myCaptionAjax() { 
var loader = $("#ajax-loader"); 
var div_loader = $("#img"); 
     $.ajax({ 
      type: 'POST', 
      url: 'effects/caption.php', 
      data: {caption: $('#caption_value').val(),caption_color: $('#caption_color').val(),font: $('#font_value').val()}, 
      beforeSend: function() { 
      loader.show(); 
      div_loader.hide(); 
     }, 
     success: function (data) { 
     loader.hide(); 
     div_loader.show(); 
     display(); 
     }, 
     error: function (xhr) { 
     alert("error"); 
    } 
     }); 
}; 

partie html résidant dans effect.php

Caption:<input type="textarea" rows="4" cols="10" maxlength="40" id="caption_value" />&nbsp; 
    <input id="caption_color" class="jscolor" value="ab2567"> 
    <input type="range" min="10" max="50" value="10" step="1" onchange="showFont(this.value)" id="font_value"/>&nbsp;<span id="rangeFont"></span> 
    <button class="button" onclick="myCaptionAjax()">Apply</button> 

Toute aide est très apprécié.

Répondre

0

N'utilisez pas annotateImage.

inspirez plutôt le texte dans l'objet ImagickDraw, puis composite sur une image avec Imagick :: drawImage comme dans cet exemple: http://phpimagick.com/Imagick/drawImage

+0

Je me résolu le problème, mais merci pour la suggestion. Je garderai cette fonction drawImage() à l'esprit pour une utilisation ultérieure. – subhadeep