
pm-image: Redimensionamiento rápido de imágenes para CLI, servidores y el Explorador de Windows
pm-image es un nativo C++ conjunto de herramientas de imagen basado en libvips - el mismo motor de alto rendimiento que hay detrás de herramientas como Sharp (Node.js). Un binario te da un interfaz de línea de comandos, an HTTP REST servidor, y JSON IPC delimitado por líneas para la automatización. En Windows, opcional Explorador integración añade el botón derecho redimensionar y convertir flujos de trabajo sin abrir otra aplicación.
pm-image mantiene la previsibilidad de los procesos, ya se trate de fotos por lotes para la Web, de una API de redimensionamiento local o de carpetas de archivos RAW y HEIC reducidas desde el escritorio: descodificar → procesar → codificarcon Afilado como opciones (modos de ajuste, calidad, eliminación de metadatos, recorte inteligente) y opcional caché de disco para que los trabajos repetidos sigan siendo instantáneos.
Descargar - Windows - AMD 64 | Código fuente
¿A quién va dirigido?
- Desarrolladores que quieren un binario nativo único (sin tiempo de ejecución de Node) para redimensionar trabajos en scripts, CI o servicios sidecar.
- Usuarios avanzados de Windows que quieren menú contextual Preajustes de tamaño y conversión a JPG desde el Explorador de archivos.
- Integradores que necesitan REST (
POST /v1/resize) o CIP (una línea JSON por petición) con el mismo esquema JSON que la CLI.
Cómo cambiar el tamaño de las imágenes (inicio rápido)
1. Línea de comandos - un archivo
Instalar o construir pm-imagea continuación, ejecute resize con rutas de entrada y salida. Por defecto, la imagen cabe dentro su anchura y altura máximas sin ampliar (a menos que permita la ampliación).
pm-image resize photo.jpg out.jpg --max-width 1920 --max-height 1080
- Calidad (JPEG, WebP, AVIF): utilice
-q/quality(por ejemplo-q 85). - Formato de salidaUtiliza el extensión de destino (
.webp,.avif,.jpg) o--formatcuando el camino es ambiguo.
2. Modos de ajuste: no todos los cambios de tamaño son "encoger para ajustar".
| Objetivo | Qué utilizar |
|---|---|
| Encajar dentro de una caja (mantener la relación de aspecto, sin recortar) | Comportamiento por defecto con --max-width / --max-heightopcional --fit inside a través de fit en JSON. |
| Avatar cuadrado o miniatura (recortar) | Mismo --max-width y --max-height (por ejemplo, 512), --fit coveropcional --position attention o entropy para cultivos más inteligentes. |
| Cuadrado con relleno (sin recorte) | --fit contain y --background '#rrggbb' para letterboxing. |
| Dimensiones exactas por estiramiento | --fit fill (distorsiona si las relaciones de aspecto difieren). |
Ejemplos (consulte el LÉEME del paquete para ver la lista completa de banderas):
# Thumbnail: 400×400 cover crop
pm-image resize in.jpg thumb.jpg --fit cover --max-width 400 --max-height 400
# Padded square on a dark canvas
pm-image resize wide.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
3. Rutas y carpetas de lotes
- Utilice globos (
*,?,**) en la entrada para procesar muchos archivos en una sola invocación. - Apuntar la salida a un directorio (a menudo con un
/o\) o utilice **plantillas** como${SRC_DIR},${SRC_NAME},${SRC_FILE_EXT}para reflejar o renombrar las salidas por archivo.
pm-image resize './photos/**/*.jpg' ./out/
pm-image resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
4. API HTTP
Inicie el servidor (serve), entonces POST JSON a /v1/resize con input, outputy los mismos campos de redimensionamiento que la CLI (max_width, max_height, fit, qualityetc.). Las rutas deben poder ser leídas y escritas por el proceso servidor.
5. Windows - redimensionar desde el Explorador
En pm-image register-explorer (o el instalador de NSIS), utilice la opción PM-Medios de comunicación en imágenes o carpetas para anchuras preestablecidas, en su sitio o copiaAdemás convertir a JPG. Anular anchos preestablecidos con --widths al registrarse.
6. Opcional: GUI de Windows
En Windows, pm-image resize --ui abre un nativo para elegir archivos y opciones (no --src / --dst con --ui).
Características
- con libvips redimensionamiento, rotación, flip/flop, EXIF autorotatemetadatos tira (los valores predeterminados coinciden con los flujos de trabajo web habituales).
- Formatos: JPEG, PNG, WebP, TIFF; AVIF / HEIC cuando su compilación de libvips incluye HEIF; otros formatos dependen de los cargadores/guardadores de libvips.
- URL HTTP(S) como
input(obtenida a través de libcurl) para procesos de descarga y redimensionamiento. - Caché de salida: SHA-256 con clave por ruta, tamaño, mtime y opciones - los aciertos de caché omiten la recodificación.
Para conocer los requisitos previos, los pasos de compilación, el instalador y las tablas de opciones completas, consulte la página LÉEME DE C++.
FAQ (preguntas y respuestas)
¿Qué es pm-image?
pm-image es un ejecutable creado por CMake que expone el redimensionamiento de imágenes y operaciones relacionadas a través de CLI, **serve (REST)**y ipc (líneas JSON). El procesamiento utiliza libvipsalineado con un Afilado como modelo de opción por familiaridad.
¿Es pm-image lo mismo que Sharp?
No... Sharp es un Node.js biblioteca; pm-image es un nativo autónomo programa. Ambos se apoyan en libvipspor lo que conceptos como fit, position, kernely el mapa de calidad. Consulte la tabla "Opciones de Sharp-like" del README para conocer los nombres de los campos (without_enlargement, strip_metadataetc.).
¿Cómo redimensiono una imagen a una anchura exacta?
Utilice --max-width (y opcionalmente --max-height). La escala de la imagen abajo (o hacia arriba si permite la ampliación) para respetar esos límites y el fit modo. Para un sólo ancho flujo de trabajo, establezca un max_height o utilizar JSON/resize opciones que coincidan con el comportamiento deseado.
¿Cómo puedo cambiar el tamaño sin perder calidad?
Redimensionar siempre recodifica para formatos rasterizados; "sin pérdida" depende del formato:
- Para JPEGUtilice un
-q(por ejemplo, 90-95) y evitar las paradas repetidas. - Para PNGel cambio de tamaño puede volver a comprimir; utilice Compresión PNG según sea necesario.
- Prefiera WebP o AVIF con sintonía calidad para archivos más pequeños con una fidelidad visual determinada.
sin ampliación por defecto verdaderopor lo que las imágenes pequeñas no se reescalan a menos que se opte por ello.
¿Cómo cambio por lotes el tamaño de las imágenes de una carpeta?
Utilice un glob para input y un directorio o plantilla para output. Las coincidencias múltiples se procesan en un comando; véase Rutas por lotes y caché en el LÉEME para las reglas sobre barras finales y ${SRC_*} variables.
¿Puedo cambiar el tamaño de las imágenes a partir de URL?
Sí. Pase un http:// o https:// URL como input. Se siguen los redireccionamientos; los tiempos de espera y los límites de redireccionamiento son configurables (--url-timeout, --url-max-redirects).
¿Funciona pm-image en Windows?
Sí. Utilice la vips dev bundle (npm run setup:vips del paquete), construya pm-imagey, opcionalmente, instale NSIS salida para **pm-image-setup.exe**PATH, DLL y scripts del Explorador. registro-explorador añade menús contextuales para redimensionar y convertir.
¿Cómo funciona la caché?
Cuando están activadas, las salidas se almacenan bajo un directorio caché (por defecto bajo el directorio de trabajo del proceso), con la clave SHA-256 hash de identidad de entrada, metadatos de archivo y todos opciones de redimensionamiento. Los trabajos idénticos reutilizan los bytes almacenados en caché sin necesidad de volver a ejecutar libvips.
¿Para qué sirve la CIP?
ipc acepta un objeto JSON por línea a través de TCP (o un socket Unix en sistemas que no sean Windows), ideal para demonios locales o herramientas que desean un canal simple de petición/respuesta sin sobrecarga HTTP.
¿Dónde está la referencia completa de la API?
- CLI:
pm-image --help,pm-image resize --help. - API de imágenes a nivel de biblioteca (motor subyacente): libvips
VipsImage.
Documentación relacionada
Ejemplos CLI
Las rutas a continuación utilizan el estilo Unix; en Windows ejecute pm-image.exe y utilizar .\ o rutas completas según sea necesario.
Ayuda y versión
pm-image --help
pm-image resize --help
pm-image -v
resize - encajar dentro de una caja (por defecto), escribir WebP / AVIF por extensión
# Max 800×600, stay inside the box, Lanczos3 (default), write JPEG quality 85 (default)
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600
# Same, explicit quality
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
# WebP output (quality applies)
pm-image resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
# AVIF output (quality applies; needs HEIF/AVIF support in your libvips build)
pm-image resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
# Force output format when the path has no extension you trust
pm-image resize in.tif /tmp/out --format webp --max-width 512
resize - imágenes cuadradas (1:1)
Utilice la mismo y --max-width (ese valor es el lado del cuadrado en píxeles). Elija --max-height:**--fit**Resultado
fit |
Rellena el cuadrado; recorta el desbordamiento (recorte por defecto: |
|---|---|
cover |
o --position centre / attention para cultivos inteligentes).entropyImagen completa dentro del cuadrado; |
contain |
buzoneo** en dos lados si es necesario (**).--backgroundSe estira al cuadrado (ignora la relación de aspecto). |
fill |
REST / IPC JSON: |
# 512×512 crop-to-square (avatars, thumbnails)
pm-image resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
# 1080×1080 WebP, smart crop on subject
pm-image resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
# Square canvas, no crop — padded bands with a colour
pm-image resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
# Exact square by stretching (rare)
pm-image resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
** Por ejemplo **."max_width": 512, "max_height": 512, "fit": "cover", "position": "attention" - cubrir (recortar), contener (buzón), girar / voltear
resize - HTTP REST
# Cover: fill 1200×630, crop centre (use --position attention for smart crop)
pm-image resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
# Contain: fit inside 800×600 canvas, letterbox with a background
pm-image resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
# EXIF autorotate (default), then rotate 90° CCW, vertical flip
pm-image resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
serveEjemplo de petición de redimensionamiento (las rutas deben ser legibles/escribibles por el proceso servidor):
# Default: http://127.0.0.1:8080 — GET /health, POST /v1/resize with JSON body
pm-image serve --host 127.0.0.1 -p 8080
Opcional:
curl -s http://127.0.0.1:8080/health
curl -s -X POST http://127.0.0.1:8080/v1/resize \
-H 'Content-Type: application/json' \
-d '{"input":"/path/in.png","output":"/path/out.webp","max_width":400,"quality":80}'
, "cache":false, "expand_glob":false - ver "cache_dir":"..."Rutas por lotes y caché** arriba.** - una línea JSON por conexión (TCP; socket Unix en Linux/macOS)
ipcLos mismos campos JSON que REST (
pm-image ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
# elsewhere: send a single line, read one line back, e.g.
# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true}
, input...globos, output, expand_glob, cacheopciones de cambio de tamaño).cache_dir