茂名网站建设电话,建设银行投诉处理网站,漂亮的网页设计欣赏,seo是什么牌子问题 生成缩略图生成验证码生成二维码给图片加水印 外部引用 Node 不解释 https://nodejs.org/en/download/sharp 高性能缩略图 https://github.com/lovell/sharpqr-image 二维码 https://github.com/alexeyten/qr-imagecaptchagen 验证码 https://github.com/contra/ca… 问题 生成缩略图生成验证码生成二维码给图片加水印 外部引用 Node 不解释 https://nodejs.org/en/download/sharp 高性能缩略图 https://github.com/lovell/sharpqr-image 二维码 https://github.com/alexeyten/qr-imagecaptchagen 验证码 https://github.com/contra/captchagennode-images 轻量级跨平台图像编解码库 https://github.com/zhangyuanwei/node-images 生成缩略图代码resizeImage.js var sharp require(sharp); module.exports function (result, physicalPath, mimeType, maxWidth, maxHeight) { // Invoke the sharp NPM module, and have it pipe the resulting image data back to .NET sharp(physicalPath) .resize(maxWidth || null, maxHeight || null) .pipe(result.stream); } ResizeController.cs public class ResizeController : Controller { private const int MaxDimension 1000; private static string[] AllowedMimeTypes new[] { image/jpeg, image/png, image/gif }; private IHostingEnvironment _environment; private INodeServices _nodeServices; public ResizeController(IHostingEnvironment environment, INodeServices nodeServices) { _environment environment; _nodeServices nodeServices; } [Route(resize_{maxWidth}_{maxHeight}/{*imagePath})] public async TaskIActionResult Index(string imagePath, int maxWidth, int maxHeight) { imagePath imagePath; // Validate incoming params if (maxWidth 0 || maxHeight 0 || maxWidth MaxDimension || maxHeight MaxDimension || (maxWidth maxHeight) 0) { return BadRequest(Invalid dimensions); } var mimeType GetContentType(imagePath); if (Array.IndexOf(AllowedMimeTypes, mimeType) 0) { return BadRequest(Disallowed image format); } // Locate source image on disk var fileInfo _environment.WebRootFileProvider.GetFileInfo(imagePath); if (!fileInfo.Exists) { return NotFound(); } // Invoke Node and pipe the result to the response var imageStream await _nodeServices.InvokeAsyncStream( ./Node/resizeImage, fileInfo.PhysicalPath, mimeType, maxWidth, maxHeight); return File(imageStream, mimeType); } private string GetContentType(string path) { string result; return new FileExtensionContentTypeProvider().TryGetContentType(path, out result) ? result : null; } } 效果生成验证码代码captchagen.js var captchagen require(captchagen); module.exports function (result, width, height, text) { // optional object arg with keys: height, width, text, font var captcha captchagen.create({ width: width, height: height, text: text||8888}); captcha.generate(); // Draws the image to the canvas /* call generate() before running the below */ captcha.stream().pipe(result.stream); // outputs an image stream. type can be either png or jpeg (png is the default) } 效果生成二维码代码 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各种组件的应用. 原文地址http://www.cnblogs.com/wspnet/articles/NodeJS_NetCore_System_Drawing_Faq.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注