gd - PHP產生圖片太慢了。。有些都不出來、

來源:互聯網
上載者:User
現在為了使用不同寬高的圖片,做了個動態產生的程式。每次根據圖片傳入的寬高來輸出圖片,然後 html 頁面裡用

這個就是 900X400 的。

用也就是 php 的 GD 庫來建立個圖層,來根據比例重新畫出一個圖

imagecreatetruecolor($_n_w,$_n_h);imagecopyresampled($this->new,$this->img,0,0,$_cut_width,$_cut_height,$new_width,$new_height,$this->width,$this->height);

最後輸出圖片讓 html 引用 這個地址就行了

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

現在問題是 html 引用了後,好多圖片會出現一半,或者不出來了,效率太低了,有什麼改進辦法沒?

回複內容:

現在為了使用不同寬高的圖片,做了個動態產生的程式。每次根據圖片傳入的寬高來輸出圖片,然後 html 頁面裡用

這個就是 900X400 的。

用也就是 php 的 GD 庫來建立個圖層,來根據比例重新畫出一個圖

imagecreatetruecolor($_n_w,$_n_h);imagecopyresampled($this->new,$this->img,0,0,$_cut_width,$_cut_height,$new_width,$new_height,$this->width,$this->height);

最後輸出圖片讓 html 引用 這個地址就行了

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

現在問題是 html 引用了後,好多圖片會出現一半,或者不出來了,效率太低了,有什麼改進辦法沒?

PHP處理圖片本來就耗伺服器資源~~如果你一個頁面有很多需要這種時時去處理的圖片資源~~伺服器能忙過來~~

就樓上所提的一樣~~通過PHP程式或rewrite來判斷該尺寸的圖片是否已經存在,不存在處理。這樣可以減輕伺服器的壓力應該會提升處理的速度吧。~

樓下那些重複我的答案卻不點讚的幾個意思 ╮( ̄﹏ ̄)╭

首先,放棄 GD,改用 imagick。 \( ̄- ̄)/

其次,緩存。

最簡單的緩存設計:

url 爲 cache/image0001-1024x768.jpg

如果服務器找不到,則交給 PHP 處理,產生的結果儲存,下一次就和靜態資源沒甚區別了。 (○′ω`○)

再次,實際使用時完全沒有必要把各種大小都用上,固定用幾個就行了,後端的強大是爲了前端的方便而不是偷懶 ( ̄ˇ ̄)

比如 wikipedia 雖然支援任意縮放,但一般情況顯示的都是幾個固定大小,所以基本上也不會出現重複運算。╮( ̄▽ ̄)╭

直接用 CDN 服務商的自動影像目錄標籤工具吧,好像 upyun 和 qiniu 都有這種介面的。

不然的話,就使用 ImageMagick 庫,比 GD 快不知道多少倍。

這個設計本身就是錯誤的,比較科學的設計是實現計劃好所有的可能,然後選幾個分界點,在圖片上傳的同時,產生比如4-5個尺寸的圖片,每次就是純靜態訪問了
其餘的尺寸就是用瀏覽器自身的縮放

用js控制吧,去github上搜幾個庫用用就行
https://github.com/search?utf8=%E2%9C%93&q=img+fit

和一樓觀點相反,這不是錯誤的設計,這種更科學。就如樓上所說至少得加上緩衝
另外附上一個圖片縮減服務的項目https://github.com/thumbor/thumbor

用imagick和ImageMagick庫吧

1.使用ImageMagick
2.每次產生圖片的時候判斷這個尺寸的圖片是否存在,不存在,再產生。。。然後儲存(也就是緩衝吧)

推薦直接使用CDN商,例如七牛,我自己就是用七牛的,定了一套規則,把資來源目錄給做成一個子域,然後鏡像就解決問題,不需要整各種同步指令碼。

有的cdn支援圖片縮圖功能,

或者自己 rewrite 判斷檔案是否存在,不存在php處理完產生到相同路徑。

比如: /thumb/12345_100x100.jpg 第一次用PHP處理產生到 /thumb/12345_100x100.jpg,下次檔案存在就直接返回了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.