Habituellement, lorsque nous assemblons des images, nous utilisons généralement PS ou d'autres outils de traitement d'image pour les traiter et les synthétiser. Cette fois, il y a un besoin d'épissage d'images, et j'espère que nous pourrons utiliser directement du code pour épisser, donc il existe un tel outil. Sac.
Grâce à ce plug-in, nous pouvons effectuer les opérations suivantes sur les images :
comme suit Nous avons ces deux images, et maintenant nous pouvons utiliser cet outil pour les fusionner en une seule.
n1.jpg
n2.jpg
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p1 = { à gauche : '.\img\n1.jpg', à droite : '.\img\n2.jpg', cible : '.\longImg' } // Épisser deux images horizontalement ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
correspond toujours aux deux images ci-dessus. Nous les épisserons verticalement avec
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p1 = { à gauche : '.\img\n1.jpg', à droite : '.\img\n2.jpg', cible : '.\longImg' } //Joignez deux images verticalement ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
Nous pouvons également assembler directement par lots toutes les images d'un répertoire en une longue image, comme indiqué ci-dessous. Nous voulons maintenant assembler toutes les images du répertoire :
3.1 Épissage horizontal duconst consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { FolderPath:'.\img', //Répertoire de ressources targetFolder:'.\longImg', //Direction du répertoire de stockage d'images converties :'y' //Direction d'épissage, y est horizontal, n est vertical} // Concatène toutes les images du répertoire ImgConcatClass.concatAll(p).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); })
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { foldPath:'.\img', //Répertoire de ressources targetFolder:'.\longImg', //Direction du répertoire de stockage d'images converties :'n' //Direction d'épissage, y est horizontal, n est vertical} // Concatène toutes les images du répertoire ImgConcatClass.concatAll(p).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); })
Nous pouvons également définir nous-mêmes la matrice d'épissage d'image. shape
est un tableau bidimensionnel et définit les images à chaque position :
const consoleInput = require('@jyeontu/img. -concat'); const ImgConcatClass = new ImgConcat(); const p = { forme :[['.\img\n1.jpg','.\img\white.jpg','.\img\n2.jpg'], ['.\img\white.jpg','.\img\n3.jpg','.\img\white.jpg'], ['.\img\n4.jpg','.\img\white.jpg','.\img\n5.jpg'] ], cible : '.\longImg' } ; //Image d'épissage matricielle personnalisée ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
et utilise GraphicsMagick pour l'épissage d'image
const gm = require('gm'); réduire (gauche, droite, cible, drapeau = vrai) { renvoyer une nouvelle promesse ((r) => { gm(gauche).append(droite,flag).write(target, err => { if(err) console.log(err); r(); }) }) }Utilisez Sharp.js pour obtenir des informations sur l'image
. gm = exiger('gm'); const fs = require('fs'); const chemin = require('chemin'); const progressBar = require('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = require('./util'); doConcatAll = async(folderPath,targetFolder,direction) => { laissez fileList = fs.readdirSync(folderPath); fileList.sort((a, b) => { return path.basename(a) - path.basename(b); }); const extensionName = getFileSuffix(fileList[0], "."); laissez targetFilePath = path.join(targetFolder, new Date().getTime() + '.' + extensionName); const barConfig = { durée : fileList.length - 1, courant: 0, bloc : '█', showNumber : vrai, conseil:{ 0 : 'Épissage...', 100 : « Épissage terminé » }, couleur: 'vert' } ; laissez progressBarC = new progressBar(barConfig); const imgInfo = wait this.getImgInfo(path.join(folderPath, fileList[0])); pour (soit index = 1; index < fileList.length; index++) { let leftFile = path.join(folderPath, fileList[index - 1]); let rightFile = path.join(folderPath, fileList[index]); const leftPath = attendre this.resizeImage({ chemin : fichier gauche, largeur:imgInfo.largeur, hauteur:imgInfo.hauteur }); const rightPath = attendre this.resizeImage({ chemin : fichier droit, largeur:imgInfo.largeur, hauteur:imgInfo.hauteur }); progressBarC.run(index); wait this.collapse(index == 1 ? leftPath : targetFilePath,rightPath,targetFilePath,direction); fs.unlinkSync(leftPath); fs.unlinkSync(rightPath); } console.log(''); retourner targetFilePath ; }
const gm = require('gm'); const fs = require('fs'); const chemin = require('chemin'); const progressBar = require('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = require('./util'); asynchrone conCatByMaxit(res){ const {forme} = res ; const tmpListe = []; const barConfig = { durée : forme[0].longueur * forme.longueur, courant: 0, bloc : '█', showNumber : vrai, conseil:{ 0 : 'Épissage...', 100 : « Épissage terminé » }, couleur: 'vert' } ; const progressBarC = new progressBar(barConfig); laissez cible = ''; let extensionName = getFileSuffix(shape[0][0], "."); const imgInfo = wait this.getImgInfo(shape[0][0]); pour(soit i = 0; i < shape.length; i++){ target = res.target + '\' + `targetImg${i}.${extensionName}` ; pour(soit j = 1; j < forme[i].longueur; j++){ const leftPath = attendre this.resizeImage({ chemin:forme[i][j - 1], largeur:imgInfo.largeur, hauteur:imgInfo.hauteur }); const rightPath = attendre resizeImage({ chemin:forme[i][j], largeur:imgInfo.largeur, hauteur:imgInfo.hauteur }); tmpList.push(leftPath,rightPath,target); progressBarC.run(shape[i].length * i + j); wait this.collapse(j == 1 ? leftPath : target,rightPath,target); } si(je>0){ wait this.collapse(res.target + '\' + `targetImg${i - 1}.${extensionName}`,target,target,false); } } progressBarC.run(shape[0].length * shape.length); const newTarget = res.target + '\' + new Date().getTime() + `.${extensionName}`; fs.renameSync (cible, nouvelle cible) pour(soit i = 0; i < tmpList.length; i++){ essayer{ fs.unlinkSync(tmpList[i]); }attraper(err){ // console.erreur(erreur); } } console.log(''); retourner newTarget ; }
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat();
chemin d'image
du chemin d'image
Répertoire de sauvegarde d'image synthétique
const p1 = { à gauche : '.\img\n1.jpg', à droite : '.\img\n2.jpg', cible : '.\longImg' } // Épisser deux images horizontalement ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
chemin d'image gauche
chemin d'image droit
de sauvegarde d'image synthétisé
const p1 = { à gauche : '.\img\n1.jpg', à droite : '.\img\n2.jpg', cible : '.\longImg' } // Épisser deux images verticalement ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
répertoire du fichier de ressources
du répertoire de sauvegarde des images fusionnées
direction de la fusion des images, y est horizontal, n est vertical
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { folderPath:'.\img', //Répertoire de ressources targetFolder:'.\longImg', //Direction du répertoire de stockage d'images fusionnées :'y' //Direction d'épissage, y est horizontal, n est vertical} // Concatène toutes les images du répertoire ImgConcatClass.concatAll(p).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); })
la matrice de fusion d'images, transmettez le chemin de l'image à chaque emplacement.
l'image fusionnée
const p = { forme :[['.\img\n1.jpg','.\img\white.jpg','.\img\n2.jpg'], ['.\img\white.jpg','.\img\n3.jpg','.\img\white.jpg'], ['.\img\n4.jpg','.\img\white.jpg','.\img\n5.jpg'] ], cible : '.\longImg' } ; //Image d'épissage matricielle personnalisée ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`Épissage terminé, le chemin de l'image est ${res}`); });
https://gitee.com/zheng_yongtao/node-scripting-tool/tree/master/src/imgConcat