User:Habst/getKbr.js

// nodejs script to get kbr.de newspaper scans import { writeFile } from 'node:fs/promises' import { Readable } from 'node:stream' import sharp from 'sharp'; import fs from 'fs';

const prefix = 'https://viewerd.kbr.be/display/N/JB735/1925/03/04/01/zoomtiles/KB_JB735_1925-03-04_01-00004/'; const page = '3'; const imageWidth = 768; const imageHeight = 768; const gridCols = 7; // 6 + 1 const gridRows = 9; // 8 + 1

for (let col = 0; col < gridCols; col++) { for (let row = 0; row < gridRows; row++) { const fname = `${page}-${col}-${row}.jpg`; if (fs.existsSync(`data/${fname}`)) continue; const url = prefix + fname; console.log(url); const r = await fetch(url); const body = Readable.fromWeb(r.body); await writeFile(`data/${fname}`, body); } }

const finalWidth = gridCols * imageWidth; const finalHeight = gridRows * imageHeight;

function prepareImages { const images = []; for (let row = 0; row < gridRows; row++) { for (let col = 0; col < gridCols; col++) { const filename = `data/${page}-${col}-${row}.jpg`; images.push({       input: filename,        top: row * imageHeight,        left: col * imageWidth,      }); } }  console.group(images.length); return images; } sharp({ create: {    width: finalWidth,    height: finalHeight,    channels: 4, // RGBA    background: { r: 0, g: 0, b: 0, alpha: 0 },  } }) .composite(prepareImages) .toFile('result.jpg', (err, info) => { if (err) throw err;  console.log('Image saved:', info); });