mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
feat: add output format for download
This commit is contained in:
@@ -92,12 +92,16 @@
|
||||
}
|
||||
|
||||
async function download() {
|
||||
if (!result) return;
|
||||
const blob = await encode(result, "image/png");
|
||||
if (!result || !schema) return;
|
||||
const out = tool.output;
|
||||
const quality = out?.qualityParamId
|
||||
? Number(values[out.qualityParamId]) / 100
|
||||
: undefined;
|
||||
const blob = await encode(result, out?.mime ?? "image/png", quality);
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement("a");
|
||||
a.href = url;
|
||||
a.download = "with-border.png";
|
||||
a.download = `${tool.id}.${out?.ext ?? "png"}`;
|
||||
a.click();
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ const convertToJpg: ToolEntry<ConvertToJpgParams> = {
|
||||
category: "convert",
|
||||
schema: convertToJpgSchema,
|
||||
run: (img, p) => flattenOntoColor(img, p.background),
|
||||
output: { mime: "image/jpeg", ext: "jpg", qualityParamId: "quality" },
|
||||
};
|
||||
|
||||
interface ConvertToWebpParams {
|
||||
@@ -39,6 +40,22 @@ const convertToWebp: ToolEntry<ConvertToWebpParams> = {
|
||||
category: "convert",
|
||||
schema: convertToWebpSchema,
|
||||
run: (img) => clonePixelImage(img),
|
||||
output: { mime: "image/webp", ext: "webp", qualityParamId: "quality" },
|
||||
};
|
||||
|
||||
export const convertEntries = [convertToJpg, convertToWebp];
|
||||
interface ConvertToBmpParams {}
|
||||
|
||||
export const convertToBmpSchema = toolSchema<ConvertToBmpParams>({});
|
||||
|
||||
const convertToBmp: ToolEntry<ConvertToBmpParams> = {
|
||||
id: "png-to-bmp",
|
||||
title: "Convert PNG to BMP",
|
||||
description:
|
||||
"Saves the image as 24-bit BMP without an alpha channel: transparency is replaced with a black background.",
|
||||
category: "convert",
|
||||
schema: convertToBmpSchema,
|
||||
run: (img) => flattenOntoColor(img, "#000000"),
|
||||
output: { mime: "image/bmp", ext: "bmp" },
|
||||
};
|
||||
|
||||
export const convertEntries = [convertToJpg, convertToWebp, convertToBmp];
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
import type { CategoryId } from "../preview/categories";
|
||||
import type { ToolSchema } from "../registry-schema";
|
||||
import type { PixelImage } from "../core/types";
|
||||
import type { OutputMime } from "../core/io";
|
||||
|
||||
/** Формат скачивания, отличный от PNG (bmp/jpeg/webp). */
|
||||
export interface OutputFormat {
|
||||
mime: OutputMime;
|
||||
ext: string;
|
||||
qualityParamId?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инструмент нового registry: полностью типизирован на `Params`, схема —
|
||||
@@ -22,5 +30,7 @@ export type ToolEntry<P = Record<string, unknown>> = {
|
||||
runFromText?(text: string, params: P): Promise<PixelImage> | PixelImage;
|
||||
textToText?(text: string): Promise<string> | string;
|
||||
preview?(img: PixelImage, params: P): Promise<PixelImage> | PixelImage;
|
||||
/** Формат/качество скачивания результата; по умолчанию — PNG. */
|
||||
output?: OutputFormat;
|
||||
icon?: string;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user