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

@pretendonetwork/pictobox

v1.0.4

Published

TypeScript library for interacting with several different image types, including those exclusive to the Wii U and 3DS

Downloads

21

Readme

Picto Box

TypeScript library for interacting with several different image types, including those exclusive to the Wii U and 3DS

Why?

While there are several libraries already available for NodeJS for various image types, most of these have at least one of the following issues:

  • Outdated/unmaintained
  • Does not completely/accurately follow image specification
  • Inconsistent API with other libraries
  • API is cumbersome to work with in our systems
  • Library is poorly documented or structured, leading to development and/or performance issues
  • A library does not exist for the image type

Because of this, we have decided to create our own library with the following goals:

  • Consistent API, making image conversions simple and nice to do
  • Support a wide range of image types, including those specific to Nintendo consoles
  • Follow image specifications as completely and accurately as possible
    • Some images are Nintendo variants of standard formats. In these cases the image specification may not be entirely followed (though compatibility with non-Nintendo images is always a goal)
  • Well structured classes with clear field/method names. These names should come from, or be derived by, the images specification
  • Good documentation. Including self-documented code, TSDoc comments, regular comments, and linking to reference material to assist with bug fixes/specification inaccuracies

Installation

npm i @pretendonetwork/pictobox

Supported files

  • [x] BMP
  • [x] TGA
  • [x] PNG
  • [ ] ETC1A4. Nintendo variant of ETC1 with added alpha data. (Can decode but not encode)
  • [ ] Indexed images
  • [x] RGB565A4. Nintendo variant of RGB565 with added alpha data

Example

// Convert an RGB565 (with alpha) image to a PNG

import fs from 'node:fs';
import RGB565A4 from '@pretendonetwork/pictobox/rgb565a4';
import PNG from '@pretendonetwork/pictobox/png';

const rgb565Data = fs.readFileSync('./badge.rgb565');
const rgb565Alpha = fs.readFileSync('./badge.a4');

const rgb565 = new RGB565A4();

rgb565.width = 64;
rgb565.height = 64;
rgb565.parseFromBuffer(rgb565Data, rgb565Alpha);

const png = new PNG();

png.width = rgb565.width;
png.height = rgb565.height;
png.pixels = rgb565.pixels;
png.bitDepth = PNG.BitDepths.Bits8;
png.colorType = PNG.ColorTypes.RGBA;
png.interlaceMethod = PNG.InterlaceMethods.None;

const pngEncoded = png.encode();

fs.writeFileSync('./badge.png', pngEncoded);