您好,登錄后才能下訂單哦!
這篇文章主要講解了“node.jS怎么實(shí)現(xiàn)圖片跟文本分離”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“node.jS怎么實(shí)現(xiàn)圖片跟文本分離”吧!
本文實(shí)例為大家分享了NodeJS實(shí)現(xiàn)圖片文本分割的具體代碼,供大家參考,具體內(nèi)容如下
var fs = require('fs'); var jpeg = require('jpeg-js') function getSumRGB(data, i) { var cr = data.data[i+0] var cg = data.data[i+1] var cb = data.data[i+2] var srgb = (cr+cg+cb) return srgb } function getTopRGB(data, i) { var topIndex = (data.width * 4 * -1) i= i + topIndex; var cr = data.data[i+0] var cg = data.data[i+1] var cb = data.data[i+2] return [cr,cg,cb] } function getHeightRGB(data, i, haveRGB) { var width = data.width var height = data.height var len = width * height * 4 var haveNum = 0 for(i=i;i<len;i+=width*4) { if(getSumRGB(data, i) == haveRGB) { haveNum++ } } return haveNum } function ClearBackGround(data) { var width = data.width var height = data.height var len = width * height * 4 var i, tmp for(i=0;i<len;i+=4) { tmp = getSumRGB(data, i) if(tmp > 120*3) { data.data[i+0]=255 data.data[i+1]=255 data.data[i+2]=255 } } for(i=0;i<len;i+=4) { tmp = getSumRGB(data, i) if(tmp <= 32*3) { tmp = getTopRGB(data, i) data.data[i+0]=tmp[0] data.data[i+1]=tmp[1] data.data[i+2]=tmp[2] } } for(i=0;i<len;i+=4) { tmp = getSumRGB(data, i) if(tmp !=255*3) { data.data[i+0]=0 data.data[i+1]=0 data.data[i+2]=0 } } var maxwidth = width * 4 var arrlist = [] arrlist[0]=[] arrlist[1]=[] arrlist[2]=[] arrlist[3]=[] arrnum = 0 block = 0 for(i=0;i<maxwidth;i+=4) { tmp= getHeightRGB(data, i, 0) if(tmp==0) { if(block != 0) { arrlist[arrnum] = [block/4,i/4] block=0 arrnum++ } } else if(tmp >0 ) { if(block == 0) { block = i } } } console.log(arrlist) return data } var picname = "tmp.jpg" var newpicname= "000.jpg" var jpegData = fs.readFileSync(picname) var rawImageData = jpeg.decode(jpegData, {useTArray: true}) rawImageData = ClearBackGround(rawImageData) var jpegImageData = jpeg.encode(rawImageData,100) fs.writeFileSync(newpicname, jpegImageData.data)
再為大家分享JS實(shí)現(xiàn)圖片切割的方法:
//圖片切割 var ImgCropper = Class.create(); ImgCropper.prototype = { //容器對(duì)象,控制層,圖片地址 initialize: function(container, handle, url, options) { this._Container = $(container);//容器對(duì)象 this._layHandle = $(handle);//控制層 this.Url = url;//圖片地址 this._layBase = this._Container.appendChild(document.createElement("img"));//底層 this._layCropper = this._Container.appendChild(document.createElement("img"));//切割層 this._layCropper.onload = Bind(this, this.SetPos); //用來(lái)設(shè)置大小 this._tempImg = document.createElement("img"); this._tempImg.onload = Bind(this, this.SetSize); this.SetOptions(options); this.Opacity = Math.round(this.options.Opacity); this.Color = this.options.Color; this.Scale = !!this.options.Scale; this.Ratio = Math.max(this.options.Ratio, 0); this.Width = Math.round(this.options.Width); this.Height = Math.round(this.options.Height); //設(shè)置預(yù)覽對(duì)象 var oPreview = $(this.options.Preview);//預(yù)覽對(duì)象 if(oPreview){ oPreview.style.position = "relative"; oPreview.style.overflow = "hidden"; this.viewWidth = Math.round(this.options.viewWidth); this.viewHeight = Math.round(this.options.viewHeight); //預(yù)覽圖片對(duì)象 this._view = oPreview.appendChild(document.createElement("img")); this._view.style.position = "absolute"; this._view.onload = Bind(this, this.SetPreview); } //設(shè)置拖放 this._drag = new Drag(this._layHandle, { Limit: true, onMove: Bind(this, this.SetPos), Transparent: true }); //設(shè)置縮放 this.Resize = !!this.options.Resize; if(this.Resize){ var op = this.options, _resize = new Resize(this._layHandle, { Max: true, onResize: Bind(this, this.SetPos) }); //設(shè)置縮放觸發(fā)對(duì)象 op.RightDown && (_resize.Set(op.RightDown, "right-down")); op.LeftDown && (_resize.Set(op.LeftDown, "left-down")); op.RightUp && (_resize.Set(op.RightUp, "right-up")); op.LeftUp && (_resize.Set(op.LeftUp, "left-up")); op.Right && (_resize.Set(op.Right, "right")); op.Left && (_resize.Set(op.Left, "left")); op.Down && (_resize.Set(op.Down, "down")); op.Up && (_resize.Set(op.Up, "up")); //最小范圍限制 this.Min = !!this.options.Min; this.minWidth = Math.round(this.options.minWidth); this.minHeight = Math.round(this.options.minHeight); //設(shè)置縮放對(duì)象 this._resize = _resize; } //設(shè)置樣式 this._Container.style.position = "relative"; this._Container.style.overflow = "hidden"; this._layHandle.style.zIndex = 200; this._layCropper.style.zIndex = 100; this._layBase.style.position = this._layCropper.style.position = "absolute"; this._layBase.style.top = this._layBase.style.left = this._layCropper.style.top = this._layCropper.style.left = 0;//對(duì)齊 //初始化設(shè)置 this.Init(); }, //設(shè)置默認(rèn)屬性 SetOptions: function(options) { this.options = {//默認(rèn)值 Opacity: 50,//透明度(0到100) Color: "",//背景色 Width: 0,//圖片高度 Height: 0,//圖片高度 //縮放觸發(fā)對(duì)象 Resize: false,//是否設(shè)置縮放 Right: "",//右邊縮放對(duì)象 Left: "",//左邊縮放對(duì)象 Up: "",//上邊縮放對(duì)象 Down: "",//下邊縮放對(duì)象 RightDown: "",//右下縮放對(duì)象 LeftDown: "",//左下縮放對(duì)象 RightUp: "",//右上縮放對(duì)象 LeftUp: "",//左上縮放對(duì)象 Min: false,//是否最小寬高限制(為true時(shí)下面min參數(shù)有用) minWidth: 50,//最小寬度 minHeight: 50,//最小高度 Scale: false,//是否按比例縮放 Ratio: 0,//縮放比例(寬/高) //預(yù)覽對(duì)象設(shè)置 Preview: "",//預(yù)覽對(duì)象 viewWidth: 0,//預(yù)覽寬度 viewHeight: 0//預(yù)覽高度 }; Extend(this.options, options || {}); }, //初始化對(duì)象 Init: function() { //設(shè)置背景色 this.Color && (this._Container.style.backgroundColor = this.Color); //設(shè)置圖片 this._tempImg.src = this._layBase.src = this._layCropper.src = this.Url; //設(shè)置透明 if(isIE){ this._layBase.style.filter = "alpha(opacity:" + this.Opacity + ")"; } else { this._layBase.style.opacity = this.Opacity / 100; } //設(shè)置預(yù)覽對(duì)象 this._view && (this._view.src = this.Url); //設(shè)置縮放 if(this.Resize){ with(this._resize){ Scale = this.Scale; Ratio = this.Ratio; Min = this.Min; minWidth = this.minWidth; minHeight = this.minHeight; } } }, //設(shè)置切割樣式 SetPos: function() { //ie6渲染bug if(isIE6){ with(this._layHandle.style){ zoom = .9; zoom = 1; }; }; //獲取位置參數(shù) var p = this.GetPos(); //按拖放對(duì)象的參數(shù)進(jìn)行切割 this._layCropper.style.clip = "rect(" + p.Top + "px " + (p.Left + p.Width) + "px " + (p.Top + p.Height) + "px " + p.Left + "px)"; //設(shè)置預(yù)覽 this.SetPreview(); }, //設(shè)置預(yù)覽效果 SetPreview: function() { if(this._view){ //預(yù)覽顯示的寬和高 var p = this.GetPos(), s = this.GetSize(p.Width, p.Height, this.viewWidth, this.viewHeight), scale = s.Height / p.Height; //按比例設(shè)置參數(shù) var pHeight = this._layBase.height * scale, pWidth = this._layBase.width * scale, pTop = p.Top * scale, pLeft = p.Left * scale; //設(shè)置預(yù)覽對(duì)象 with(this._view.style){ //設(shè)置樣式 width = pWidth + "px"; height = pHeight + "px"; top = - pTop + "px "; left = - pLeft + "px"; //切割預(yù)覽圖 clip = "rect(" + pTop + "px " + (pLeft + s.Width) + "px " + (pTop + s.Height) + "px " + pLeft + "px)"; } } }, //設(shè)置圖片大小 SetSize: function() { var s = this.GetSize(this._tempImg.width, this._tempImg.height, this.Width, this.Height); //設(shè)置底圖和切割圖 this._layBase.style.width = this._layCropper.style.width = s.Width + "px"; this._layBase.style.height = this._layCropper.style.height = s.Height + "px"; //設(shè)置拖放范圍 this._drag.mxRight = s.Width; this._drag.mxBottom = s.Height; //設(shè)置縮放范圍 if(this.Resize){ this._resize.mxRight = s.Width; this._resize.mxBottom = s.Height; } }, //獲取當(dāng)前樣式 GetPos: function() { with(this._layHandle){ return { Top: offsetTop, Left: offsetLeft, Width: offsetWidth, Height: offsetHeight } } }, //獲取尺寸 GetSize: function(nowWidth, nowHeight, fixWidth, fixHeight) { var iWidth = nowWidth, iHeight = nowHeight, scale = iWidth / iHeight; //按比例設(shè)置 if(fixHeight){ iWidth = (iHeight = fixHeight) * scale; } if(fixWidth && (!fixHeight || iWidth > fixWidth)){ iHeight = (iWidth = fixWidth) / scale; } //返回尺寸對(duì)象 return { Width: iWidth, Height: iHeight } } }
感謝各位的閱讀,以上就是“node.jS怎么實(shí)現(xiàn)圖片跟文本分離”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)node.jS怎么實(shí)現(xiàn)圖片跟文本分離這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。