2016-04-10 6 views
0

Ich verwende jquery, um Daten an eine Controller-Funktion zu senden, die ein Bild auf dem Server als Wasserzeichen markiert und dynamisch zurückbucht. Die Wasserzeichenfunktion funktioniert, wenn ich keine dynamische Ausgabe verwende, aber wenn ich dies tue, wird einfach ein leeres Bild mit einem 1 Pixel grauen Rand um es herum zurückgegeben.CodeIgniter Bild Wasserzeichen gibt leeres Bild zurück, wenn dynamische Ausgabe verwendet

Das zurückgegebene Bild wird korrekt benannt und die richtigen Bildtyp-Header werden darauf angewendet. Dies ist die erste Zeile aus der Verschlingen-de-gook im Netzwerk Inspektoren zurückgegeben:

ÿØÿàJFIFÿþ;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90 

alternativen Verfahren, dies zu erreichen würden geschätzt haben Tage auf diese jetzt mit wenig Erfolg ausgegeben. Ich würde es vorziehen, das Bild auf dem Server möglichst unberührt zu lassen.

Java:

$('#body').on('click', '#get_file', function(ev) 
{ 
    ev.preventDefault(); 

    var type = 'file'; 
    var uid = $('#file_select').val(); 

    var v1 = retD['res'][0].v1; 
    var v2 = retD['res'][0].v2; 
    var v3 = retD['res'][0].v3; 
    var v4 = retD['res'][0].v4; 

    $.ajax({ 
     type: 'POST', 
     url: '<?php echo site_url("Home_controller/drawInfo") ?>', 
     data: {v1:v1, v2:v2, v3:v3, v4:v4}, 
     dataType: 'html', 
     success: function(img) 
     { 
      $("#i").attr("src", img); 
     } 
    }); 
}); 

Controller:

function drawInfo() 
{ 
    $v1 = $_POST['v1']; 
    $v2 = $_POST['v2']; 
    $v3 = $_POST['v3']; 
    $v4 = $_POST['v4']; 

    $config['image_library'] = 'gd2'; 
    $config['source_image'] = './img/Test_image.jpg'; 
    $config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4; 
    $config['wm_type'] = 'text'; 
    $config['dynamic_output'] = true; 
    $config['wm_font_color'] = 'ff0000'; 
    $config['wm_font_path'] = './system/fonts/texb.ttf'; 
    $config['wm_vrt_alignment'] = 'bottom'; 
    $config['wm_hor_alignment'] = 'center'; 
    $config['wm_padding'] = '20'; 

    $this->image_lib->initialize($config); 

    if(!$this->image_lib->watermark()) 
    { 
     echo $this->image_lib->display_errors(); 
    } 
} 

Antwort

1

Von der Steuerung Du mit der Bild binären Daten wieder zurück, aber in der Javascript wollen Sie es als das 'src' verwenden Attribut das Element img

In der Steuerung sollten Sie mit dem src des neu erzeugten Bildes zurückkehren.
Bitte seien Sie vorsichtig, wenn Sie die Pfade festlegen und die richtige Berechtigung für den Ordner festlegen, in dem Sie die Bilder erstellen (es sollte durch Apache beschreibbar sein).

Controller:

function drawInfo() 
{ 
    $return = array(
     'src' => '', 
     'error' => '', 
    ); 
    $v1 = $_POST['v1']; 
    $v2 = $_POST['v2']; 
    $v3 = $_POST['v3']; 
    $v4 = $_POST['v4']; 

    $config['image_library'] = 'gd2'; 
    // set image path 
    $config['source_image'] = FCPATH . 'img/Test_image.jpg'; 
    // this image will be watermarked (path should be writable by apache!!!) 
    $config['new_image'] = FCPATH . 'img/Test_image_new.jpg'; 
    $config['wm_text'] = 'v1: ' . $v1 . ' v2: ' . $v2 . ' v3: ' . $v3 . ' v4: ' . $v4; 
    $config['wm_type'] = 'text'; 
    // to false to save image to file instead of print it (you can leave this setting because the false is the default value) 
    $config['dynamic_output'] = false; 
    $config['wm_font_color'] = 'ff0000'; 
    // set the proper path!! 
    $config['wm_font_path'] = FCPATH . 'system/fonts/texb.ttf'; 
    $config['wm_vrt_alignment'] = 'bottom'; 
    $config['wm_hor_alignment'] = 'center'; 
    $config['wm_padding'] = '20'; 

    $this->image_lib->initialize($config); 

    if(!$this->image_lib->watermark()) 
    { 
     $return['error'] = $this->image_lib->display_errors(); 
    } 
    else 
    { 
     // generate the URL of the new watermarked image (modify to your needs) 
     $return['src'] = base_url() .'/'. $config['new_image']; 
    } 
    echo json_encode($return); 
} 

JavaScript:

$.ajax({ 
     type: 'POST', 
     url: '<?php echo site_url("Home_controller/drawInfo") ?>', 
     data: {v1:v1, v2:v2, v3:v3, v4:v4}, 
     dataType: 'html', 
     success: function(response) 
     { 
      if(response.error) 
      { 
       alert(response.error); 
      } 
      else 
      { 
       $("#i").attr("src", response.src);  
      } 
     } 
    }); 
+0

Leider Geck, funktioniert nicht - JS ignoriert die Antwort (die Bilddaten nach wie vor und nicht ein codiertes Array) Ich denke, das Problem ist, Wenn dynamic_output aktiviert ist, gibt GD/CI ein Bild direkt zurück - das Rückgabe-Array wird nicht einmal übergeben. Schade, ich hatte wirklich gehofft, dass dies den Trick machen würde :( – Funk247

+0

Setzen Sie einfach die $ config ['dynamic_output'] Einstellung oder setzen Sie sie auf false. (Ich habe den Code geändert.) – Zaragoli

+0

Yup das funktioniert, es erstellt ein Bild auf dem Server, von dem ich hoffte, es zu vermeiden, aber das Bild zu löschen, sobald es dem Browser geliefert wurde, ist ohne Bedeutung. TVM Kumpel, ich habe Tage verschwendet, um zu versuchen, dass das funktioniert! – Funk247

Verwandte Themen