php header函數輸出圖片緩衝實現代碼

來源:互聯網
上載者:User
  1. // put this above any php image generation code:
  2. session_start();
  3. header("Cache-Control: private, max-age=10800, pre-check=10800");
  4. header("Pragma: private");
  5. header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
複製代碼

在header("Content-type: image/jpeg");添加這段代碼,它將規定當前頁面緩衝的時間(兩天),並在下一次訪問中使用這個緩衝時間節點。接下來判斷是否已經有緩衝,如果有,就使用緩衝。

情況一:如果瀏覽器對當前頁面已經有緩衝,那麼就直接使用它。

  1. // the browser will send a $_SERVER['HTTP_IF_MODIFIED_SINCE'] if it has a cached copy
  2. if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
  3. // if the browser has a cached version of this image, send 304
  4. header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
  5. exit;
  6. }
複製代碼

情況二:瀏覽器緩衝了當前頁,雖然更新了某些圖片資訊,但來源圖片本身沒有變化,而且希望使用之前的緩衝,那麼也使用緩衝。

  1. $img = "some_image.png";
  2. if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($img))) {
  3. // send the last mod time of the file back
  4. header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($img)).' GMT',true, 304);
  5. exit;
  6. }
複製代碼

當然,有些特殊的情況我們還必須考慮,記得把它們都放在header("Content-type: image/jpeg")的上面。

例子:

  1. //調整圖片大小
  2. /**
  3. *圖片按比例調整大小的原理:
  4. *1、比較原圖大小是否小於等於目標大小,如果是則直接採用原圖寬高
  5. *2、如果原圖大小超過目標大小,則對比原圖寬高大小
  6. *3、如:寬>高,則寬=目標寬, 高=目標寬的比例 * 原高
  7. *4、如:高>寬,則高=目標高,寬=目標高的比例 * 原寬
  8. **/ bbs.it-home.org
  9. $image = "test.jpg";
  10. $max_width = 200;
  11. $max_height = 200;
  12. $size = getimagesize($image); //得到映像的大小
  13. $width = $size[0];
  14. $height = $size[1];
  15. $x_ratio = $max_width / $width;
  16. $y_ratio = $max_height / $height;
  17. if (($width <= $max_width) && ($height <= $max_height))
  18. {
  19. $tn_width = $width;
  20. $tn_height = $height;
  21. }
  22. elseif (($x_ratio * $height) < $max_height)
  23. {
  24. $tn_height = ceil($x_ratio * $height);
  25. $tn_width = $max_width;
  26. }
  27. else
  28. {
  29. $tn_width = ceil($y_ratio * $width);
  30. $tn_height = $max_height;
  31. }
  32. $src = imagecreatefromjpeg($image);
  33. $dst = imagecreatetruecolor($tn_width, $tn_height); //建立一個真彩色映像
  34. imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width, $tn_height, $width, $height); //重採樣拷貝部分映像並調整大小
  35. header('Content-Type: image/jpeg');
  36. imagejpeg($dst,null,100);
  37. imagedestroy($src);
  38. imagedestroy($dst);
  39. ?>
複製代碼
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.