npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dear-image

v1.4.0

Published

A class that represents a graphical image.

Downloads

266

Readme

DearImage

A class that represents a graphical image.

setup

npm

npm i dear-image

Install optionally to support Node.

npm i canvas

ES module

import DearImage from 'dear-image';

Node

let DearImage = require('dear-image');

browser

<script src="https://unpkg.com/dear-image"></script>

The module is globally available as DearImage.

members

static methods

.isDearImage(value)

Determines whether the passed value is an instance of DearImage.

| argument | description | | ---: | :--- | | value | The value to be checked. |

Returns true if the passed value is an instance of DearImage, false otherwise.


.from(value)

Creates a DearImage instance from the given value.

| argument | description | | ---: | :--- | | value | The value to create from. Supported value types are ImageData, HTMLCanvasElement, OffscreenCanvas, HTMLImageElement and DearImage. |

Returns the created DearImage instance.

let element = document.getElementById('my-image');
let image = DearImage.from(element);
document.body.appendChild(image.toHTMLCanvasElement());

.fromExcept(value)

Creates a DearImage instance from the given value if it's not one.

| argument | description | | ---: | :--- | | value | The value to create from. |

Returns the same or created DearImage instance.

let element = document.getElementById('my-image');
let image = DearImage.fromExcept(element);
let otherImage = DearImage.fromExcept(image);
console.log(otherImage === image); // => true

.loadFrom(value)

Asynchronously loads a DearImage instance from the given value.

| argument | description | | ---: | :--- | | value | The value to load from. Supported value types are String, URL, Buffer, Blob, HTMLImageElement and everything the function .from supports. |

Returns a promise that resolves to the created DearImage instance.

let url = '/path/to/image.jpg';
let image = await DearImage.loadFrom(url);
document.body.appendChild(image.toHTMLCanvasElement());

.loadFromExcept(value)

Asynchronously loads a DearImage instance from the given value if it's not one.

| argument | description | | ---: | :--- | | value | The value to load from. |

Returns a promise that resolves to the same or created DearImage instance.

let url = '/path/to/image.jpg';
let image = await DearImage.loadFrom(url);
let otherImage = await DearImage.loadFromExcept(image);
console.log(otherImage === image); // => true

.blank(sizeX = 0, sizeY = 0)

Creates a DearImage instance without content.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the image. | | sizeY | A number as the height of the image. |

Returns the created DearImage instance.


.solid(fill = 'rgba(0,0,0,0)', sizeX = 0, sizeY = 0)

Creates a DearImage instance with filled content.

| argument | description | | ---: | :--- | | fill | A string as the fill color. | | sizeX | A number as the width of the image. | | sizeY | A number as the height of the image. |

Returns the created DearImage instance.


.loadFontFace(fontFace = {
  family: 'sans-serif',
  style: 'normal',
  variant: 'normal',
  weight: 'normal',
}, source)

Loads a font face.

| argument | description | | ---: | :--- | | fontFace | Either a string as the font family or an object with the font face options. | | fontFace.family | A string as the font family. | | fontFace.style | A string as the font style. | | fontFace.variant | A string as the font variant. | | fontFace.weight | A number or a string as the font weight. | | source | A string as the source path to load from. |

Returns a promise.


.measureText(text, font = {
  family: 'sans-serif',
  size: 10,
  style: 'normal',
  variant: 'normal',
  weight: 'normal',
})

Creates a TextMetrics instance representing the dimensions of the drawn text.

| argument | description | | ---: | :--- | | text | A string as the text. | | font.family | A string as the font family. | | font.size | A number as the font size. | | font.style | A string as the font style. | | font.variant | A string as the font variant. | | font.weight | A number or a string as the font weight. |

Returns the created TextMetrics instance.


.text(text, options = {
  fill: '#000',
  font: {
    family: 'sans-serif',
    size: 10,
    style: 'normal',
    variant: 'normal',
    weight: 'normal',
  },
  padding: 0.28,
})

Creates a DearImage instance with the drawn text.

| argument | description | | ---: | :--- | | text | A string as the text. | | options.fill | A string as the fill color. | | options.font.family | A string as the font family. | | options.font.size | A string as the font size. | | options.font.style | A string as the font style. | | options.font.variant | A string as the font variant. | | options.font.weight | A number or a string as the font weight. | | options.padding | A number as the space around the text. The value is relative to the font size. |

Returns the created DearImage instance.

let fontFace = {family: 'Inconsolata'};
await DearImage.loadFontFace(fontFace, './fonts/Inconsolata.ttf');
let font = {...fontFace, size: 32};
let image = DearImage.text('Hello World', {font});

properties

.sizeX

The size of the image along the x-axis.

let image = DearImage.blank(300, 150);
console.log(image.sizeX); // => 300

.sizeY

The size of the image along the y-axis.

let image = DearImage.blank(300, 150);
console.log(image.sizeY); // => 150

methods

.resize(sizeX = this.sizeX, sizeY = this.sizeY)

Changes the size of the image.

| argument | description | | ---: | :--- | | sizeX | A number as the new width of the image. | | sizeY | A number as the new height of the image. |

Returns the created DearImage instance.


.resizeX(size = this.sizeY, proportionally = false)

Changes the width of the image.

| argument | description | | ---: | :--- | | size | A number as the new width of the image. | | proportionally | If true, the aspect ratio of the image is preserved. |

Returns the created DearImage instance.


.resizeY(size = this.sizeX, proportionally = false)

Changes the height of the image.

| argument | description | | ---: | :--- | | size | A number as the new height of the image. | | proportionally | If true, the aspect ratio of the image is preserved. |

Returns the created DearImage instance.


.crop(startX = 0, startY = 0, sizeX = this.sizeX, sizeY = this.sizeY)

Selects an area from the image.

| argument | description | | ---: | :--- | | startX | A number as the horizontal offset of the area. A positive value indicates the offset from the left of the image. A negative value indicates the offset from the right of the image. | | startY | A number as the vertical offset of the area. A positive value indicates the offset from the top of the image. A negative value indicates the offset from the bottom of the image. | | sizeX | A number as the width of the area. A positive value selects an area from left to right. A negative value selects an area from right to left. | | sizeY | A number as the height of the area. A positive value selects an area from top to bottom. A negative value selects an area from bottom to top. |

Returns the created DearImage instance.


.reframe(sizeX = this.sizeX, sizeY = this.sizeY, alignmentX = 'center', alignmentY = 'center')

Aligns the image inside an area.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. | | alignmentX | A string as the horizontal alignment of the image. Possible values are 'start', 'center' and 'end'. | | alignmentY | A string as the vertical alignment of the image. Possible values are 'start', 'center' and 'end'. |

Returns the created DearImage instance.

.rescale(scalingX = 1, scalingY = 1)

Changes the size of the image factorially.

| argument | description | | ---: | :--- | | scalingX | A number as the scaling factor for the width. | | scalingY | A number as the scaling factor for the height. |

Returns the created DearImage instance.


.scale(scaling = 1)

Changes the size of the image factorially. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | scaling | A number as the scaling factor. |

Returns the created DearImage instance.


.scaleIn(sizeX = this.sizeX, sizeY = this.sizeY)

Scales the image inside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.scaleOut(sizeX = this.sizeX, sizeY = this.sizeY)

Scales the image outside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.scaleDownIn(sizeX = this.sizeX, sizeY = this.sizeY)

If necessary, scales the image down inside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.scaleDownOut(sizeX = this.sizeX, sizeY = this.sizeY)

If necessary, scales the image down outside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.scaleUpIn(sizeX = this.sizeX, sizeY = this.sizeY)

If necessary, scales the image up inside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.scaleUpOut(sizeX = this.sizeX, sizeY = this.sizeY)

If necessary, scales the image up outside an area. The aspect ratio of the image is preserved.

| argument | description | | ---: | :--- | | sizeX | A number as the width of the area. | | sizeY | A number as the height of the area. |

Returns the created DearImage instance.


.flipX()

Flips the image horizontally.

Returns the created DearImage instance.


.flipY()

Flips the image vertically.

Returns the created DearImage instance.


.rotate(angle)

Rotates the image.

| argument | description | | ---: | :--- | | angle | A number as the angle of the rotation in radians. |

Returns the created DearImage instance.


.rotateClockwise()

Rotates the image clockwise.

Returns the created DearImage instance.


.rotateCounterClockwise()

Rotates the image counter clockwise.

Returns the created DearImage instance.


.drawForeground(image, options = { alignment: { x: 'center', y: 'center', }, repeat: { x: false, y: false, }, })

Draws an image above the current image.

| argument | description | | ---: | :--- | | image | Anything the function .from supports. | | options.alignment.x | A string as the horizontal alignment of the image. Possible values are 'start', 'center' and 'end'. | | options.alignment.y | A string as the vertical alignment of the image. Possible values are 'start', 'center' and 'end'. | | options.repeat.x | If true, repeats the image horizontally. | | options.repeat.y | If true, repeats the image vertically. |

Returns the created DearImage instance.

let image = DearImage.from(source).drawForeground(otherSource, {
  alignment: 'start',
  repeat: {
    y: true,
  },
});

.drawBackground(image, options = { alignment: { x: 'center', y: 'center', }, repeat: { x: false, y: false, }, })

Draws an image below the current image.

| argument | description | | ---: | :--- | | image | Anything the function .from supports. | | options.alignment.x | A string as the horizontal alignment of the image. Possible values are 'start', 'center' and 'end'. | | options.alignment.y | A string as the vertical alignment of the image. Possible values are 'start', 'center' and 'end'. | | options.repeat.x | If true, repeats the image horizontally. | | options.repeat.y | If true, repeats the image vertically. |

Returns the created DearImage instance.

let image = DearImage.from(source).drawBackground(otherSource, {
  alignment: {
    x: 'center',
  },
  repeat: true,
});

.fillForeground(fill)

Draws an image above the current image.

| argument | description | | ---: | :--- | | fill | A string as the fill color. |

Returns the created DearImage instance.


.fillBackground(fill)

Draws an image below the current image.

| argument | description | | ---: | :--- | | fill | A string as the fill color. |

Returns the created DearImage instance.


.toDataURL(format, quality)

Creates a data URL string representing the content.

Returns the created data URL string.


.toImageData()

Creates an ImageData object representing the content.

Returns the created ImageData object.


.toBlob(format, quality)

browser only

Creates a Blob instance representing the content.

Returns the created Blob instance.


.toBuffer(format, quality)

node only

Creates a Buffer instance representing the content.

Returns the created Buffer instance.


.toHTMLCanvasElement()

browser only

Creates a HTMLCanvasElement instance representing the content.

Returns the created HTMLCanvasElement instance.


.toOffscreenCanvas()

browser only

Creates an OffscreenCanvas instance representing the content.

Returns the created OffscreenCanvas instance.


.toHTMLImageElement(format, quality)

browser only

Creates a HTMLImageElement instance representing the content.

Returns the created HTMLImageElement instance.

let image = DearImage.from(source);
let element = image.toHTMLImageElement('image/jpeg', 0.75);
element.style.border = '1px solid BlueViolet';
document.body.appendChild(element);

.saveToFileSystem(target, format, quality)

node only

Asynchronously saves the content to the file system.

| argument | description | | ---: | :--- | | target | A string as the target path to save to. |

Returns a promise.

let image = DearImage.from(source);
await image.saveToFileSystem('/path/to/image.jpg', 'image/jpeg', 0.75);

utils

.isURL(value)

Determines whether the passed value is an instance of URL or an URL string.

| argument | description | | ---: | :--- | | value | The value to be checked. |

Returns true if the passed value is an instance of URL or an URL string, false otherwise.

console.log(DearImage.utils.isURL('https://github.com/SeregPie/DearImage'));
// => true

console.log(DearImage.utils.isURL(new URL('/SeregPie/DearImage', 'https://github.com')));
// => true

console.log(DearImage.utils.isURL('/SeregPie/DearImage')));
// => true in browser and false in node

.isDataURL(value)

Determines whether the passed value is a data URL string.

| argument | description | | ---: | :--- | | value | The value to be checked. |

Returns true if the passed value is a data URL string, false otherwise.

console.log(DearImage.utils.isDataURL('data:image/png;base64,R0lGODdh'));
// => true

console.log(DearImage.utils.isDataURL('data:,')));
// => true

console.log(DearImage.utils.isDataURL('data:image/png;base64')));
// => false