כלי קטן בnode.js - המרת תיקיית תמונות לjson object

כלי קטן בnode.js - המרת תיקיית תמונות לjson object

כאשר רוצים לבצע שמוש בהרבה תמונות קטנות, נוצר "צואר בקבוק" בטעינת הקבצים הקטנים (הרבה בקשותHTTP). הדרך השכיחה לטפל בנושא היא שמוש בsprite - תמונה אחת גדולה שכל פעם מציגים חלק אחר ממנה. הבעיה היא התחזוקה.

אז הנה דרך חליפית - קובץ js שנועד להפעלה מתוך node, שהפך תיקיית תמונות לקובץ js אחר (כוללים אותו בפרויקט, ויש אוביקט בשם images שמכיל את כל התמונות בתיקייה לפי היררכיה).

קובץ הjs להפעלה:
קוד:
'use strict';

var testFolder = './';

function GetFolderDef(path) {
   var ans = {};
   var fs = require('fs'); //file system 
   var tempData = fs.readdirSync(path);
   var i = null;
   var props = null;
   var fileContent = null;
   var filenameParts = null;
   var fileType = "";
   var imageFileTypes = ["gif","png"];
   for ( i in tempData) {
       if (fs.statSync(path + tempData[i]).isDirectory()) {
           //props = GetFolderDef(path + tempData[i] + "/");
           //props.name = tempData[i];
           ans[tempData[i]] = GetFolderDef(path + tempData[i] + "/");
       } else {
           //props = {}; //base64 ... 
           //read the file
           filenameParts = tempData[i].split(".");
           fileType = filenameParts[filenameParts.length-1];
           
           if (0 <= imageFileTypes.indexOf(fileType) ) {
               fileContent = fs.readFileSync(path + tempData[i]); 
               props = fileContent.toString('base64');
               ans[tempData[i]] = "data:image/" + fileType + ";base64," + props;               
           }
       }
   }
   return ans;
}

function main() {
    var ans = JSON.stringify( GetFolderDef(testFolder ));
    var fs = require('fs'); //file system 
    fs.writeFile("images.js", "var images = " + ans, function(err) {
        if(err) {
            return console.log(err);
        }
        console.log("The file was saved!");
    }); 
}

main();
צורת הפעלת הקובץ (בהנחה שהוא שמור תחת השם convert_to_json.js) :
node convert_to_json.js
דוגמת קוד HTML שמדגימה את השמוש בו:
קוד:
<!doctype html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>
            Test image list
        </title>
        <script type='text/javascript' src='images.js'> </script>
        <script type='text/javascript' >
            //console.log (images);
            function Init() {
                var ul = GetData(images);
                //ul.style.display = 'inline-block';
                document.getElementById('body').appendChild(ul);
                
            }
            function GetData(obj) {
                var ul = null;
                var li = null;
                var i = null;
                ul = document.createElement('ul');
                for (i in obj) {
                    li = document.createElement('li');
                    li.innerHTML = i;
                    if ("object" == typeof(obj[i])) {
                        li.appendChild (GetData(obj[i]));
                    } else {
                        li.data = obj[i];
                        li.onclick = function() {
                            var dest = document.getElementById('imgDest');
                            dest.src = this.data;
                        }
                    }
                    ul.appendChild(li);
                }
                return ul;
            }
  &
 
מנסה שוב להוסיף את דוגמת קוד הHTML:

קוד:
<!doctype html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>
            Test image list
        </title>
        <script type='text/javascript' src='images.js'> </script>
        <script type='text/javascript' >
            //console.log (images);
            function Init() {
                var ul = GetData(images);
                //ul.style.display = 'inline-block';
                document.getElementById('body').appendChild(ul);
                
            }
            function GetData(obj) {
                var ul = null;
                var li = null;
                var i = null;
                ul = document.createElement('ul');
                for (i in obj) {
                    li = document.createElement('li');
                    li.innerHTML = i;
                    if ("object" == typeof(obj[i])) {
                        li.appendChild (GetData(obj[i]));
                    } else {
                        li.data = obj[i];
                        li.onclick = function() {
                            var dest = document.getElementById('imgDest');
                            dest.src = this.data;
                        }
                    }
                    ul.appendChild(li);
                }
                return ul;
            }
        </script>
    </head>
    <body id='body' onload='Init();'>
        <img id='imgDest' src='stam.bmp' alt='preview'>
    </body>
</html>
 

bnayal

New member
רעיון מגניב
! תודה

 
למעלה