Z ZPI 文档 v0.3.8
介绍页

源码

packages/desktop/src/renderer/markdown-image.ts

typescript26 行查看原文
import type { FileLocation } from "@zpi-dev/ui/links";
import { unwrap } from "./unwrap.ts";

export async function readMarkdownImage(
  sessionId: string,
  path: string,
  location?: FileLocation,
): Promise<string> {
  const preview = unwrap(await window.zpi.readFilePreview(sessionId, path, location));
  if (preview.kind === "text" && /\.svg$/i.test(preview.path) && preview.truncated)
    throw new Error("SVG 超过预览大小限制,无法显示完整图片");
  const blob =
    preview.kind === "text" && /\.svg$/i.test(preview.path)
      ? new Blob([preview.text], { type: "image/svg+xml" })
      : preview.kind === "image"
        ? new Blob([new Uint8Array(preview.bytes)], { type: preview.mime })
        : undefined;
  if (!blob) throw new Error("文件不是图片");
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(String(reader.result));
    reader.onerror = () => reject(reader.error);
    reader.readAsDataURL(blob);
  });
}