如何将 SvelteKit 获取响应转换为缓冲区?
How to convert SvelteKit fetch response to a buffer?
我有一个简单的节点脚本来获取 tif 图像,使用 sharp 将图像转换为 jpeg 并生成数据:image/jpeg;浏览器的 base64 src。原因是在不支持tif/tiff图像的浏览器中启用tiff图像。
在节点中这很好用。
import sharp from "sharp";
import fetch from "node-fetch";
let link =
"https://people.math.sc.edu/Burkardt/data/tif/at3_1m4_01.tif";
// fetch tif image and save it as a buffer
async function fetchTifBuffer(link) {
const tifImg = await fetch(link);
const buffer = await tifImg.buffer();
return buffer;
}
// convert to png image save to buffer and save as base64
async function tifToPngToBase64(link) {
let inputImgBuffer = await fetchTifBuffer(link);
const buff = await sharp(inputImgBuffer).toFormat("jpeg").toBuffer();
let base64data = buff.toString("base64");
let imgsrc = "data:image/jpeg;base64," + base64data.toString("base64");
console.log(imgsrc);
// use in browser <img src="data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAY ...==" alt="image" />
}
tifToPngToBase64(link);
我想在 SvelteKit 中实现它。但我不知道如何从 SvelteKit 获取响应中获取缓冲区。有什么想法吗?
好的,所以我自己弄明白了。 SvelteKit 获取响应有一个 arrayBuffer,所以只需要将 arraybuffer 转换为缓冲区。
这是相关的 SvelteKit 端点:
// img.js
import sharp from "sharp";
export const get = async () => {
const res = await fetch(
"https://people.math.sc.edu/Burkardt/data/tif/at3_1m4_01.tif"
);
const abuffer = await res.arrayBuffer();
const buffer = Buffer.from(new Uint8Array(abuffer));
const buff = await sharp(buffer).toFormat("jpeg").toBuffer();
let base64data = buff.toString("base64");
let src = `data:image/jpeg;base64,${base64data.toString("base64")}`;
let img = `<img style='display:block; width:100px;height:100px;' id='base64image'
src='${src}' />`;
return {
body: {
img,
},
};
};
这是使用端点的 SvelteKit 组件:
// img.svelte
<script>
export let img;
</script>
{@html img}
我有一个简单的节点脚本来获取 tif 图像,使用 sharp 将图像转换为 jpeg 并生成数据:image/jpeg;浏览器的 base64 src。原因是在不支持tif/tiff图像的浏览器中启用tiff图像。
在节点中这很好用。
import sharp from "sharp";
import fetch from "node-fetch";
let link =
"https://people.math.sc.edu/Burkardt/data/tif/at3_1m4_01.tif";
// fetch tif image and save it as a buffer
async function fetchTifBuffer(link) {
const tifImg = await fetch(link);
const buffer = await tifImg.buffer();
return buffer;
}
// convert to png image save to buffer and save as base64
async function tifToPngToBase64(link) {
let inputImgBuffer = await fetchTifBuffer(link);
const buff = await sharp(inputImgBuffer).toFormat("jpeg").toBuffer();
let base64data = buff.toString("base64");
let imgsrc = "data:image/jpeg;base64," + base64data.toString("base64");
console.log(imgsrc);
// use in browser <img src="data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAY ...==" alt="image" />
}
tifToPngToBase64(link);
我想在 SvelteKit 中实现它。但我不知道如何从 SvelteKit 获取响应中获取缓冲区。有什么想法吗?
好的,所以我自己弄明白了。 SvelteKit 获取响应有一个 arrayBuffer,所以只需要将 arraybuffer 转换为缓冲区。
这是相关的 SvelteKit 端点:
// img.js
import sharp from "sharp";
export const get = async () => {
const res = await fetch(
"https://people.math.sc.edu/Burkardt/data/tif/at3_1m4_01.tif"
);
const abuffer = await res.arrayBuffer();
const buffer = Buffer.from(new Uint8Array(abuffer));
const buff = await sharp(buffer).toFormat("jpeg").toBuffer();
let base64data = buff.toString("base64");
let src = `data:image/jpeg;base64,${base64data.toString("base64")}`;
let img = `<img style='display:block; width:100px;height:100px;' id='base64image'
src='${src}' />`;
return {
body: {
img,
},
};
};
这是使用端点的 SvelteKit 组件:
// img.svelte
<script>
export let img;
</script>
{@html img}