โดยปกติแล้วเมื่อเราต่อภาพ เรามักจะใช้ PS หรือเครื่องมือประมวลผลภาพอื่น ๆ เพื่อประมวลผลและสังเคราะห์ภาพเหล่านั้น คราวนี้จำเป็นต้องมีการต่อภาพ และผมหวังว่าเราจะสามารถใช้โค้ดในการต่อภาพได้โดยตรง ดังนั้นจึงมีเครื่องมือดังกล่าว ถุง.
ด้วยปลั๊กอินนี้ เราสามารถดำเนินการต่อไปนี้กับรูปภาพ:
รูปภาพสองรูปในแนวนอนดังนี้
n1.jpg
n2.jpg
const consoleInput = need('@jyeontu/img-concat'); const ImgConcatClass = ImgConcat ใหม่ (); const p1 = { ซ้าย:'.\img\n1.jpg', ขวา:'.\img\n2.jpg', เป้าหมาย:'.\longImg' - // ประกบสองภาพในแนวนอน ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
ยังคงเป็นภาพสองภาพด้านบน เราจะต่อภาพทั้งสองในแนวตั้งด้วย
const consoleInput = need('@jeontu/img-concat'); const ImgConcatClass = ImgConcat ใหม่ (); const p1 = { ซ้าย:'.\img\n1.jpg', ขวา:'.\img\n2.jpg', เป้าหมาย:'.\longImg' - //รวมสองภาพในแนวตั้ง ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
เรายังสามารถต่อภาพทั้งหมดในไดเร็กทอรีเป็นภาพขนาดยาวได้โดยตรง ดังที่แสดงด้านล่าง
const consoleInput = need('@jyeontu/img-concat'); const ImgConcatClass = ImgConcat ใหม่ (); const พี = { folderPath:'.\img', // ไดเรกทอรีทรัพยากร targetFolder:'.\longImg', // ทิศทางไดเรกทอรีการจัดเก็บภาพที่แปลงแล้ว: 'y' // ทิศทางประกบ, y คือแนวนอน, n คือแนวตั้ง} // เชื่อมต่อรูปภาพทั้งหมดในไดเร็กทอรี ImgConcatClass.concatAll(p).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); })
const consoleInput = need('@jyeontu/img-concat'); const ImgConcatClass = ImgConcat ใหม่ (); const พี = { folderPath:'.\img', // ไดเร็กทอรีทรัพยากร targetFolder:'.\longImg', // ทิศทางไดเร็กทอรีที่เก็บรูปภาพที่แปลงแล้ว:'n' // ทิศทางประกบ, y คือแนวนอน, n คือแนวตั้ง} // เชื่อมต่อรูปภาพทั้งหมดในไดเร็กทอรี ImgConcatClass.concatAll(p).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); })
เอง shape
เป็นอาร์เรย์สองมิติและกำหนดรูปภาพในแต่ละ
ตำแหน่ง -เชื่อมต่อ'); const ImgConcatClass = ImgConcat ใหม่ (); const พี = { รูปร่าง:[['.\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'] - เป้าหมาย:'.\longImg' - // รูปภาพการต่อเมทริกซ์แบบกำหนดเอง ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
และใช้ GraphicsMagick สำหรับการต่อภาพ
const gm = need('gm'); ยุบ (ซ้าย, ขวา, เป้าหมาย, ธง = จริง) { คืนสัญญาใหม่ ((r) => { gm(left).append(right,flag).write(target, err => { ถ้า (ผิดพลาด) console.log (ผิดพลาด); ร(); - - }ใช้ Sharp.js เพื่อรับข้อมูลรูปภาพ
ขนาด
gm = ต้องการ('gm'); const fs = ต้องการ('fs'); เส้นทาง const = ต้องการ ('เส้นทาง'); const ProgressBar = ต้องการ('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = ต้องการ('./util'); doConcatAll = async (เส้นทางโฟลเดอร์, targetFolder, ทิศทาง) => { ให้ fileList = fs.readdirSync(folderPath); fileList.sort((ก, ข) => { กลับ path.basename(a) - path.basename(b); - const extensionName = getFileSuffix(fileList[0], "."); ให้ targetFilePath = path.join(targetFolder, new Date().getTime() + '.' + extensionName); const barConfig = { ระยะเวลา: fileList.length - 1, ปัจจุบัน: 0, บล็อก:'█', showNumber: จริง, เคล็ดลับ:{ 0: 'กำลังประกบ...', 100:'การประกบเสร็จสมบูรณ์' - สี:'เขียว' - ให้progressBarC = newprogressBar(barConfig); const imgInfo = รอสิ่งนี้.getImgInfo(path.join(folderPath, fileList[0])); สำหรับ (ให้ดัชนี = 1; ดัชนี < fileList.length; ดัชนี ++) { ให้ leftFile = path.join(folderPath, fileList[index - 1]); ให้ rightFile = path.join(folderPath, fileList[index]); const leftPath = รอสิ่งนี้.resizeImage({ เส้นทาง: ไฟล์ซ้าย, ความกว้าง:imgInfo.width, ความสูง:imgInfo.height - const rightPath = รอสิ่งนี้.resizeImage({ เส้นทาง: ไฟล์ขวา, ความกว้าง:imgInfo.width, ความสูง:imgInfo.height - ProgressBarC.run(ดัชนี); รอสิ่งนี้.ยุบ(ดัชนี == 1 ? leftPath : targetFilePath,rightPath,targetFilePath,ทิศทาง); fs.unlinkSync(เส้นทางซ้าย); fs.unlinkSync(เส้นทางขวา); - console.log(''); กลับ targetFilePath; }
const gm = need('gm'); const fs = ต้องการ('fs'); เส้นทาง const = ต้องการ ('เส้นทาง'); const ProgressBar = ต้องการ('@jyeontu/progress-bar'); const {getFileSuffix,getMetadata,resizeImage} = ต้องการ('./util'); async conCatByMaxit (ความละเอียด) { const {รูปร่าง} = ความละเอียด; const tmpList = []; const barConfig = { ระยะเวลา: รูปร่าง[0].ความยาว * รูปร่าง.ความยาว, ปัจจุบัน: 0, บล็อก:'█', showNumber: จริง, เคล็ดลับ:{ 0: 'กำลังประกบ...', 100:'การประกบเสร็จสมบูรณ์' - สี:'เขียว' - constความคืบหน้าBarC =แถบความคืบหน้าใหม่(barConfig); ให้เป้าหมาย = ''; ให้ extensionName = getFileSuffix(shape[0][0], "."); const imgInfo = รอสิ่งนี้.getImgInfo(shape[0][0]); สำหรับ (ให้ i = 0; i < รูปร่างความยาว; i++){ เป้าหมาย = res.target + '\' + `targetImg${i}.${extensionName}`; สำหรับ (ให้ j = 1; j < รูปร่าง [i].length; j++){ const leftPath = รอสิ่งนี้.resizeImage({ เส้นทาง:รูปร่าง[i][j - 1], ความกว้าง:imgInfo.width, ความสูง:imgInfo.height - const rightPath = รอการปรับขนาดรูปภาพ ({ เส้นทาง:รูปร่าง[i][j], ความกว้าง:imgInfo.width, ความสูง:imgInfo.height - tmpList.push(เส้นทางซ้าย,เส้นทางขวา,เป้าหมาย); ความคืบหน้าBarC.run(รูปร่าง[i].ความยาว * i + j); รอสิ่งนี้.ยุบ(j == 1 ? leftPath : target,rightPath,target); - ถ้า(i>0){ รอสิ่งนี้.collapse(res.target + '\' + `targetImg${i - 1}.${extensionName}`,target,target,false); - - ความคืบหน้าBarC.run(รูปร่าง[0].ความยาว * รูปร่างความยาว); const newTarget = res.target + '\' + วันที่ใหม่().getTime() + `.${extensionName}`; fs.renameSync (เป้าหมาย newTarget) สำหรับ (ให้ i = 0; i < tmpList.length; i++){ พยายาม{ fs.unlinkSync(tmpList[i]); } จับ (ผิดพลาด) { // console.error(ผิดพลาด); - - console.log(''); กลับเป้าหมายใหม่; }
const consoleInput = need('@jyeontu/img-concat'); const ImgConcatClass = new ImgConcat();
ซ้าย เส้นทางรูปภาพ
เส้นทางรูปภาพ
ไดเร็กทอรีการบันทึกรูปภาพสังเคราะห์
const p1 = { ซ้าย:'.\img\n1.jpg', ขวา:'.\img\n2.jpg', เป้าหมาย:'.\longImg' - // ประกบสองภาพในแนวนอน ImgConcatClass.collapseHorizontal(p1).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
เส้นทางภาพซ้าย
เส้นทางภาพขวา
สังเคราะห์
const p1 = { ซ้าย:'.\img\n1.jpg', ขวา:'.\img\n2.jpg', เป้าหมาย:'.\longImg' - // ประกบสองภาพในแนวตั้ง ImgConcatClass.collapseVertical(p1).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
ไดเรกทอรีไฟล์ทรัพยากร
ผสานภาพ บันทึก
ทิศทางการรวมภาพ y คือแนวนอน n คือแนวตั้ง
const consoleInput = need('@jyeontu/img-concat'); const ImgConcatClass = ImgConcat ใหม่ (); const พี = { folderPath:'.\img', // ไดเรกทอรีทรัพยากร targetFolder:'.\longImg', // ทิศทางไดเรกทอรีการจัดเก็บภาพที่ผสาน: 'y' // ทิศทางประกบ, y คือแนวนอน, n คือแนวตั้ง} // เชื่อมต่อรูปภาพทั้งหมดในไดเร็กทอรี ImgConcatClass.concatAll(p).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); })
เมทริกซ์การรวมรูปภาพ ส่งผ่านเส้นทางรูปภาพในแต่ละตำแหน่ง
รูปภาพที่รวม
const p = { รูปร่าง:[['.\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'] - เป้าหมาย:'.\longImg' - // รูปภาพการต่อเมทริกซ์แบบกำหนดเอง ImgConcatClass.conCatByMaxit(p).then(res=>{ console.log(`การประกบเสร็จสมบูรณ์ เส้นทางรูปภาพคือ ${res}`); });
https://gitee.com/zheng_yongtao/node-scripting-tool/tree/master/src/imgConcat