PHP GD生成的圖像圖像無法顯示,因為它包含Firefox中的錯誤

PHP GD生成的圖像圖像無法顯示,因為它包含Firefox中的錯誤

當使用PHP生成圖像時,例如使用下面的代碼或使用JPEG而不是PNG添加水印到服務器存儲的圖片,圖像可能根本不會生成,並且會引發錯誤,直接在Firefox上可見,但不會在Chrome上。

儘管在某些服務器上工作,但這種代碼現在可能在另外一些服務器上工作,有時候出於難以理解的原因。在我的情況下,它在本地運行得非常好,但在互聯網服務器上出現錯誤,圖像無法顯示,因為它包含錯誤。

這個問題可能有幾個原因,其中一些是:

輸出之前已經設置好了。

來自圖像生成的真正錯誤。

使用錯誤的圖像類型。

圖像庫未安裝。

$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

輸出之前已經設置好了

即使不是故意的,也可能是這樣的情況,例如,其他先前的腳本最後包含空格 - 為了避免此錯誤,請確保按照PHP建議,不要使用PHP結束標記關閉腳本?>

然後,在使用頭函數之前,請使用以下代碼來確保先前設置的頭文件被丟棄

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

還有這個功能可以確保在標題和圖像之前沒有輸出

ob_end_clean();

這解決了我的問題,並且圖像再次正確顯示。

來自圖像生成的真正錯誤

如果在圖像生成過程中出現真正的錯誤,請確保PHP設置為顯示所有可能的錯誤類型,並檢查相應的日誌,以便能夠追踪並解決它。

以下代碼將使PHP報告日誌中的所有錯誤:

error_reporting(E_ALL);
ini_set('display_errors', '1');

由於服務器配置的原因,您可能會發現報告了一些錯誤,即使它們沒有出現在輸出html中。

使用錯誤的圖像類型

確保您使用的圖像類型是正確的,例如使用此代碼來區分png和jpeg。

根據使用的圖像生成功能,還要根據使用的輸出確保標題是正確的

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

圖像庫未安裝

確保圖像庫已安裝。為此,運行函數phpinfo();在一個腳本中,並檢查輸出中與PHP GD相關的以下值,這是由imagepng()等函數使用的圖形庫;

在缺少軟件包的情況下,解決這個問題的方式取決於您的本地配置,可以通過使用PEAR命令添加軟件包,也可以使用內置的解決方案中的Web主機進行軟件包安裝。

當imagejpeg或imagepng不工作時該怎麼辦

在NotePad ++中,打開調用imagepng函數的PHP文件,並在轉到菜單編碼>轉換為UTF-8而不使用BOM後保存。

在DreamWeaver中,轉到頁面屬性>標題/編碼>取消選中包括Unicode簽名(BOM)。

當PHP imagejpeg或imagepng不起作用時,很可能是因為PHP文件已經使用BOM,物料清單編碼,因此在圖像數據之前與圖像一起發送額外信息。

PHP imagejpeg和PHP imagepng函數用於直接在服務器響應中發送圖片代碼。

PHP - imagepng無法正常工作
PHP - imagepng函數
PHP - imagejpeg函數

類似的文章

評論 (6)

Irvin Vasquez, 2018-08-19
Simple, clear and well explained, many thanks
Joyce Lawrence, 2018-08-19
ありがとう、非常に有益な
Catherine Roberts, 2018-08-19
Dokładnie tego, czego szukałem, idealnie
Headlinext, 2018-08-19
जानकारी का महान टुकड़ा, साझा करने के लिए धन्यवाद
Marshel, 2018-08-19
विश्वास नहीं कर सकता कि मुझे अंत में समाधान मिला, यह लंबे समय तक एक दुःस्वप्न था, अब हल हो गया
porcateraC, 2018-08-19
بالضبط ما كنت أبحث عنه ، مثالي

發表評論