You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
![]() |
2 years ago | |
---|---|---|
.. | ||
lib | 2 years ago | |
node_modules | 2 years ago | |
CHANGELOG.md | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 2 years ago | |
http.js | 2 years ago | |
index.js | 2 years ago | |
package.json | 2 years ago | |
stream.js | 2 years ago | |
sync.js | 2 years ago |
README.md
probe-image-size
Get image size without full download. Supported image types: JPG, GIF, PNG, WebP, BMP, TIFF, SVG, PSD, ICO.
Key features:
- small size, no heavy dependencies
- works with remote and local data
- effective with big images (speed/memory), download minimal data from remotes
- easy to browserify (splitted to components)
Install
npm install probe-image-size
Example
const probe = require('probe-image-size');
// Get by URL
let result = await probe('http://example.com/image.jpg');
console.log(result); // =>
/*
{
width: xx,
height: yy,
type: 'jpg',
mime: 'image/jpeg',
wUnits: 'px',
hUnits: 'px',
url: 'http://example.com/image.jpg'
}
*/
// By URL with options
let result = await probe('http://example.com/image.jpg', { rejectUnauthorized: false });
console.log(result);
// From the stream
let result = await probe(require('fs').createReadStream('image.jpg'));
console.log(result);
// From a Buffer (sync)
let data = require('fs').readFileSync('image.jpg');
console.log(probe.sync(data));
API
Note:
- You can access/browserify
stream.js
/http.js
/sync.js
directly. - If you don't like
http.js
dependencies, you can create your own wrapper forstream.js
.
probe(src [, options|keepOpen]) -> Promise
src
can be of this types:- String - URL to fetch
- Stream - readable stream
options
- HTTP only. Seeneedle
documentation, and customized defaults.keepOpen
(Boolean) - stream only. Keep stream open after parser finishes (input stream will be closed by default)
result
(Promise) contains:
{
width: XX,
height: YY,
length: ZZ, // byte length of the file (if available, HTTP only)
type: ..., // image 'type' (usual file name extention)
mime: ..., // mime type
wUnits: 'px', // width units type ('px' by default, can be different for SVG)
hUnits: 'px', // height units type ('px' by default, can be different for SVG)
url: ..., // HTTP only, last url for the image in chain of redirects
// (if no redirects, same as src)
variants: [ { width, height }, ... ] | undefined // full list of sizes for ICO
}
Returned errors can be extended with 2 fields:
code
- equals toECONTENT
if the library failed to parse the file;status
- equals to a HTTP status code if it receives a non-200 response.
sync.probe(src) -> result|null
Sync version can eat arrays, typed arrays and buffers. On success it returns the same result as async version. On fail it returns null.
Note. Formats like JPEG & TIFF can store size anywhere (far from the head). That usually does not happens, but if you need guarantees - always provide full file content to sync methods. We strongly recommend to use async version as memory-friendly.
Similar projects
Support probe-image-size
You can support this project via Tidelift subscription.