NodeJS realisiert die Bildtextsegmentierung

NodeJS realisiert die Bildtextsegmentierung

In diesem Artikel wird der spezifische Code von NodeJS zur Implementierung der Bildtextsegmentierung zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

var fs = erfordern('fs');
var jpeg = erforderlich('jpeg-js')
 
 
Funktion getSumRGB(Daten, i)
{
 var cr = Daten.Daten[i+0]
 var cg = Daten.Daten[i+1]
 var cb = Daten.Daten[i+2]
 var srgb = (cr+cg+cb)
 Rückgabe SRGB
}
 
Funktion getTopRGB(Daten, i)
{
 var topIndex = (Datenbreite * 4 * -1)
 i= i + obersterIndex;
 var cr = Daten.Daten[i+0]
 var cg = Daten.Daten[i+1]
 var cb = Daten.Daten[i+2]
 
 Rückgabe [cr, cg, cb]
}
 
Funktion getHeightRGB(Daten, i, haveRGB)
{
 var Breite = Datenbreite
 var Höhe = Datenhöhe
 var Länge = Breite * Höhe * 4
 var haveNum = 0
 
 für (i=i;i<Länge;i+=Breite*4)
 {
  wenn(getSumRGB(Daten, i) == haveRGB)
  {
   habeAnzahl++
  }
 }
 
 returniere haveNum
}
 
Funktion ClearBackGround(Daten)
{ 
 var Breite = Datenbreite
 var Höhe = Datenhöhe
 var Länge = Breite * Höhe * 4
 var i, tmp
 für (i = 0; i < Länge; i + = 4) 
 {
  tmp = getSumRGB(Daten, i)
  wenn(tmp > 120*3) {
   Daten.Daten[i+0]=255
   Daten.Daten[i+1]=255
   Daten.Daten[i+2]=255
  }
 }
 
 für (i = 0; i < Länge; i + = 4)
 {
  tmp = getSumRGB(Daten, i)
  wenn(tmp <= 32*3) {
   tmp = getTopRGB(Daten, i)
   Daten.Daten[i+0]=tmp[0]
   Daten.Daten[i+1]=tmp[1]
   Daten.Daten[i+2]=tmp[2]
  }
 }
 
 für (i = 0; i < Länge; i + = 4)
 {
  tmp = getSumRGB(Daten, i)
  wenn(tmp != 255*3) {
   Daten.Daten[i+0]=0
   Daten.Daten[i+1]=0
   Daten.Daten[i+2]=0
  }
 }
 
 var maxwidth = Breite * 4
 var arrlist = []
 arrlist[0]=[]
 arrlist[1]=[]
 arrlist[2]=[]
 arrlist[3]=[]
 arrnum = 0
 Block = 0
 
 für (i = 0; i < max. Breite; i + = 4)
 {
  tmp = getHeightRGB(Daten, i, 0)
  wenn(tmp==0) {
   wenn(block != 0) {
    arrlist[arrnum] = [block/4,i/4]
    Block = 0
    arrnum++
   }
  } sonst wenn(tmp >0 ) {
   wenn(block == 0) {
    Block = ich
   }
  }
 }
 
 console.log(arrliste)
 
 Rückgabedaten
}
 
 
var Bildname = "tmp.jpg"
var neuerBildname = "000.jpg"
var jpegData = fs.readFileSync(Bildname)
var rawImageData = jpeg.decode(jpegData, {useTArray: true})
rawImageData = ClearBackGround(rawImageData)
var jpegImageData = jpeg.encode(rawImageData,100)
fs.writeFileSync(neuerBildname, jpegImageData.data)

Lassen Sie mich Ihnen die Methode zum Implementieren des Bildausschnitts mit JS erläutern:

//Bild zuschneiden var ImgCropper = Class.create();
ImgCropper.prototype = {
  //Containerobjekt, Kontrollebene, Bildadresse initialisieren: function(container, handle, url, options) {
    this._Container = $(container);//Containerobjektthis._layHandle = $(handle);//Steuerebenethis.Url = url;//Bildadressethis._layBase = this._Container.appendChild(document.createElement("img"));//Unterste Ebenethis._layCropper = this._Container.appendChild(document.createElement("img"));//Schneideebenethis._layCropper.onload = Bind(this, this.SetPos);
    //Wird zum Festlegen der Größe verwendet this._tempImg = document.createElement("img");
    this._tempImg.onload = Bind(this, this.SetSize);
    
    this.SetOptions(Optionen);
    
    Dies.Opacity = Math.round(diese.Optionen.Opacity);
    diese.Farbe = diese.Optionen.Farbe;
    dies.Scale = !!diese.Optionen.Scale;
    dies.Verhältnis = Math.max(diese.Optionen.Verhältnis, 0);
    diese.Breite = Math.round(diese.Optionen.Breite);
    diese.Höhe = Math.round(diese.Optionen.Höhe);
    
    //Vorschauobjekt festlegen var oPreview = $(this.options.Preview); //Vorschauobjekt if (oPreview) {
        oPreview.style.position = "relativ";
        oPreview.style.overflow = "versteckt";
        Dies.viewWidth = Math.round(diese.options.viewWidth);
        Dies.viewHeight = Math.round(dies.options.viewHeight);
        //Bildobjektvorschau this._view = oPreview.appendChild(document.createElement("img"));
        this._view.style.position = "absolut";
        this._view.onload = Bind(this, this.SetPreview);
    }
    //Drag & Drop einrichten this._drag = new Drag(this._layHandle, { Limit: true, onMove: Bind(this, this.SetPos), Transparent: true });
    //Zoom einstellen this.Resize = !!this.options.Resize;
    wenn(diese.Größe ändern){
        var op = diese.Optionen, _resize = neue Größe ändern(diese._layHandle, { Max: true, beiGröße ändern: Bind(diese, diese.SetPos) });
        //Setze das Zoom-Triggerobjekt op.RightDown && (_resize.Set(op.RightDown, "right-down"));
        op.LeftDown && (_resize.Set(op.LeftDown, "links unten"));
        op.RightUp && (_resize.Set(op.RightUp, "rechts oben"));
        op.LeftUp && (_resize.Set(op.LeftUp, "links oben"));
        op.Rechts && (_resize.Set(op.Rechts, "rechts"));
        op.Left && (_resize.Set(op.Left, "links"));
        op.Down && (_resize.Set(op.Down, "down"));
        op.Up && (_resize.Set(op.Up, "up"));
        //Minimale Bereichsgrenze this.Min = !!this.options.Min;
        this.minWidth = Math.round(this.options.minWidth);
        this.minHeight = Math.round(this.options.minHeight);
        //Skalierungsobjekt festlegen this._resize = _resize;
    }
    //Stil festlegen this._Container.style.position = "relative";
    this._Container.style.overflow = "versteckt";
    this._layHandle.style.zIndex = 200;
    this._layCropper.style.zIndex = 100;
    this._layBase.style.position = this._layCropper.style.position = "absolut";
    this._layBase.style.top = this._layBase.style.left = this._layCropper.style.top = this._layCropper.style.left = 0; //Ausrichtung //Initialisierungseinstellungen this.Init();
  },
  //Standardeigenschaften festlegen SetOptions: function(options) {
    this.options = {//Standardwert Opazität: 50, //Transparenz (0 bis 100)
        Color: "", //HintergrundfarbeWidth: 0, //BildhöheHeight: 0, //Bildhöhe//Skalierungsauslöser objectResize: false, //Ob die Skalierung festgelegt werden sollRight: "", //RechtsskalierungsobjektLeft: "", //LinksskalierungsobjektUp: "", //OberesskalierungsobjektDown: "", //UnteresskalierungsobjektRightDown: "", //UntenskalierungsobjektLeftDown: "", //UntenskalierungsobjektRightUp: "", //OberesskalierungsobjektLeftUp: "", //OberesskalierungsobjektMin: false, //Ob die Mindestbreite und -höhe festgelegt werden soll (der folgende Min-Parameter ist nützlich, wenn er auf true gesetzt ist)
        minWidth: 50, // Mindestbreite minHeight: 50, // Mindesthöhe Scale: false, // ob proportional skaliert werden soll Ratio: 0, // Skalierungsverhältnis (Breite/Höhe)
        //Objekteinstellungen in der Vorschau anzeigen Preview: "", //Objektvorschau anzeigen viewWidth: 0, //Breite der Vorschau anzeigen viewHeight: 0 //Höhe der Vorschau anzeigen };
    Erweitern(diese.Optionen, Optionen || {});
  },
  // Initialisiere das Objekt Init: function() {
    //Hintergrundfarbe festlegen this.Color && (this._Container.style.backgroundColor = this.Color);
    //Bild festlegen this._tempImg.src = this._layBase.src = this._layCropper.src = this.Url;
    //Transparent setzen if(isIE){
        this._layBase.style.filter = "Alpha(Deckkraft:" + this.Opacity + ")";
    } anders {
        dies._layBase.style.opacity = dies.Opacity / 100;
    }
    //Setzen Sie das Vorschauobjekt this._view && (this._view.src = this.Url);
    //Zoom einstellen if (this.Resize) {
        mit(this._resize){
            Maßstab = dieser.Maßstab; Verhältnis = dieses.Verhältnis; Min = dieses.Min; minBreite = diese.minBreite; minHöhe = diese.minHöhe;
        }
    }
  },
  //Schneidestil festlegen SetPos: function() {
    //IE6-Rendering-Fehler
    wenn (isIE6) { mit (this._layHandle.style) { zoom = .9; zoom = 1; }; };
    //Positionsparameter abrufen var p = this.GetPos();
    // Entsprechend den Parametern des Drag & Drop-Objekts ausschneiden this._layCropper.style.clip = "rect(" + p.Top + "px " + (p.Left + p.Width) + "px " + (p.Top + p.Height) + "px " + p.Left + "px)";
    //Vorschau festlegen this.SetPreview();
  },
  //Vorschaueffekt einstellen SetPreview: function() {
    wenn(diese._ansicht){
        //Anzeigebreite und -höhe in der Vorschau anzeigen var p = this.GetPos(), s = this.GetSize(p.Width, p.Height, this.viewWidth, this.viewHeight), scale = s.Height / p.Height;
        //Parameter proportional festlegen var pHeight = this._layBase.height * scale, pWidth = this._layBase.width * scale, pTop = p.Top * scale, pLeft = p.Left * scale;
        //Vorschauobjekt festlegen mit (this._view.style){
            //Stil festlegen Breite = pWidth + "px"; Höhe = pHeight + "px"; Oben = - pTop + "px"; Links = - pLeft + "px";
            //Vorschaubild ausschneiden clip = "rect(" + pTop + "px " + (pLeft + s.Width) + "px " + (pTop + s.Height) + "px " + pLeft + "px)";
        }
    }
  },
  //Bildgröße festlegen SetSize: function() {
    var s = this.GetSize(this._tempImg.width, this._tempImg.height, this.Width, this.Height);
    //Basiskarte und Schnittkarte festlegen this._layBase.style.width = this._layCropper.style.width = s.Width + "px";
    this._layBase.style.height = this._layCropper.style.height = s.Höhe + "px";
    //Drag & Drop-Bereich festlegen this._drag.mxRight = s.Width; this._drag.mxBottom = s.Height;
    //Zoombereich festlegen if (this.Resize) { this._resize.mxRight = s.Width; this._resize.mxBottom = s.Height; }
  },
  //Den aktuellen Stil abrufen GetPos: function() {
    mit(this._layHandle){
        return { Oben: offsetTop, Links: offsetLeft, Breite: offsetWidth, Höhe: offsetHeight }
    }
  },
  //Größe ermitteln GetSize: function(nowWidth, nowHeight, fixWidth, fixHeight) {
    var iWidth = jetztBreite, iHeight = jetztHöhe, Skala = iWidth / iHeight;
    //Entsprechend den Proportionen einstellen if (fixHeight) { iWidth = (iHeight = fixHeight) * scale; }
    wenn(fixWidth && (!fixHeight || iWidth > fixWidth)){ iHeight = (iWidth = fixWidth) / Skala; }
    //Gib die Größe des Objekts zurück return { Breite: iWidth, Höhe: iHeight }
  }
}

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • js zum Aufteilen und Hochladen großer Dateien

<<:  Detailliertes Tutorial zur Installation und Konfiguration von MySQL 5.7.20 unter Centos7

>>:  Zeichnen Sie den Verbindungsvorgang mit der lokalen virtuellen Linux-Maschine über SSH auf

Artikel empfehlen

Einführung in die SSL- und WSS-Schritte für die Nginx-Konfiguration

Inhaltsverzeichnis Vorwort 1. Nginx-Installation ...

Vue SPA-Lösung zur Optimierung des ersten Bildschirms

Inhaltsverzeichnis Vorwort Optimierung SSR Import...

Einfache Methode zur Installation von MySQL unter Linux

Bei der Onlinesuche nach Methoden zur Installatio...

So fügen Sie schnell 10 Millionen Datensätze in MySQL ein

Ich habe gehört, dass es eine Interviewfrage gibt...

Zusammenfassung einiger gängiger Konfigurationen und Techniken von Nginx

Vorwort Dieser Artikel listet mehrere gängige, pr...

Detaillierte Erklärung der grundlegenden Interaktion von Javascript

Inhaltsverzeichnis 1. So erhalten Sie Elemente Ho...

So wählen Sie zwischen MySQL CHAR und VARCHAR

Inhaltsverzeichnis VARCHAR- und CHAR-Typen Abschl...

Einführung in die Verwendung des offiziellen MySQL-Leistungstesttools mysqlslap

Inhaltsverzeichnis Einführung Anweisungen Tatsäch...

Teilen Sie 10 der neuesten Web-Frontend-Frameworks (Übersetzung)

In der Welt der Webentwicklung sind Frameworks wei...

Lösen Sie das Problem des Startfehlers von PHPStudy MySQL unter Windows

Einen Fehler melden Der Apache\Nginx-Dienst wurde...

Das ganz links stehende Übereinstimmungsprinzip des MySQL-Datenbankindex

Inhaltsverzeichnis 1. Gemeinsame Indexbeschreibun...