现在为了使用不同宽高的图片,做了个动态生成的程序。每次根据图片传入的宽高来输出图片,然后 html 页面里用
<img src="xxx.com/img?src=c8d997dae152b2bfdfd0a48a6142ec_900_400.jpg" />
这个就是 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
,下次文件存在就直接返回了。