[feat] compressed data for local
This commit is contained in:
@@ -20,6 +20,23 @@ export const PngMetadata = {
|
|||||||
const encoded = encode(chunks);
|
const encoded = encode(chunks);
|
||||||
return encoded
|
return encoded
|
||||||
},
|
},
|
||||||
|
writeStream:(pngBuffer: Uint8Array, metadata: Record<string, string>): Buffer => {
|
||||||
|
let chunks:{
|
||||||
|
name:string
|
||||||
|
data:Uint8Array
|
||||||
|
}[] = extract(Buffer.from(pngBuffer));
|
||||||
|
|
||||||
|
chunks = chunks.filter((v) => {
|
||||||
|
return v.name.toLocaleLowerCase() !== 'text'
|
||||||
|
})
|
||||||
|
|
||||||
|
for (const key in metadata) {
|
||||||
|
const value = metadata[key];
|
||||||
|
chunks.splice(-1, 0, textKey.encode(key, value))
|
||||||
|
}
|
||||||
|
const encoded = encode(chunks);
|
||||||
|
return encoded
|
||||||
|
},
|
||||||
filter: (pngBuffer: Uint8Array) => {
|
filter: (pngBuffer: Uint8Array) => {
|
||||||
let chunks:{
|
let chunks:{
|
||||||
name:string
|
name:string
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
import { decode, encode } from "@msgpack/msgpack";
|
import { decode, encode } from "@msgpack/msgpack";
|
||||||
import { isEqual } from "lodash";
|
import { isEqual } from "lodash";
|
||||||
import pako from "pako";
|
import pako from "pako";
|
||||||
|
import { isTauri } from "./globalApi";
|
||||||
|
|
||||||
|
|
||||||
export function encodeRisuSave(data:any){
|
export function encodeRisuSave(data:any){
|
||||||
const risuSaveHeader = new Uint8Array(Buffer.from("\u0000\u0000RISU",'utf-8'))
|
const risuSaveHeader = new Uint8Array(Buffer.from("\u0000\u0000RISU",'utf-8'))
|
||||||
const encoded = encode(data)
|
const encoded = encode(data)
|
||||||
|
|
||||||
|
if(isTauri){
|
||||||
|
return pako.deflate(encoded)
|
||||||
|
}
|
||||||
const mergedArray = new Uint8Array(risuSaveHeader.length + encoded.length);
|
const mergedArray = new Uint8Array(risuSaveHeader.length + encoded.length);
|
||||||
mergedArray.set(risuSaveHeader);
|
mergedArray.set(risuSaveHeader);
|
||||||
mergedArray.set(encoded, risuSaveHeader.length);
|
mergedArray.set(encoded, risuSaveHeader.length);
|
||||||
@@ -22,7 +27,12 @@ export function decodeRisuSave(data:Uint8Array){
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
try {
|
try {
|
||||||
return JSON.parse(Buffer.from(pako.inflate(Buffer.from(data))).toString('utf-8'))
|
const buf = Buffer.from(pako.inflate(Buffer.from(data)))
|
||||||
|
try {
|
||||||
|
return JSON.parse(buf.toString('utf-8'))
|
||||||
|
} catch (error) {
|
||||||
|
return decode(buf)
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const realData = data.subarray(risuSaveHeader.length)
|
const realData = data.subarray(risuSaveHeader.length)
|
||||||
const dec = decode(realData)
|
const dec = decode(realData)
|
||||||
|
|||||||
Reference in New Issue
Block a user