簡體   English   中英

PHP Content-length標頭延遲加載

[英]PHP Content-length header delays loading

我有一個PHP網頁,該網頁從數據庫中獲取BLOB並將其作為圖像輸出。 當用戶上傳該圖像時,我將文件大小(例如491099 )存儲到數據庫中。

當通過我的網頁請求圖像時,我添加了水印,設置HTTP HEADERS並通過imagejpeg($img)輸出圖像。 現在的問題是,當我的圖像完全加載后(幾乎不需要時間),我的瀏覽器仍然顯得“忙”(加載指示器旋轉)。 通過異步調用請求此頁面時,即使實際上沒有時間立即加載圖像,也使加載時間變長。

當我簡單地刪除Content-length標頭時,就像以前一樣加載圖像,但是現在瀏覽器在加載時就停止了,因此處理時間確實很快。

因此,似乎瀏覽器認為(由於我的Content-length標頭)它仍然應該在加載某些內容,而實際上卻不是...

刪除Content-length標頭是沒有選擇的,因為在我閱讀過的許多瀏覽器中都需要這樣做。

// set the header for the image
header("Content-length: " . $image->imageSize);    //would be 491099 in my example
header("Content-type: " . $image->imageType);
header('Content-Disposition: inline; filename=" '. $image->imageName . '"');

$watermark          = imagecreatefrompng('../images/watermark.png');
$watermark_width    = imagesx($watermark); 
$watermark_height   = imagesy($watermark);  
$dest_x             = ($image->imageWidth - $watermark_width) / 2;  
$dest_y             = $image->height - $watermark_height - 5;
$img = imagecreatefromstring($image->image);
imagecopymerge($img, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 55);

imagejpeg($img);

(請注意, $image是我創建的自定義圖像類的對象,其中包含有關圖像的所有信息。)

有人知道為什么我會有這種行為嗎?

謝謝!

請嘗試:

ob_start();
imagejpeg($img);

// this should be the real image size
$size = ob_get_length();

header("Content-length: " . $size); 

// send it
ob_flush();

在未更改的圖像上添加水印會創建一個新圖像,幾乎可以肯定它具有不同的文件大小,尤其是在jpeg(有損壓縮)的情況下。 實際上,即使您不進行任何修改,某些圖像程序和庫也會重新壓縮jpg,從而導致文件內容有所不同(盡管可能看不到明顯不同的圖像)。

一個Trick Pony的答案將為您提供新圖像的正確文件大小,而對性能的影響最小。

另一個選擇是在將Blob保存到DB之前添加水印,但隨后您將無法呈現原始水印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM