www.xbdev.net
xbdev - software development
Friday May 1, 2026
Home | Contact | Support | JavaScript... so much power in such a few lines of code..
     
 

JavaScript...

so much power in such a few lines of code..

 



Download All The Images From A Website Using Javascript (NOT One At A Time - Single Big File)



Download All The Images From A Website Using Javascript (All NOT One At A Time)
Download All The Images From A Website Using Javascript (All NOT One At A Time)


This is short script that you can run on any page so you can download all images and/or additional information. Instead of trying to download images one at a time and save them (you can have a script popup and show you a download dialog - but you want all the images put together).

You want a single download with everything! How to do this? Just put all the images in a JSON file - download the JSON file then you can do what you want! Store the images in the JSON file as URL encoded strings.

In fact, you might think the file size is crazy large - but it isn't that bad!


For this example, I was grabbing all the 'h4' elements and getting the information aournd that element.

<?php
let hh = document.getElementsByTagName('h4');

let jsondata = [];

for (let g=0; g<hh.length; g++)
{
    console.log('g:', g );
    let tit    = hh[g].innerHTML;
    let p      = hh[g].parentElement.children[1].innerHTML;
    let imgurl = hh[g].parentElement.parentElement.children[0].children[0].src;
    let img    = hh[g].parentElement.parentElement.children[0].children[0];
    
    // If we want to reload/check the img url
    //const imgurl = imgurls[i];
    //const img = document.createElement("img");
    //img.crossOrigin="anonymous"
    //img.src = imgurl;
    //await img.decode(); // wait for it to finish loading

    console.log('img.naturalHeight:', img.naturalHeight );
    
    let canvas = document.createElement('canvas');
    let context = canvas.getContext('2d');
    canvas.height = img.naturalHeight;
    canvas.width  = img.naturalWidth;
    context.drawImage(img, 0, 0);
    let imgdata = canvas.toDataURL("image/jpeg", 1.0); // alt jpeg or png

    // we could use the original name
    //let imgfilename = imgurl.split('/').pop();
    
    let imgfilename = `img${g}.jpg`; // imgurl.split('/').pop();

    console.log('processed image:',  imgfilename);   

   // You're generating a data uri, which has schema, mime-type etc before the actual base64 data data:[<MIME-type>][;charset=<encoding>][;base64],<data>. You'll have to remove all the content before the data then use it.

   ii = { 'imgdata': imgdata,
          'title':   tit, 
          'desc':    p };
   
   jsondata.push( ii );
}


let jsonfile = JSON.stringify(jsondata);

console.log('creating single jsonfile..');

console.log('adding link element');
var a = document.createElement("a");
document.body.appendChild( a );
a.id              = 'downloadlink';
a.style.position  = 'absolute';
a.style.bottom    = '100px';
a.style.left      = '100px';
a.style.fontSize  = '100pt';
a.innerHTML = 'Click to Download';
 
console.log('building blob');
var file             = new Blob([ jsonfile ], {type: 'text/plain'});
a.href               = URL.createObjectURL( file );
a.download           = 'images.json';
a.style['font-size'] = '20pt';

a.click();

console.log('finished');



Processing the Download JSON Data


After you've downloaded the JSON file - you can either process it and convert it to a zip or load it and put the content on a website.

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js';
document.head.appendChild(script); 

let tt = '';

(async()=>{

let b = document.createElement('button');
b.innerHTML = 'load json';
document.body.appendChild( b );
b.onclick = ()=>{
  let input = document.createElement('input');
  input.type = 'file';
  input.onchange = _ => {
      // you can use this method to get file and perform respective operations
      let files =   Array.from(input.files);
      console.log(files);

      // get the first file (file[0]
      let file = files[0];
      var reader = new FileReader();
      reader.readAsText(file, "UTF-8");
      reader.onload = async function (evt) {
         console.log('loaded');
         let div = document.createElement('div');
         document.body.appendChild( div );
         div.innerHTML = 'filesize:' + evt.target.result.length;

         let json = JSON.parse( evt.target.result );
         console.log('num data:', json.length );

         let myzip = new JSZip();

         for (let k=0; k<json.length; k++)
         {
            let title = json[k].title;
            let desc  = json[k].desc;
            let imgbase64 = json[k].imgdata;
            // console.log( json[k].title );
            let imgfilename = `thumb${k}.jpg`

            myzip.file(imgfilename, imgbase64 .substr(imgbase64 .indexOf(',')+1), {base64: true});
            myzip.file(`h${k}.txt`, title);
            myzip.file(`d${k}.txt`, desc);

            tt += `# ${title}\n\n`;
            tt += `${desc}\n`;
            tt += `<img src='./thumb${k}.jpg>\n`;
         }

         myzip.file(`summary.txt`, tt);


         console.log('creating zip..');
         let content = await myzip.generateAsync({type: "blob"});
         
         console.log('adding link element');
         var a = document.createElement("a");
         document.body.appendChild( a );
         a.id = 'downloadlink';
         a.style.position = 'absolute';
         a.style.top= '20px';
         a.style.left  = '20px';
         a.style.fontSize  = '20pt';
         a.innerHTML = 'Click to Download';
 
         console.log('building blob');
         var file = new Blob([ content ], {type: 'octet/stream'});
         a.href = URL.createObjectURL( file );
         a.download = 'images.zip';
         a.style['font-size'] = '20pt';
         
         a.click();
         
         console.log('finished');
      }
      reader.onerror = function (evt) {
         let div = document.createElement('div');
         document.body.appendChild( div );
         div .innerHTML = "error reading file";
      }
  };
  input.click();
}
})()







































101 WebGPU Programming Projects. WebGPU Development Pixels - coding fragment shaders from post processing to ray tracing! WebGPU by Example: Fractals, Image Effects, Ray-Tracing, Procedural Geometry, 2D/3D, Particles, Simulations WebGPU Games WGSL 2d 3d interactive web-based fun learning WebGPU Compute WebGPU API - Owners WebGPU Development Cookbook - coding recipes for all your webgpu needs! WebGPU & WGSL Essentials: A Hands-On Approach to Interactive Graphics, Games, 2D Interfaces, 3D Meshes, Animation, Security and Production Kenwright graphics and animations using the webgpu api 12 week course kenwright learn webgpu api kenwright programming compute and graphics applications with html5 and webgpu api kenwright real-time 3d graphics with webgpu kenwright webgpu for dummies kenwright webgpu wgsl compute graphics all in one kenwright webgpu api develompent a quick start guide kenwright webgpu by example 2022 kenwright webgpu gems kenwright webgpu interactive compute and graphics visualization cookbook kenwright wgsl webgpu shading language cookbook kenwright WebGPU Shader Language Development: Vertex, Fragment, Compute Shaders for Programmers Kenwright WGSL Fundamentals book kenwright WebGPU Data Visualization Cookbook kenwright Special Effects Programming with WebGPU kenwright WebGPU Programming Guide: Interactive Graphics and Compute Programming with WebGPU & WGSL kenwright Ray-Tracing with WebGPU kenwright



 
Advert (Support Website)

 
 Visitor:
Copyright (c) 2002-2026 xbdev.net - All rights reserved.
Designated articles, tutorials and software are the property of their respective owners.