PHP生成图片太慢了。。有些都不出来、
现在为了使用不同宽高的图片,做了个动态生成的程序。每次根据图片传入的宽高来输出图片,然后 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 引用了后,好多图片会出现一半,或者不出来了,效率太低了,有什么改进办法没?
10 个回答
樓下那些重複我的答案卻不點讚的幾個意思 ╮( ̄﹏ ̄)╭
首先,放棄 GD,改用 imagick。 \( ̄- ̄)/
其次,緩存。
最簡單的緩存設計:
url 爲 cache/image0001-1024x768.jpg
如果服務器找不到,則交給 PHP 處理,生成的結果保存,下一次就和靜態資源沒甚區別了。 (○′ω`○)
再次,實際使用時完全沒有必要把各種大小都用上,固定用幾個就行了,後端的強大是爲了前端的方便而不是偷懶 ( ̄ˇ ̄)
比如 wikipedia 雖然支持任意縮放,但一般情況顯示的都是幾個固定大小,所以基本上也不會出現重複運算。╮( ̄▽ ̄)╭
murmur 609 2014年12月31日 回答
这个设计本身就是错误的,比较科学的设计是实现计划好所有的可能,然后选几个分界点,在图片上传的同时,生成比如4-5个尺寸的图片,每次就是纯静态访问了
其余的尺寸就是用浏览器自身的缩放
用js控制吧,去github上搜几个库用用就行
https://github.com/search?utf8=%E2%9C%93&q=img+fit
和一楼观点相反,这不是错误的设计,这种更科学。就如楼上所说至少得加上缓存
另外附上一个图片缩略服务的项目https://github.com/thumbor/thumbor
有的cdn支持图片缩略图功能,
或者自己 rewrite 判断文件是否存在,不存在php处理完生成到相同路径。
比如: /thumb/12345_100x100.jpg 第一次用PHP处理生成到 /thumb/12345_100x100.jpg,下次文件存在就直接返回了。
viphackl 20 1月5日 回答
PHP处理图片本来就耗服务器资源如果你一个页面有很多需要这种时时去处理的图片资源服务器能忙过来~~
就楼上所提的一样~~通过PHP程序或rewrite来判断该尺寸的图片是否已经存在,不存在处理。这样可以减轻服务器的压力应该会提升处理的速度吧。~
PHP生成图片太慢了。。有些都不出来、的更多相关文章
- 你听说过哪些坑人 or 赚钱的歪点子?真是骗局太多,傻子都不够用啊!
又到了骗术揭秘时间了.各位看客您扶稳做好了,来给你深扒一些行业内幕了. 或者说一些投机的思路. 先提前写一些字,相信你们一会评论时候会用的上.直接复制,比较省力. “这年头傻逼太多,骗子明显不够用啊. ...
- 《OKR工作法》| 一次说太多等于什么都没说
在<OKR工作法>中,作者用汉娜和杰克一起创造TeaBee的故事来为我们讲解OKR可以解决的问题以及如何去实践OKR.给我印象最深的他们用OKR目标管理失败的时候埋怨这种管理方法是有问题的 ...
- 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)
精神是好的.但是,我看了你的产品和网站:你选的创业方向基本是死路一条,我劝你该放弃就放弃.我判断你的思路还局限在IT行业内,创业不要在IT业内创,要走出去,睁开眼看看别人的世界,自己体会.我不是打击你 ...
- tflearn 中文汉字识别,训练后模型存为pb给TensorFlow使用——模型层次太深,或者太复杂训练时候都不会收敛
tflearn 中文汉字识别,训练后模型存为pb给TensorFlow使用. 数据目录在data,data下放了汉字识别图片: data$ ls0 1 10 11 12 13 14 15 ...
- .NET破解之太乐地图下载器【非暴破】
不知不觉,接触破解逆向已经三个月了,从当初的门外汉到现在的小白,这个过程只有经历过才知道其中的苦与乐: 有无知.困惑.痛苦.惊喜.彻悟.欣慰…… 有无助的软件脱壳,茫然的代码分析,有无趣的反复测试, ...
- JDK源码中,都有哪些NB的设计模式?
转载:https://mp.weixin.qq.com/s/h88UxB9F2MkTbHqck3KQiQ 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼:在我们业务代码 ...
- Delphi程序员如何找到高薪的工作?(赚不到钱,原因只有一个,就是他们没有被公司录取。Delphi必须要独自进行深入研究,才能精通,同时也不能自由性太强)
转帖自:http://www.tommstudio.com/ViewNews.aspx?ID=187http://hi.baidu.com/rarnu/blog/ 本文翻译自<美国优秀经理观念大 ...
- 初学者学Java常遇到的问题,我都给你回答了!
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 春节在家刷知乎,看到了一个知乎的问题:<学 ...
- RocketMQ的push消费方式实现的太聪明了
大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶 ...
随机推荐
- 11i REP-3000: 启动 Oracle Toolkit 时发生内部错误.
+---------------------------------------------------------------------------+ 应用对象程序库: Version : 11. ...
- Android 分享透明图片到微信变黑的问题
/** * bitmap中的透明色用白色替换 * * @param bitmap * @return */ public static Bitmap changeColor(Bitmap bitmap ...
- EasyMvc入门教程-高级控件说明(15)方位布局控件
现在很多管理后台都流行全屏切割的布局,大体结构如下图所示: 大家注意到没,整个布局是五个部分组成:“东西南北中”,EasyMvc对应的实现的代码为: @(Html.Q().Layout().TextC ...
- Kali Linux信息收集工具全
可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得那个戏份不多但一直都在的Q先生(由于年级太长目前已经退休).他为007发明了众多神奇 ...
- CentOS7.0修改主机名(hostname)
Linux中的hostname在大多数应用中至为重要,例如有些应用强制使用主机名称而不能使用IP地址,如果默认主机名称都为localhost.localdomain 的话那一定会出现问题,而且看起来也 ...
- 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist
运行mybatis-generator之后,出现错误:project E is not exist 错误原因:使用了项目的绝对路径. http://bbs.csdn.net/topics/3914 ...
- Vmware+gdb调试Linux内核——工欲善其事,必先利其器
今天我最终忍受不了qemu的低速跟不可理喻的各种bug,開始寻找新的调试内核的方法.然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核.于是尝试了一番,发现结果很的棒!所以立刻奋笔疾书.把这 ...
- NodeJS 安装cnpm命令行工具
在安装之前,请确保已安装Git和NodeJS. cmd机内命令窗口,输入以下命令: git config --system http.sslcainfo /bin/curl-ca-bundle.crt ...
- JSP简单练习-用Servlet获取表单数据
// javaBean代码 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.* ...
- VC进程间通信之消息传递PostMessge()或SendMessage()
1. 进程内消息: (1). 仅仅传消息码 (2). 传送消息串 发送端: void CTestDlg::OnBnClickedButtonSend() { CString* msg = new C ...