Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
我在拜访时光网、网易云音乐等网站时,发明将它们页面中的一些图片URL修改一下就可以获得不合尺寸的图片,于是思虑了其实现筹划,我的思路是:URL Rewrite + 及时处理 + 缓存,对用户请求的URL进行重写,然后应用图片处理类库对图片进行处理,接着缓存该尺寸图片并输出到浏览器。应用PHP和Node.js实现了一遍,根本达到了须要的效不雅。
1、Nginx+Node.js(express)实现
- app.get('/resize',function(req,res){
- var src = req.query.src,
- width = req.query.w,
- height = req.query.h,
- type = req.query.type;
- var imgFile = uploadDir+src+'.'+type;
- var notFound = '不好意思,该图片不存在或已被删除!';
- var thumb = getThumbImg(src,width,height,type);
- if(isFileExists(imgFile)){
- if(isFileExists(thumb)){
- res.type(type).sendFile(__dirname+'/'+thumb);
- }else{
- imgResize(imgFile,thumb,width,height,type,res);
- }
- }else{
- res.status(404).send(notFound);
- }
- });
- function imgResize(f,th,w,h,t,r){
- var imgSize = sizeOf(f);
- if(!w||!h||w>=imgSize.width||h>=imgSize.height){
- r.type(t).sendFile(__dirname+'/'+f);
- }else{
- imageMagick(f)
- .resize(w,h,'!')
- .stream(function(err, stdout, stderr) {
- if (err) {
- console.log(err);
- res.end();
- }
- var ws = fs.createWriteStream(th);
- stdout.pipe(ws);
- r.type(t);
- stdout.pipe(r);
- });
- }
- }
- function isFileExists(filePath){
- var bool = !0;
- try{
- fs.accessSync(filePath,fs.constants.F_OK);
- }catch(err){
- bool = !1;
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践Cartesian针对40多个访谈和跨越100个受访者的在线查询拜访促成其宣布了《收集的将来:应对虚拟范畴的变革》的申报,受访>>>详细阅读
本文标题:nodejs和php实现图片访问实时处理
地址:http://www.17bianji.com/lsqh/39096.html
1/2 1