xiongzhu 4 лет назад
Родитель
Сommit
bf4faaba0f
5 измененных файлов с 57 добавлено и 113 удалено
  1. 0 1
      gm.js
  2. 0 66
      imageUrl.js
  3. 47 44
      index.js
  4. 2 1
      package.json
  5. 8 1
      yarn.lock

+ 0 - 1
gm.js

@@ -1 +0,0 @@
-const gm = require("gm").subClass({ imageMagick: true });

+ 0 - 66
imageUrl.js

@@ -1,66 +0,0 @@
-/* eslint-disable no-unused-vars */
-const fs = require("fs");
-const Buffer = require("buffer");
-const path = require("path");
-
-const imgs = [];
-const { createCanvas, loadImage } = require("node-canvas");
-const imgCache = {};
-function draw(list, prepath) {
-    let canvas = createCanvas(1280, 1280);
-    let ctx = canvas.getContext("2d");
-
-    let name = list
-        .map((item) => {
-            let infos = item.replace(/.png/, "").split("_");
-            return infos[infos.length - 1];
-        })
-        .join("_");
-
-    let events = list.map((item) => {
-        return getImg(path.resolve(prepath, item), ctx);
-    });
-    return drawList(list, 0, ctx, prepath).then((res) => {
-        imgs.push(canvas);
-        return saveFile(canvas, name, imgs.length, prepath);
-    });
-}
-
-function drawList(list, index = 0, ctx, prepath) {
-    if (index < list.length) {
-        return getImg(path.resolve(prepath, list[index]), ctx).then(() => {
-            return drawList(list, index + 1, ctx, prepath);
-        });
-    } else {
-        return Promise.resolve();
-    }
-}
-
-function getImg(imgpath, ctx) {
-    return new Promise((resolve, reject) => {
-        console.log("loadimage::" + imgpath);
-        if (imgCache[imgpath]) {
-            ctx.drawImage(imgCache[imgpath], 0, 0);
-            resolve();
-        } else {
-            loadImage(imgpath)
-                .then((image) => {
-                    imgCache[imgpath] = image;
-                    ctx.drawImage(image, 0, 0);
-                    resolve();
-                })
-                .catch((e) => {
-                    console.log(e);
-                });
-        }
-    });
-}
-function saveFile(canvas, name, index, prepath) {
-    console.log("保存了");
-    let base = canvas.toDataURL();
-    base = base.replace(/data:image\/png;base64,/, "");
-    let buf = Buffer.Buffer.from(base, "base64");
-    return fs.writeFileSync(path.resolve(prepath, `images/${name}.png`), buf);
-}
-
-module.exports = { draw, saveFile };

+ 47 - 44
index.js

@@ -1,18 +1,17 @@
 const path = require("path");
 const fs = require("fs");
-const draw = require("./imageUrl").draw;
+const gm = require("gm").subClass({ imageMagick: true });
+const queue = require("queue");
+
+const q = queue({ results: [], concurrency: 16 });
 let main = {
     list: [],
-    fileList: [],
     imgsrc: "",
-    basePath: "/Users/drew/Downloads/未命名文件夹 2",
+    basePath: "/Users/drew/Downloads/未命名文件夹",
     total: 0,
     now: 0,
     max: 5000,
     type: 0,
-    test() {
-        console.log(this.list);
-    },
     backName(list) {
         return [...list].map((item) => {
             return item.name;
@@ -69,7 +68,7 @@ let main = {
             this.drawType1(_map);
         }
     },
-    async drawType2(_map) {
+    drawType2(_map) {
         const allkeys = [..._map.keys()].sort((a, b) => {
             return Number(a) - Number(b);
         });
@@ -79,8 +78,6 @@ let main = {
         let list2 = allkeys.map((item) => {
             return _map.get(item)[1];
         });
-        console.log(list1);
-        console.log(list2);
         let allList = new Array(this.max);
         list2.forEach((_list, index) => {
             _list.forEach((item) => {
@@ -103,18 +100,14 @@ let main = {
                 }
             });
         }
-        console.log(allList);
         this.total = allList.length;
         this.startDraw(allList);
     },
-    async drawType1(_map) {
-        console.log(_map);
+    drawType1(_map) {
         [..._map.keys()].forEach((_key) => {
             let _list = _map.get(_key);
-            console.log(_list);
             let _radios2 = [];
             let _radios = _list.map((item) => {
-                console.log(item);
                 let names = item.split("_");
                 let num = Number(names[2]);
                 if (num > 0) {
@@ -152,7 +145,6 @@ let main = {
             .map((_key) => {
                 return _map.get(_key);
             });
-        console.log(allList);
 
         let totalList = [];
 
@@ -169,35 +161,42 @@ let main = {
                 _list.push([..._vals.keys()][index]);
             });
             totalList.push(_list);
-            console.log(rs);
         }
-        console.log(totalList);
 
-        this.total = totalList.length;
-        this.splitList(totalList, 8).forEach((item) => {
-            this.startDraw(item);
-        });
+        this.startDraw(totalList);
     },
-    splitList(list, size) {
-        let arr = [];
-        for (let j = 0; j < size; j++) {
-            arr[j] = [];
-        }
-        console.log(arr);
-        for (let i = 0; i < list.length; i++) {
-            arr[i % size].push(list[i]);
-        }
-        return arr;
-    },
-    async startDraw(list, index = 0) {
-        //   draw(list[index], this.basePath).then(() => {
-        //     if (list.length - 1 > index) {
-        //       this.startDraw(list, index + 1);
-        //     }
-        //   });
-        for (let i = 0; i < list.length; i++) {
-            this.now = index + 1;
-            await draw(list[i], this.basePath);
+    startDraw(list) {
+        let c = 0;
+        for (let imgs of list) {
+            q.push((cb) => {
+                let t = new Date().getTime();
+                let name =
+                    imgs
+                        .map((item) => {
+                            let infos = item.replace(/.png/, "").split("_");
+                            return infos[infos.length - 1];
+                        })
+                        .join("_") + ".png";
+                let g = gm();
+                for (let img of imgs) {
+                    g = g.in(path.resolve(this.basePath, img));
+                }
+                g.mosaic().write(
+                    path.resolve(this.basePath, "images", name),
+                    function (err) {
+                        if (err) {
+                            console.log(err);
+                        }
+                        console.log(
+                            ++c +
+                                " done in " +
+                                (new Date().getTime() - t) +
+                                "ms"
+                        );
+                        cb();
+                    }
+                );
+            });
         }
     },
     getRandom(m = 1, n = 100) {
@@ -205,6 +204,10 @@ let main = {
     },
 };
 main.drawEnter();
-setInterval(() => {
-    console.log(1);
-}, 1000);
+let t = new Date().getTime();
+q.start(function (err) {
+    if (err) throw err;
+    console.log(
+        "all done in " + parseInt((new Date().getTime() - t) / 1000) + "s"
+    );
+});

+ 2 - 1
package.json

@@ -1,6 +1,7 @@
 {
   "dependencies": {
     "gm": "^1.23.1",
-    "node-canvas": "^2.7.0"
+    "node-canvas": "^2.7.0",
+    "queue": "^6.0.2"
   }
 }

+ 8 - 1
yarn.lock

@@ -204,7 +204,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@^2.0.3:
+inherits@2, inherits@^2.0.3, inherits@~2.0.3:
   version "2.0.4"
   resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
@@ -343,6 +343,13 @@ pseudomap@^1.0.2:
   resolved "https://registry.nlark.com/pseudomap/download/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
   integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
 
+queue@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.nlark.com/queue/download/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
+  integrity sha1-uRUlKD4jFcdVPS76GNg+dkMv7WU=
+  dependencies:
+    inherits "~2.0.3"
+
 readable-stream@^3.6.0:
   version "3.6.0"
   resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"