Download packages/coding-agent/src/utils/image-convert.ts from SaylorTwift/pi: direct link, hf CLI and curl.
- Browser
- Download file 1.25 kB
-
https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/utils/image-convert.ts
- Command line
-
hf download hf://SaylorTwift/pi/packages/coding-agent/src/utils/image-convert.ts
-
curl -L -o image-convert.ts https://huggingface.co/SaylorTwift/pi/resolve/main/packages/coding-agent/src/utils/image-convert.ts
1.25 kB
| import { applyExifOrientation } from "./exif-orientation.ts"; | |
| import { loadPhoton } from "./photon.ts"; | |
| export async function convertImageBytesToPng(bytes: Uint8Array): Promise<Uint8Array | null> { | |
| const photon = await loadPhoton(); | |
| if (!photon) { | |
| // Photon not available, can't convert | |
| return null; | |
| } | |
| try { | |
| const rawImage = photon.PhotonImage.new_from_byteslice(bytes); | |
| const image = applyExifOrientation(photon, rawImage, bytes); | |
| if (image !== rawImage) rawImage.free(); | |
| try { | |
| return new Uint8Array(image.get_bytes()); | |
| } finally { | |
| image.free(); | |
| } | |
| } catch { | |
| // Conversion failed | |
| return null; | |
| } | |
| } | |
| /** | |
| * Convert image to PNG format for terminal display. | |
| * Kitty graphics protocol requires PNG format (f=100). | |
| */ | |
| export async function convertToPng( | |
| base64Data: string, | |
| mimeType: string, | |
| ): Promise<{ data: string; mimeType: string } | null> { | |
| // Already PNG, no conversion needed | |
| if (mimeType === "image/png") { | |
| return { data: base64Data, mimeType }; | |
| } | |
| const bytes = new Uint8Array(Buffer.from(base64Data, "base64")); | |
| const pngBytes = await convertImageBytesToPng(bytes); | |
| if (!pngBytes) { | |
| return null; | |
| } | |
| return { | |
| data: Buffer.from(pngBytes).toString("base64"), | |
| mimeType: "image/png", | |
| }; | |
| } | |