跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题
发布时间:2016-10-31 14:31:22 所属栏目:教程 来源:站长网
导读:问题 生成缩略图 生成验证码 生成二维码 给图片加水印 外部引用 Node 不解释 https://nodejs.org/en/download/ sharp 高性能缩略图 https://github.com/lovell/sharp qr-image 二维码 https://github.com/alexeyten/qr-image captchagen 验证码 https://gi
问题
外部引用
生成缩略图代码 1 var sharp = require('sharp'); 2 3 module.exports = function (result, physicalPath, mimeType, maxWidth, maxHeight) { 4 // Invoke the 'sharp' NPM module, and have it pipe the resulting image data back to .NET 5 sharp(physicalPath) 6 .resize(maxWidth || null, maxHeight || null) 7 .pipe(result.stream); 8 } ResizeController.cs 1 public class ResizeController : Controller 2 { 3 private const int MaxDimension = 1000; 4 private static string[] AllowedMimeTypes = new[] { "image/jpeg", "image/png", "image/gif" }; 5 6 private IHostingEnvironment _environment; 7 private INodeServices _nodeServices; 8 9 public ResizeController(IHostingEnvironment environment, INodeServices nodeServices) 10 { 11 _environment = environment; 12 _nodeServices = nodeServices; 13 } 14 15 [Route("resize_{maxWidth}_{maxHeight}/{*imagePath}")] 16 public async Task<IActionResult> Index(string imagePath, int maxWidth, int maxHeight) 17 { 28 imagePath = imagePath; 29 // Validate incoming params 30 if (maxWidth < 0 || maxHeight < 0 || maxWidth > MaxDimension || maxHeight > MaxDimension 31 || (maxWidth + maxHeight) == 0) 32 { 33 return BadRequest("Invalid dimensions"); 34 } 35 36 var mimeType = GetContentType(imagePath); 37 if (Array.IndexOf(AllowedMimeTypes, mimeType) < 0) 38 { 39 return BadRequest("Disallowed image format"); 40 } 41 42 // Locate source image on disk 43 var fileInfo = _environment.WebRootFileProvider.GetFileInfo(imagePath); 44 if (!fileInfo.Exists) 45 { 46 return NotFound(); 47 } 48 49 // Invoke Node and pipe the result to the response 50 var imageStream = await _nodeServices.InvokeAsync<Stream>( 51 "./Node/resizeImage", 52 fileInfo.PhysicalPath, 53 mimeType, 54 maxWidth, 55 maxHeight); 56 return File(imageStream, mimeType); 57 } 58 59 private string GetContentType(string path) 60 { 61 string result; 62 return new FileExtensionContentTypeProvider().TryGetContentType(path, out result) ? result : null; 63 } 64 } 效果 1 var captchagen = require('captchagen'); 2 module.exports = function (result, width, height, text) { 3 // optional object arg with keys: height, width, text, font 4 var captcha = captchagen.create({ width: width, height: height, text: text||'8888'}); 5 captcha.generate(); // Draws the image to the canvas 6 /* call `generate()` before running the below */ 7 captcha.stream().pipe(result.stream); // outputs an image stream. type can be either png or jpeg (png is the default) 8 } 效果 1 var qr = require('qr-image'); 2 module.exports = function (result, size, url) { 3 qr.image(url, { type: 'png', size: size, margin: 1 }) 4 .pipe(result.stream); 5 } 效果 安装Node引用组件时费了不少时间主要是因为没细看作者给出的各种环境下的安装说明。 加水印目前还没做好,主要是要修改源码实现支持stream类型输出 抛砖引玉,希望更多朋友分享 Node各种组件的应用, (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |