imgp1
Resize, rotate jpeg and png images.
Usage
imgp [OPTIONS]
[PATH
[PATH ...]]
Overview
imgp is a multiprocessing command line image resizer and rotator for JPEG and PNG images.
Features
* resize by percentage or resolution
* rotate clockwise by specified angle
* adaptive resize considering orientation
* brute force to a resolution
* optimize images to save more space
* limit processing by minimum image size
* convert PNG to JPEG
* erase exif metadata
* specify output JPEG image quality
* force smaller to larger resize
* process directories recursively
* overwrite source image option
Adaptive mode
- If the specified and image orientations are same [(H >= V and h > v) or (H < V and h < v)], the image is resized with the longer specified side as reference.
- In case of cross orientation [(H >= V and h <= v) or (H < V and h >= v)], the image is resized with the shorter specified side as reference. Same as non-adaptive.
For example, if an image has a resolution of 2048x1365 and is being resized to 1366x768:
- In regular mode (default), output image resolution will be 1152x768
- In adaptive mode, output image resolution will be 1366x910
Operational notes
- Multiple files and directories can be specified as source. If PATH is omitted, the current directory is processed.
- Output image names are appended with _IMGP if '--overwrite' option is not used. By default _IMGP files are not processed. Doing so may lead to potential race conditions when '--overwrite' option is used.
- PNG files with lower target hres/vres are not converted (even if '--convert' is used). Run 'imgp --convert (*.png)' separately to convert those.
- Resize and rotate are lossy operations. For additional reductions in size try '--optimize' and '--eraseexif' options.
- Option '--optimize' is slower, the encoder makes an extra pass over the image in order to select optimal encoder settings.
- Progressive JPEG images are saved as progressive.
Options
-
-h, --help -
Show help text and exit.
-
-x, --res=res -
Output resolution in HRESxVRES or percentage.
-
-o, --rotate=deg -
Rotate clockwise by a specified angle (in degrees). Negative inputs rotate anti-clockwise. Rotation by 0 degree is not allowed.
-
-a, --adapt -
Adapt to specified resolution considering the orientation of the image. Disabled by default.
-
-c, --convert -
Convert PNG images to JPEG to save on space. The output image is saved with '.jpg' extension.
-
-e, --eraseexif -
Erase EXIF metadata of JPEG images. Preserved by default.
-
-f, --force -
Force to the exact specified resolution. Disabled by default.
-
-H, --hidden -
Include hidden (dot) files. By default hidden files are skipped. -i, --includeimgp Process _IMGP files. Risky due to potential race conditions.
-
-k, --keep -
Do not process if image hres or vres matches specified hres or vres, or --res is 100. However, PNG images are converted to JPEG if --convert option is specified and JPEG images are made progressive is --progressive option is specified.
-
-n, --enlarge -
Enlarge smaller images. By default smaller images are not scaled if specified resolution is greater.
-
-N --nearest -
Use nearest neighbour interpolation for PNG images instead of default antialias.
-
-p, --optimize -
Optimize output images using PIL library optimization algorithm. Disabled by default.
-
-P, --progressive -
Save all output JPEG images as progressive, even if the source is not.
-
-q, --quality=N -
Save the image with a specified quality factor N (scale 1-95, default 75). JPEG only.
-
-m, --mute -
Do not show any operational output.
-
-M, --minresres -
minimum resolution in HxV or percentage of --res to resize
-
-r, --recurse -
Recursively process sub-directories. By default only the specified directory is processed. Symbolic links are ignored to avoid recursive loops.
-
-s, --size=byte -
Minimum size in bytes required to process an image. Acts as a guard against processing low-resolution images. Default 1024 bytes.
-
-w, --overwrite -
Overwrite the source images. By default an output image is saved with
_IMGPappended to the source image name.
NOTE: If overwrite and convert options are used together, source PNG images are deleted.
-
-d, --debug -
Enable debugging.
Examples
- 1.
-
Convert some images and directories:
-
$ imgp -x 1366x768 ~/ ~/Pictures/image3.png ~/Downloads/ /home/testuser/image1.png 3840x2160 -> 1365x768 11104999 bytes -> 1486426 bytes
/home/testuser/image2.jpg 2048x1365 -> 1152x768 224642 bytes -> 31421 bytes
/home/testuser/Pictures/image3.png 1920x1080 -> 1365x768 2811155 bytes -> 1657474 bytes
/home/testuser/Downloads/image4 2048x1365 -> 1152x768 224642 bytes -> 31421 bytes
- 2.
-
Scale an image by 75% and overwrite the source image:
-
$ imgp -x 75 -w ~/image.jpg /home/testuser/image.jpg 1366x767 -> 1025x575 120968 bytes -> 45040 bytes
- 3.
-
Rotate an image clockwise by 90 degrees:
-
$ imgp -o 90 ~/image.jpg 120968 bytes -> 72038 bytes
- 4.
-
Adapt the images in the current directory to 1366x1000 resolution.
Visit all directories recursively, overwrite source images, ignore images with matching hres or vres but convert PNG images to JPEG.
|
$ imgp -x 1366x1000 -wrack |
|
5.
|
Set hres=800 and adapt vres maintaining the ratio. |
-
$ imgp -x 800x0 Source omitted. Processing current directory...
./image1.jpg 1366x911 -> 800x534 69022 bytes -> 35123 bytes
./image2.jpg 1050x1400 -> 800x1067 458092 bytes -> 78089 bytes
- 6.
-
Process images greater than 50KiB only:
|
$ imgp -wrackx 1366x1000 -s 51200 |
|
7.
|
Generate a 64px adaptive thumbnail of the last modified file in the current dir: |
-
#!/usr/bin/env sh
thumb64 () {
pop=$(ls -1t | head -1)
imgp -acx 64x64 "$pop" }
Home
https://github.com/jarun/imgp
Releases
5 releases since Debian 9 (Stretch); the text changed 3 times.
--hidden since Debian 11 (Bullseye);
--minres since Debian 11 (Bullseye);
--mute since Debian 10 (Buster);
--nearest since Debian 11 (Bullseye);
--progressive since Debian 10 (Buster);
--quality since Debian 10 (Buster);
--recurse since Debian 10 (Buster);
--size since Debian 10 (Buster);
-H since Debian 11 (Bullseye);
-M since Debian 11 (Bullseye);
-N since Debian 11 (Bullseye);
-P since Debian 11 (Bullseye);
-m since Debian 10 (Buster);
-s since Debian 10 (Buster).
--dot until Debian 10 (Buster);
--includeimgp until Debian 10 (Buster);
--nn until Debian 10 (Buster);
--pr until Debian 10 (Buster);
--quiet until Debian 9 (Stretch);
--recursive until Debian 9 (Stretch);
-i until Debian 10 (Buster);
-z until Debian 10 (Buster).