最近在使用 PHP 的時候,遇到了一個問題,就是在使用 imagejpeg 函數(shù)時出現(xiàn)了亂碼。我找了很多資料,最終也解決了這個問題。在此,我想分享一下這個問題的原因和解決方法。
首先,我們來看一個簡單的實例:
header('Content-Type: image/jpeg'); $img = imagecreatefromjpeg('test.jpg'); imagejpeg($img, null, 75); imagedestroy($img);這段代碼是將一個名為 test.jpg 的圖片輸出到瀏覽器中。然而,有時候我們會遇到輸出的圖片出現(xiàn)亂碼的情況。原因是我們沒有給 imagejpeg 函數(shù)傳遞正確的文件名或輸出流。 因此,我們應該將上面的代碼修改為:
header('Content-Type: image/jpeg'); $img = imagecreatefromjpeg('test.jpg'); imagejpeg($img, 'test-output.jpg', 75); imagedestroy($img);這樣,就能正常地輸出圖片了。不過,有時候我們可能需要直接將圖片輸出到瀏覽器,那么我們該怎么做呢?
header('Content-Type: image/jpeg'); $img = imagecreatefromjpeg('test.jpg'); imagejpeg($img); imagedestroy($img);上面這段代碼直接將圖片輸出到瀏覽器。然而,在某些情況下,我們會發(fā)現(xiàn)輸出的圖片有亂碼,而且每次刷新都會變化。為什么會這樣呢? 這是因為我們沒有在 header 中設置圖片的大小和字節(jié)信息。因此,我們需要增加一些代碼,讓 PHP 能夠正確地輸出圖片信息。
header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize('test.jpg')); $img = imagecreatefromjpeg('test.jpg'); imagejpeg($img); imagedestroy($img);上面這段代碼將圖片大小的信息設置在 header 中。這樣,我們就能夠正確地輸出圖片了。 總結一下,PHP 的 imagejpeg 函數(shù)輸出亂碼的原因可能有兩種:一是沒有給函數(shù)傳遞正確的文件名或輸出流,二是沒有在 header 中設置圖片的大小和字節(jié)信息。因此,我們在使用 imagejpeg 函數(shù)的時候,一定要注意這兩點。