png buffer to canvas

This commit is contained in:
Taylor Hulsmans 2023-10-09 17:50:19 -04:00
parent 2c18efbba1
commit 04b5041954
4 changed files with 133 additions and 7 deletions

View file

@ -22,6 +22,45 @@ import { sha256 } from 'multiformats/hashes/sha2'
import { toString as stringFromUint8Array } from 'uint8arrays/to-string'
import {initLibp2p} from './kubo.js'
import { Readable } from 'stream';
import { PNG } from 'pngjs';
import streamToBuffer from 'stream-to-buffer';
import * as webStreamsNode from 'web-streams-node';
async function convertToPng(readableStream, outputPath) {
const png = new PNG();
// Create a reader for the ReadableStream
const reader = readableStream.getReader();
// Accumulate the chunks into a buffer
const chunks = [];
while (true) {
const { done, value } = await reader.read();
if (done) break;
chunks.push(value);
}
const buffer = Buffer.concat(chunks);
// Parse the buffer as a PNG image
png.parse(buffer, (error, data) => {
if (error) {
console.error('Error parsing PNG:', error);
return;
}
// Create a writable stream to save the PNG file
const writableStream = nodeFs.createWriteStream(outputPath);
// Pipe the PNG data to the writable stream
png.pack().pipe(writableStream);
writableStream.on('finish', () => {
console.log(`PNG file saved at ${outputPath}`);
});
});}
import {
getBlockFromAnyGateway,
@ -94,15 +133,18 @@ fastify.post('/gateway', getOptions, async (request, reply) => {
}
})
let buffer = ''
console.log(img.body)
const n = await convertToPng(img.body, 'image-0.png')
/*
for await (const chunk of img.body) {
buffer += decoder.decode(chunk, {
stream: true
})
}
reply.type('plain/text')
return buffer
*/
reply.type('img/png')
return nodeFs.readFileSync('./image-0.png')
return nodeFs.writeFile('image-0.png', buffer, (err) => {
console.log('err', err)
})

74
api/package-lock.json generated
View file

@ -29,7 +29,11 @@
"js-sha3": "^0.9.2",
"kubo-rpc-client": "^3.0.1",
"libp2p": "^0.46.11",
"multiformats": "^12.1.1"
"multiformats": "^12.1.1",
"pngjs": "^7.0.0",
"stream": "^0.0.2",
"stream-to-buffer": "^0.1.0",
"web-streams-node": "^0.4.0"
},
"devDependencies": {
"@babel/cli": "^7.22.15",
@ -3980,6 +3984,11 @@
"integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==",
"dev": true
},
"node_modules/emitter-component": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz",
"integrity": "sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ=="
},
"node_modules/encoding": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
@ -7495,6 +7504,14 @@
"resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
"integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
},
"node_modules/pngjs": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz",
"integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==",
"engines": {
"node": ">=14.19.0"
}
},
"node_modules/private-ip": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/private-ip/-/private-ip-3.0.1.tgz",
@ -7655,6 +7672,11 @@
"node": ">= 6"
}
},
"node_modules/readable-stream-node-to-web": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz",
"integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ=="
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -8093,6 +8115,33 @@
"node": ">= 10.x"
}
},
"node_modules/stream": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz",
"integrity": "sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g==",
"dependencies": {
"emitter-component": "^1.1.1"
}
},
"node_modules/stream-to": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz",
"integrity": "sha512-Kg1BSDTwgGiVMtTCJNlo7kk/xzL33ZuZveEBRt6rXw+f1WLK/8kmz2NVCT/Qnv0JkV85JOHcLhD82mnXsR3kPw==",
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/stream-to-buffer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz",
"integrity": "sha512-Da4WoKaZyu3nf+bIdIifh7IPkFjARBnBK+pYqn0EUJqksjV9afojjaCCHUemH30Jmu7T2qcKvlZm2ykN38uzaw==",
"dependencies": {
"stream-to": "~0.2.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/stream-to-it": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz",
@ -8533,6 +8582,29 @@
"resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
"integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
},
"node_modules/web-streams-node": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/web-streams-node/-/web-streams-node-0.4.0.tgz",
"integrity": "sha512-u+PBQs8DFaBrN/bxCLFn21tO/ZP7EM3qA4FGzppoUCcZ5CaMbKOsN8uOp27ylVEsfrxcR2tsF6gWHI5M8bN73w==",
"dependencies": {
"is-stream": "^1.1.0",
"readable-stream-node-to-web": "^1.0.1",
"web-streams-ponyfill": "^1.4.1"
}
},
"node_modules/web-streams-node/node_modules/is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/web-streams-ponyfill": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz",
"integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA=="
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",

View file

@ -38,6 +38,10 @@
"js-sha3": "^0.9.2",
"kubo-rpc-client": "^3.0.1",
"libp2p": "^0.46.11",
"multiformats": "^12.1.1"
"multiformats": "^12.1.1",
"pngjs": "^7.0.0",
"stream": "^0.0.2",
"stream-to-buffer": "^0.1.0",
"web-streams-node": "^0.4.0"
}
}

View file

@ -439,10 +439,18 @@ export default class ObsidianLilypad extends Plugin {
method: 'POST'
})
console.log('res', res)
function _arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return window.btoa( binary );
}
const cidNode = createNode(canvas, created,
{
text: `${res.text}`,
text: `<img src="data:image/png;base64,${_arrayBufferToBase64(res.arrayBuffer)}" />`,
size: { height: placeholderNoteHeight }
},
{