2016-06-09 100 views
0

我想上傳一個從Java創建的toDataURL圖像,用JavaScript自動提交表單提交,由PHP捕獲並使用imagecreatefrompng()轉換並分配給一個變量。上傳imagecreatefrompng到服務器

這裏是開始的代碼:

Javascript代碼:

if(getImageData == true){ 
    console.log("Saving avatar as image..."); 
    window.setTimeout(function() { 
    imgData = renderer.domElement.toDataURL("image/png"); 
    document.getElementById('avatarimg').src = imgData; 
    document.getElementById("timg").value = imgData; 
    console.log(imgData); 
    document.getElementById("form1").submit(); 
    console.log("Avatar saved as PNG img."); 
}, 300); 
getImageData = false; 

PHP代碼:

if($_POST['timg']){ 
    $renderedav = imagecreatefrompng($_POST['timg']); 
    imageAlphaBlending($renderedav, true); 
    imageSaveAlpha($renderedav, true); 
    $target = "images/Avatars/"; 
    $newname = md5($_POST['timg']); 
    echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>"); 
    $target = $target . $newname . ".png"; 
    if(move_uploaded_file($renderedav, $target)) 
    { echo("File uploaded."); }else{echo("Error uploading file.");} 
} 

當我使用顯示圖像作爲原料IMG imgData,一切看起來不錯,但我想創建一個實際的圖像m數據並使用在$newname中創建的名稱將其上傳到我的數據庫中的目錄。這可能嗎?我正確地進行了嗎?我知道move_uploaded_file()是爲了將一個暫停的文件從一個文件表單元素移動到一個新位置,但在我的研究中,我找不到另一種方法來做到這一點。

回答

0

這裏有一對夫婦的事情,是行不通的:

  1. 無法通過回一些HTML編寫過頂的文字,你必須使用一個gdlib文本功能類似imagettftext()。一個注意,你必須指向一個字體文件來使用它(Resource here)。如果你沒有試圖在圖像上面寫這個echo ("<font color='#000000'>Image rendered. - " . $newname . " </font>");,忽略腳本的這部分,但你仍然不能這樣做,因爲如果你迴應任何東西(或者在你的腳本之前有空的空間),它會破壞圖像。
  2. 您必須使用imagepng()(Resource here)來保存文件。

PHP腳本:

if($_POST['timg']){ 
    // Set file path info 
    $target = "images/Avatars/"; 
    $newname = md5($_POST['timg']); 
    $target = $target.$newname.".png"; 
    // Start gdlib functions 
    $renderedav = imagecreatefrompng($_POST['timg']); 
    imagealphablending($renderedav, true); 
    imagesavealpha($renderedav, true); 
    $fColor_white = imagecolorallocate($renderedav, 255, 255, 255); 
    // Path to truetype font 
    $font = 'font.TTF'; 
    // Add text to image 
    imagettftext($renderedav, 25, 0, 75, 300, $fColor_white, $font, "Image rendered. - ".$newname); 
    // Here you output the png and use the second parameter to save to a destination 
    imagepng($renderedav,$target); 
    // Now you destroy the resouce 
    imagedestroy($renderedav); 
} 
+1

我是不是要在屏幕上書寫文字,這只是一個可視化調試的事情,我試圖做...但imagepng()的事情成功了!它確實將圖像上傳到數據庫!非常感謝! –

+0

沒有問題。如果有效,請務必檢查答案是否正確。這樣你就不會有人認爲它還沒有得到答案。 – Rasclatt