現在為了使用不同寬高的圖片,做了個動態產生的程式。每次根據圖片傳入的寬高來輸出圖片,然後 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,下次檔案存在就直接返回了。