What is ipx?
The ipx npm package is an image processing server that allows you to manipulate images on-the-fly. It supports various image transformations such as resizing, cropping, and format conversion, making it useful for web applications that need dynamic image processing.
What are ipx's main functionalities?
Resizing Images
This feature allows you to resize images to specified dimensions. In the code sample, the image is resized to a width of 300 pixels and a height of 200 pixels.
const ipx = require('ipx')();
const url = '/_ipx/w_300,h_200/image.jpg';
const result = await ipx(url);
Cropping Images
This feature allows you to crop images to specified dimensions. In the code sample, the image is cropped to a width of 300 pixels and a height of 200 pixels.
const ipx = require('ipx')();
const url = '/_ipx/c_crop,w_300,h_200/image.jpg';
const result = await ipx(url);
Format Conversion
This feature allows you to convert images to different formats. In the code sample, the image is converted to the WebP format.
const ipx = require('ipx')();
const url = '/_ipx/f_webp/image.jpg';
const result = await ipx(url);
Other packages similar to ipx
sharp
Sharp is a high-performance image processing library that supports resizing, cropping, and format conversion. It is known for its speed and efficiency, making it a popular choice for server-side image processing. Compared to ipx, sharp is more of a low-level library that requires more manual setup and configuration.
jimp
Jimp is a JavaScript image processing library that supports various image manipulations such as resizing, cropping, and format conversion. It is easy to use and does not require any external dependencies. Compared to ipx, Jimp is more suitable for client-side applications and smaller projects.
gm
GraphicsMagick (gm) is a Node.js wrapper for the GraphicsMagick and ImageMagick image processing libraries. It supports a wide range of image manipulations and is highly configurable. Compared to ipx, gm offers more advanced features but requires the installation of external software.
🖼 IPX
High performance, secure and easy to use image proxy based on Sharp and libvips.
WARNING:: THIS PROJECT AND DOCS ARE STILL WIP!
Project goals
- Fast and minimal as possible.
- Configurable operations.
- Built-in secure cache with human readable entries and resistant against duplicates.
- Remote agnostic cache and input adapters.
- Smart and auto cache cleaning.
- Twelve factor friendly.
API
/{format}/{operations}/{src}
Operations are separated by a colon ,
(Example: op1,op2
) and their arguments separated using underscore _
(Example: s_200_300
)
ََUse _
value in place for {format}
or {operations}
to keep original values of source image.
Possible values for format: jpeg
,webp
or png
.
Examples
- Just change format to
webp
and keep other things same as source:
http://cdn.example.com/webp/_/avatars/buffalo.png
- Keep original format (
png
) and set width to 200
:
http://cdn.example.com/_/w_200/avatars/buffalo.png
- Resize to
200x300px
using embed
method and change format to jpg
:
http://cdn.example.com/jpg/s_200_300,embed/avatars/buffalo.png
Docker deployment
Latest docker image is automatically built under pooya/ipx.
Quick start:
docker run \
-it \
--rm \
--volume ./storage:/app/storage:ro \
--volume ./cache:/app/cache \
--port 3000:3000
pooya/ipx
Using docker-compose:
image: pooya/ipx
volumes:
- ./storage:/app/storage:ro
- ./cache:/app/cache
ports:
- 3000:3000
Operations
Operation | Arguments | Example | Description |
---|
s | width , height | s:200:300 | Resize image. |
w | width | w:200 | Change image with. |
h | height | h:200 | Change image height. |
embed | - | embed | Preserving aspect ratio, resize the image to the maximum width or height specified then embed on a background of the exact width and height specified. |
max | - | max | Preserving aspect ratio, resize the image to be as large as possible while ensuring its dimensions are less than or equal to the width and height specified. |
min | - | min | Preserving aspect ratio, resize the image to be as small as possible while ensuring its dimensions are greater than or equal to the width and height specified. |
Config
Config can be customized using IPX_*
environment variables or config/local.js
file. Here are defaults:
ipx: {
input: {
adapter: 'IPX_INPUT_ADAPTER',
dir: 'IPX_INPUT_DIR'
},
cache: {
adapter: 'IPX_CACHE_ADAPTER',
dir: 'IPX_CACHE_DIR',
cleanCron: 'IPX_CACHE_CLEAN_CRON',
maxUnusedMinutes: 'IPX_CACHE_CLEAN_MINUTES'
}
}
License
MIT - Pooya Parsa