2012-07-30 61 views
0

我在嘗試執行imagecratefrompng時遇到了PHP中gd庫的問題。我正在運行腳本,用戶在其中輸入文本並將其添加到預先創建的圖像中。問題是,當我輸出圖像時,圖像顯示爲中斷。'imagecreatefrompng'正在輸出崩潰的圖像

任何人都可以幫助指出,如果我的腳本/圖像有問題嗎?

該圖像是一個PNG,600x956,220kb文件大小。

GD Library已啓用。 PNG,JPEG,GIF支持已啓用。

這是代碼。

// Text inputed by user 
    $text = $_POST['text']; 
// Postion of text inputed by the user 
    $text_x = 50; 
    $text_y = 817; 
// Color of the text 
    $text_color = imagecolorallocate($img, 0, 0, 0); 
// Name of the file (That is in the same directory of the PHP file) 
    $nomeDaImagem = "Example"; 


$img = imagecreatefrompng($nomeDaImagem); 

//Text is retrieved by Post method 
imagestring($img, 3, $text_x, $text_y, $text, $text_color); 

header("Content-type: image/png"); 
imagepng($img); 

imagedestroy($img); 
+1

你從來不會使用你的變量'$ nome'和'$ text'腳本中的不確定。它在別處有定義嗎? – Tchoupi 2012-07-30 13:23:42

+0

這是一個輸出錯誤。 $ nome應該是$文本。我會糾正它。 – Danilo 2012-07-30 13:55:26

回答

0

瞭解更多: -

http://php.net/manual/en/function.imagecreatefrompng.php

http://www.php.net/manual/en/function.imagecreatefromstring.php

或試試這個

<?php 
function LoadPNG($imgname) 
{ 
    /* Attempt to open */ 
    $im = @imagecreatefrompng($imgname); 

    /* See if it failed */ 
    if(!$im) 
    { 
     /* Create a blank image */ 
     $im = imagecreatetruecolor(150, 30); 
     $bgc = imagecolorallocate($im, 255, 255, 255); 
     $tc = imagecolorallocate($im, 0, 0, 0); 

     imagefilledrectangle($im, 0, 0, 150, 30, $bgc); 

     /* Output an error message */ 
     imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc); 
    } 

    return $im; 
} 

header('Content-Type: image/png'); 

$img = LoadPNG('bogus.image'); 

imagepng($img); 
imagedestroy($img); 
?> 
2

有許多與你的腳本問題:

  1. 在實際創建圖像之前,您嘗試爲圖像分配顏色。
  2. 要寫入的字符串位於變量$nome中,但是您要打印$text
  3. 您不檢查是否存在$_POST['text'],這可能會導致通知級錯誤。
  4. 您不檢查文件是否存在,這可能會導致警告級錯誤。

這裏是你的代碼,固定的例子:

// Text inputed by user 
    $nome = isset($_POST['text']) ? $_POST['text'] : "<Nothing to write>"; 
// Postion of text inputed by the user 
    $text_x = 50; 
    $text_y = 817; 
// Name of the file (That is in the same directory of the PHP file) 
    $nomeDaImagem = "Example"; 

$img = file_exists($nomeDaImagem) 
    ? imagecreatefrompng($nomeDaImagem) 
    : imagecreate(imagefontwidth(3)*strlen($nome)+$text_x,imagefontheight(3)+$text_y); 

// Color of the text 
    $text_color = imagecolorallocate($img, 0, 0, 0); 
//Text is retrieved by Post method 
imagestring($img, 3, $text_x, $text_y, $nome, $text_color); 

header("Content-type: image/png"); 
imagepng($img); 
imagedestroy($img); 
+0

感謝您的回覆。我確實嘗試了你的代碼,但圖像仍然被破壞。我也嘗試使用來自Abid(右下)的代碼,這是PHP頁面的示例,它也輸出了一個破碎的圖像。我認爲問題在於「imagecreatfrompng」。也許我沒有正確寫入路徑($ nomeDaImagem字符串)。 – Danilo 2012-07-30 14:01:12

+0

對不起,在經過這麼長時間之後,你會發現你的兄弟,但我確實發現了這個問題:imagecreatefrompng最後必須具有「.png」的值。無論如何。再次感謝你的幫助。 – Danilo 2012-08-17 17:54:43