dummyimagejs

Extremely simple image generator with customizable caching


Keywords
image, preview, generator
License
CC0-1.0
Install
npm install dummyimagejs@1.0.7

Documentation

DummyImageJS

Π­Ρ‚ΠΎ простой Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π³Π»ΡƒΠΏΡ‹Ρ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ c ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ просто ΠΊΠ°ΠΊ камСнь πŸͺ¨.

import { ImageManager } from "dummyimagejs";

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
// Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ создастся лишь ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹
const imageManager = new ImageManager();

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ само ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ссли Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
// Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
const image = imageManager.createImage();

// Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ создано ΠΈ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΎ
image.asBase64() // data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...

// ВСрнСтся Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
image.asBase64() // data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ

600 Γ— 400

А ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΈΠ· шапки

import { ImageManager } from "dummyimagejs";

const imageManager = new ImageManager();
const image = imageManager.createImage({
  width: 1012,
  height: 300,
  fontWieght: 700,
  color: "#000000",
  backgroundColor: "#f7e017",
  text: "πŸŽ‰  DummyImageJS  πŸŽ‰"
});

Установка πŸͺ„

npm -i dummyimagejs

ДокумСнтация πŸ“–

Image

interface ImageParams {
  width?: number;
  height?: number;
  text?: string;
  fontFace?: string;
  fontWieght?: FontWeight;
  color?: string;
  backgroundColor?: string;
}

class Image {
    constructor(params?: ImageParams)

Π‘Π°ΠΌ ΠΏΠΎ сСбС класс [Image] Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сгСнСрированного изобраТСния ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° asBase64() ΠΈΠ»ΠΈ asBlob(), ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ°Π»ΠΎ смысла, Ссли ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π°Ρ‚ΡŒ дСсяток инстансов [Image], поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ созданиС лишь ΠΎΠ΄Π½ΠΎΠ³ΠΎ инстанса [Image] с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· логичСских сообраТСний Image Ρ…Ρ€Π°Π½ΠΈΡ‚ лишь ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

image = new Image();

// Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ base64 ΠΈ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚
image.asBase64()

// Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ blob ΠΈ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚
image.asBlob()

// Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ blob ΠΈΠ· памяти,
// сгСнСрируСт base64 ΠΈ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚
image.asBase64()

Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹

key

public get key(): string

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

asBase64

public async asBase64(): Promise<string | undefined>

asBlob

public async asBlob(): Promise<string | undefined>

beforeDelete

public beforeDelete(): void

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

getKey

public static getKey(params?: ImageParams): string

ImageManager

class ImageManager extends Manager<Image>

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ экзСмпляров [Image], [ImageManager] β€” синглтон, это позволяСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ СдинствСнной ΠΊΠΎΠΏΠΈΠΈ изобраТСния Π² любом мСстС.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

createImage

interface ImageParams {
  width?: number;
  height?: number;
  text?: string;
  fontFace?: string;
  fontWieght?: FontWeight;
  color?: string;
  backgroundColor?: string;
}

createImage (params?: ImageParams): Image

deleteImage

deleteImage (key: string): boolean

deleteAll

deleteAll ():  void

Manager

abstract class Manager<T> extends Singleton implements Map<string, T>

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² создании своСго собствСнного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡƒΡΡΡŒ ΠΎΡ‚ класса [Manager] ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

РСализация собствСнного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°

import { Manager, Image } from "dummyimagejs";
import { ImageParams } from "dummyimagejs/types/Image";

interface TemporalyCachedImage {
  image: Image;
  timer: number;
}

export default class TemporalyCachedImageManager extends
  Manager<TemporalyCachedImage> {
  public createImage(params?: ImageParams): Image {
    const key = Image.getKey(params);
    let cached = this.get(key);

    if (!cached) {
      cached = {
        image: new Image(params),
        timer: setTimeout(() => {
          this.deleteImage(key);
        }, 10000)
      };

      this.set(key, cached);
    }

    return cached.image;
  }

  public deleteImage(key: string): boolean {
    const cached = this.get(key);

    if (cached) {
      cached.image?.beforeDelete();

      return this.delete(key);
    }

    return false;
  }

  public deleteAll(): void {
    this.forEach(({ image }) => image.beforeDelete());

    this.clear();
  }
}

Written with StackEdit.