Normalmente, quando emendamos imagens, geralmente usamos PS ou outras ferramentas de processamento de imagem para processá-las e sintetizá-las. Desta vez, há necessidade de emendar imagens, e espero que possamos usar código diretamente para emendar, para que exista essa ferramenta. Bolsa.
Através deste plug-in, podemos realizar as seguintes operações nas imagens:
como segue. Temos essas duas imagens e agora podemos usar esta ferramenta para uni-las em uma.
n1.jpg
n2.jpg
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p1 = { esquerda:'.\img\n1.jpg', direita:'.\img\n2.jpg', alvo:'.\longImg' } // Une duas imagens horizontalmente ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
ainda é a das duas imagens acima. Vamos emendá-las verticalmente com
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p1 = { esquerda:'.\img\n1.jpg', direita:'.\img\n2.jpg', alvo:'.\longImg' } //Junte duas imagens verticalmente ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
Também podemos unir em lote diretamente todas as imagens em um diretório em uma imagem longa, conforme mostrado abaixo.
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { folderPath:'.\img', //Diretório de recursos targetFolder:'.\longImg', //Direção do diretório de armazenamento de imagem convertida:'y' //Direção de emenda, y é horizontal, n é vertical} // Concatena todas as imagens no diretório ImgConcatClass.concatAll(p).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); })
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { folderPath:'.\img', //Diretório de recursos targetFolder:'.\longImg', //Direção do diretório de armazenamento de imagem convertida:'n' //Direção de emenda, y é horizontal, n é vertical} // Concatena todas as imagens no diretório ImgConcatClass.concatAll(p).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); })
Também podemos definir a matriz de emenda da imagem. shape
é uma matriz bidimensional e define as imagens em cada posição. Os detalhes são os seguintes:
const consoleInput = require('@jyeontu/img. -concat'); const ImgConcatClass = new ImgConcat(); const p = { forma:[['.\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'] ], alvo:'.\longImg' }; //Imagem de emenda de matriz personalizada ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
e usa GraphicsMagick para emenda de imagem
const gm = require('gm'); recolher (esquerda, direita, alvo, bandeira = verdadeiro) { retornar nova promessa((r) => { gm(esquerda).append(direita,flag).write(target, err => { se(erro) console.log(erro); r(); }) }) }Use sharp.js para obter informações da imagem
. gm = requer('gm'); const fs = requer('fs'); const caminho = require('caminho'); const progressBar = require('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = require('./util'); doConcatAll = async(folderPath,targetFolder,direction) => { deixe fileList = fs.readdirSync(folderPath); lista de arquivos.sort((a, b) => { retornar caminho.basename(a) - caminho.basename(b); }); const extensionName = getFileSuffix(fileList[0], "."); deixe targetFilePath = path.join(targetFolder, new Date().getTime() + '.' + extensionName); const barConfig = { duração: fileList.length - 1, atual: 0, bloco:'█', showNumber: verdadeiro, dica:{ 0: 'Emenda...', 100:'Emenda concluída' }, cor: 'verde' }; deixe progressBarC = new progressBar(barConfig); const imgInfo = aguarde this.getImgInfo(path.join(folderPath, fileList[0])); for (deixe índice = 1; índice <fileList.length; índice++) { deixe leftFile = path.join(folderPath, fileList[index - 1]); deixe rightFile = path.join(folderPath, fileList[index]); const leftPath = aguarde this.resizeImage({ caminho: arquivo esquerdo, largura:imgInfo.largura, altura:imgInfo.height }); const rightPath = aguarde this.resizeImage({ caminho: arquivo direito, largura:imgInfo.largura, altura:imgInfo.height }); progressBarC.run(índice); aguarde this.collapse (index == 1? leftPath: targetFilePath, rightPath, targetFilePath, direção); fs.unlinkSync(leftPath); fs.unlinkSync(rightPath); } console.log(''); retornar targetFilePath; }
const gm = require('gm'); const fs = requer('fs'); const caminho = require('caminho'); const progressBar = require('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = require('./util'); assíncrono conCatByMaxit(res){ const {forma} = res; const listatmp = []; const barConfig = { duração: forma[0].comprimento * forma.comprimento, atual: 0, bloco:'█', showNumber: verdadeiro, dica:{ 0: 'Emenda...', 100:'Emenda concluída' }, cor: 'verde' }; const progressBarC = new progressBar(barConfig); deixe alvo = ''; deixe extensionName = getFileSuffix(shape[0][0], "."); const imgInfo = aguarde this.getImgInfo(shape[0][0]); for(seja i = 0; i < forma.comprimento; i++){ alvo = res.target + '\' + `targetImg${i}.${extensionName}`; for(seja j = 1; j < forma[i].comprimento; j++){ const leftPath = aguarde this.resizeImage({ caminho:forma[i][j - 1], largura:imgInfo.largura, altura:imgInfo.height }); const rightPath = aguarda resizeImage({ caminho:forma[i][j], largura:imgInfo.largura, altura:imgInfo.height }); tmpList.push(leftPath,rightPath,target); progressBarC.run(forma[i].comprimento * i + j); aguarde this.collapse(j == 1 ? leftPath : target,rightPath,target); } se(eu>0){ aguarde this.collapse(res.target + '\' + `targetImg${i - 1}.${extensionName}`,target,target,false); } } progressBarC.run(forma[0].comprimento * forma.comprimento); const newTarget = res.target + '\' + new Date().getTime() + `.${extensionName}`; fs.renameSync(destino,novodestino) for(deixe i = 0; i < tmpList.length; i++){ tentar{ fs.unlinkSync(tmpList[i]); }pegar(errar){ //console.error(err); } } console.log(''); retornar novoTarget; }
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat();
caminho da imagem
direita caminho da imagem
Diretório de salvamento de imagem sintética
const p1 = { esquerda:'.\img\n1.jpg', direita:'.\img\n2.jpg', alvo:'.\longImg' } // Une duas imagens horizontalmente ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
esquerda caminho da imagem
direita caminho da imagem
imagem sintetizada salvando
const p1 = { esquerda:'.\img\n1.jpg', direita:'.\img\n2.jpg', alvo:'.\longImg' } // Unir duas imagens verticalmente ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
diretório de arquivo de recurso
imagem mesclada salvando
direção de fusão de imagem, y é horizontal, n é vertical
const consoleInput = require('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat(); const p = { folderPath:'.\img', //Diretório de recursos targetFolder:'.\longImg', //A direção do diretório de armazenamento de imagem mesclada:'y' //Direção de emenda, y é horizontal, n é vertical} // Concatena todas as imagens no diretório ImgConcatClass.concatAll(p).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); })
matriz de mesclagem de imagem, passe o caminho da imagem em cada local.
imagem mesclada
const p = { forma:[['.\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'] ], alvo:'.\longImg' }; //Imagem de emenda de matriz personalizada ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`Splicing concluído, caminho da imagem é ${res}`); });
https://gitee.com/zheng_yongtao/node-scripting-tool/tree/master/src/imgConcat