iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Node+UDP实现图片裁剪功能的方法
  • 934
分享到

Node+UDP实现图片裁剪功能的方法

2023-06-08 01:06:52 934人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关node+UDP实现图片裁剪功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。UDP服务器可以用于一些特殊数据的(高效)传输,例如图片、视频和音频信息等我见过一些大佬用U

这篇文章将为大家详细讲解有关node+UDP实现图片裁剪功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

UDP服务器可以用于一些特殊数据的(高效)传输,例如图片、视频和音频信息等

我见过一些大佬用UDP来和c++ server交互,主要目的就是希望将PHP无法处理的逻辑业务,通过UDP服务器发送给其他server来处理。

所以,能不能有这样一个需求:我们有两个服务器A、B,我们希望A处理所有的业务逻辑,而B只去做数据库操作(比如更新)。

有多个设计思想可以解决上面的问题,最简单的就是通过Http发送请求的方式,将A处理后的参数通过HTTP方式传递给B服务器,然后B服务器获取参数后更新数据库。 —— 这种方式对于node.js 来说非常简单,但是HTTP是一个tcp协议,对于我们自己的两台可信赖的服务器,我们更希望使用UDP来传送协议,避免TCP中不必要的数据传输。

接下来我们要介绍的一个应用,就是使用Node.js来处理图片上传切割(图片处理),并通过客户端显示所有的经过处理后的图片列表,而这个功能也将应用UDP模块来实现。

应用分析

本应用包含两个部分,一个是图片上传的WEB服务功能模块、图片处理后的页面展示功能;另外一个则是图片的处理,主要是图片的切割保存。而作为用户,希望是这样的一个工具,上传一个图片,并指定其需要切割的长和宽,通过系统处理后返回给用户一个切割好的图片,并通过页面返回展示。

根据以上的需求的分析,我们将上面的需求转化为如图4-5所示的系统运行流程图。根据应用的分析,我们会设计两个服务器,一一个是Web服务器,另外一个则是图片处理服务器,两者通过UDP协议进行交互:
Node+UDP实现图片裁剪功能的方法
图片上传页面,主要是图片的上传和预览功能页面;图片展示页面,展示通过图片处理后返回的图片; HTTP Web服务器主要的作用是文件上传和图片展示;图片处理服务器,将Web服务器的数据通过UDP协议传递给图片处理服务器,图片处理服务器做-定的处理后返回相应的数据到Web服务器。

UDP Server端实现 —— 图片处理服务器

根据上面的分析,本应用需要实现的3个功能模块分别是,UDP Server端、UDP Client端(Web Server) 和Jade页面。
那么首先我们从该应用的UDPServer端代码实现原理开始介绍(也就是图片处理服务器)。图片处理服务器作为UDP的server端,要应用UDP模块实现UDP server, 由于该UDP server依赖图片处理工具,因此在UDP服务程序中会应用GitHub中的一个开源Node.js图片处理工具一node -imagemagick来辅助实现图片处理功能。根据上面的分析,我们简单设计出UDP Server的代码框架,代码如下:

const dgram=require('dgram');   //UDPconst server=dgram.createSocket("udp4");server.on("message",function(msg,rinfo){//监听消息事件后处理})server.on("listening",function(){var address=server.address();console.log("server listening "+address.address+":"+address.port);})server.bind("监听端口号");

会发现,UDP其实似乎和socket.io差不多?都是采用的监听消息流机制。而http没有这样做,所以几乎不用http去做这些高交互的事情 —— 这固然和他们的内部实现有关。

监听完了,该干正事了:我们需要一个函数去处理图片。这个函数的触发时间要在事件流之后:

npm install imagemagick

需要注意的是,在使用该工具时,必须安装imagemagick-cli系统工具软件:sudo apt-get install imagemagick --fix-missing(否则会在运行期间抛出异常)

function resizeImage(url,width,height,newName,callback){var im=require('imagemagick');im.resize({srcPath: url,dstPath: newName,width: width,height: height}, function(err,stdout,stderr){if(err){callback(-1);}else{callback(stdout);}})}

然后在udp的onmessage回调函数中调用:

server.on("message",function(msg,rinfo){var imageObject=JSON.parse(msg);resizeImage(imageObject.url, imageObject.width, imageObject.height, imageObject.new_name, function(ret){var retJson;if(ret==-1){retJson={'code':-1,'msg':'some error in resize image','data':{}}}else{retJson={'code':0,'msg':'success','data':{'name':imageObject.new_name}}}//将json对象转为json字符串var retStr=JSON.stringify(retJson);//转为buffer对象,用于UDP传输var message=new Buffer(retStr);server.send(message,0,message.length,rinfo.port,rinfo.address);})})

server.on("message",callback(msg, rinfo))回调函数中有msg和rinfo参数,其中msg为客户端发送的消息数据,而rinfo则为客户端信息,服务器端根据客户端信息中的端口port和IP地址address, 应用server.send响应数据到客户端即可。到这里我们就实现了一个图片处理的UDP服务器,接下来介绍Web服务器端是如何与其交互的。

UDP Client端 —— 前台服务器

npm install express jade fORMidable body-parser
const jade=require('jade');const express=require('express');const bodyParser=require('body-parser');const fs=require('fs');const VIEW=__dirname+"/view/";var app=express();app.set('view engine','jade');app.use(bodyParser.urlencoded({extended: true}))app.get('/',function(req,res,next){//http响应文件上传页面res.render(VIEW+'index.jade');};//文件上传处理逻辑app.post('/upload',function(req,res,next){var now=Date.parse(new Date())/1000;var form=new formidable.IncomingForm(),fields=[],baseName=__dirname+'/uploadFile/'+now,imageName=baseName+'.png',   //源图片路径newName=baseName+'_small'+'.png',   //新文件路径pathName='/uploadFile/'+now+'_small'+'.png';form.on('field',function(field,value){fields.push([field,value]);});form.parse(req,function(error,fields,files){var size=''+fields.width+'x'+fields.heightfs.renameSync(files.image.path,imageName);imageResize(fields.width, fields.height, imageName, newName,res);})};app.listen('监听端口号');
form.parse(request, [callback]) 该方法会转换请求中所包含的表单数据,callback会包含所有字段域和文件信息

文件上传功能同样是应用formidable 模块,当然这里还应用到其获取POST数据的方法。formidable 模块提供了获取field参数的api form.on的field 事件,监听POST数据传递。所有的POST数据都需要应用form.parse 进行解析,解析返回fields对象和文件对象files。根据获取的width和height,调用imageResize对图片进行相应的压缩处理。

然后去实现imageResize函数:imageResize函数的主要功能是应用UDP模块连接UDPServer,将相应的参数数据转化为json字符通过UDP协议传递到UDPServer,并将UDPServer响应的数据通过res.render直接返回显示到相应的页面

function imageResize(width,height,imagePath,newName,res){var imageJson={'width':width,'height':height,'url':imagePath,'new_name':newName};var jsonStr=JSON.stringify(imageJson);var client=dgram.createSocket("udp4");var message=new Buffer(jsonStr);client.send(message,0,message.length,Server端监听的端口号,"域名",function(){client.on("message",function(msg,rinfo){var retJson=JSON.parse(msg);if(retJson.code===0){res.render(VIEW+'main.jade',{'url':pathName,'err':'ok'});}else{res.render(VIEW+'main.jade',{'url':'','err':'error'});}})})}

前端模板jade部分就先省去。。。

关于“Node+UDP实现图片裁剪功能的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Node+UDP实现图片裁剪功能的方法

本文链接: https://www.lsjlt.com/news/250636.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node+UDP实现图片裁剪功能的方法
    这篇文章将为大家详细讲解有关Node+UDP实现图片裁剪功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。UDP服务器可以用于一些特殊数据的(高效)传输,例如图片、视频和音频信息等我见过一些大佬用U...
    99+
    2023-06-08
  • cropperjs实现裁剪图片功能
    本文实例为大家分享了cropperjs实现裁剪图片功能的具体代码,供大家参考,具体内容如下 cropperjs (裁剪图片) vue版本 // 下载 // npm install c...
    99+
    2024-04-02
  • Vue图片裁剪功能实现代码
    目录一、效果展示:1、表单的图片上传项:2、裁剪框页面二、代码部分1、首先安装Vue-Cropper,基于此组件的基础上开发的裁剪页面2、裁剪弹窗的组件编写:3、【图片上传表单项】组...
    99+
    2024-04-02
  • 基于JavaScript实现图片裁剪功能
    目录一、图片文件的上传和读取二、图片展示和蒙层处理CSS clip-path三、裁剪框展示裁剪框的缩放点cursor 鼠标样式四、裁剪框移动事件五、裁剪框缩放操作六、完成裁剪功能dr...
    99+
    2023-02-21
    JavaScript实现图片裁剪JavaScript图片裁剪 JavaScript图片
  • cropperjs怎么实现裁剪图片功能
    这篇“cropperjs怎么实现裁剪图片功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“cropperjs怎么实现裁剪图片...
    99+
    2023-06-29
  • java实现的图片裁剪功能示例
    本文实例讲述了java实现的图片裁剪功能。分享给大家供大家参考,具体如下:PicCut.java:package Tsets;import java.awt.Rectangle;import java.awt.image.BufferedI...
    99+
    2023-05-31
    java 图片 裁剪
  • Java是怎么实现图片裁剪功能的
    今天就跟大家聊聊有关Java是怎么实现图片裁剪功能的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言下面提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。Mav...
    99+
    2023-06-29
  • Android实现裁剪照片功能
    本文实例为大家分享了Android实现裁剪照片功能的具体代码,供大家参考,具体内容如下 1.   从相册选择照片进行裁剪 从相册选择照片并裁剪: private void...
    99+
    2024-04-02
  • 基于JavaScript如何实现图片裁剪功能
    本篇内容介绍了“基于JavaScript如何实现图片裁剪功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、图片文件的上传和读取使用文件上...
    99+
    2023-07-05
  • android实现图片裁剪的两种方法
    两种android图片裁剪方式,供大家参考,具体内容如下 一、相机拍完照之后利用系统自带裁剪工具进行截取 public static void cropImage(Activit...
    99+
    2024-04-02
  • Java实现图片裁剪功能的示例详解
    目录前言Maven依赖代码验证一下前言 本文提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。 Maven依赖 <dependency>...
    99+
    2024-04-02
  • 微信小程序实现图片裁剪功能
    微信小程序实现图片裁剪功能随着微信小程序的快速发展,越来越多的开发者开始探索小程序的潜力。其中,图片处理功能是小程序中常见的需求之一。本文将介绍如何在微信小程序中实现图片裁剪功能,并提供具体的代码示例,帮助开发者快速实现这一功能。准备工作在...
    99+
    2023-11-21
    图片 微信小程序 裁剪
  • Vue实现简单基础的图片裁剪功能
    目录一、准备工作二、基本结构三、添加功能onMouseDownonMouseMoveonMouseUponMouseLeave四、总结近日,在写公司项目的时候接到一个需求:对已加载的...
    99+
    2024-04-02
  • 微信小程序图片裁剪功能的实现
    文章目录 图片上传与处理图片尺寸适配图片显示与裁剪框裁剪框的拖动与缩放增加canvas并裁剪图片保存图片到相册总结 在之前的博文中,已经介绍了如何使用在前端开发中,实现较方便自由的图片裁剪功能,可见博文: 如何一步步实现图片...
    99+
    2023-08-17
    微信小程序 小程序 前端 javascript
  • Java中怎么实现一个图片剪裁功能
    Java中怎么实现一个图片剪裁功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Listing1: 引入的类import java.awt.Graphics;&n...
    99+
    2023-06-17
  • JavaScript如何实现小程序图片裁剪功能
    这篇文章主要介绍“JavaScript如何实现小程序图片裁剪功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何实现小程序图片裁剪功能”文章能帮助大家解决问题。图片上传与处理要...
    99+
    2023-07-05
  • Android如何实现裁剪照片功能
    这篇文章主要介绍Android如何实现裁剪照片功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   从相册选择照片进行裁剪从相册选择照片并裁剪:private void cropFromGallery()...
    99+
    2023-06-29
  • vue-cropper实现裁剪图片
    本文实例为大家分享了vue-cropper实现裁剪图片的具体代码,供大家参考,具体内容如下 先展示一下效果 如何使用: 1、安装  npm install vue-cro...
    99+
    2024-04-02
  • 微信小程序实现图片裁剪并上传功能
    微信小程序实现图片裁剪并上传功能随着微信小程序的快速发展,越来越多的开发者开始关注微信小程序的开发技巧和功能实现。其中,图片裁剪并上传功能是一个常见的需求,本文将介绍如何在微信小程序中实现图片裁剪并上传的功能,并提供具体的代码示例。一、功能...
    99+
    2023-11-21
    微信 小程序 图片裁剪 上传
  • thinkphp框架中的图片旋转裁剪功能怎么实现
    这篇文章主要讲解了“thinkphp框架中的图片旋转裁剪功能怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp框架中的图片旋转裁剪功能怎么实现”吧!第一步:安装think...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作