(solved) What is the best tool to mass resize all images in a directory, including sub-directories, while keeping aspect ratio?

submitted by edited

Hello everyone, does anyone know of a batch resizing tool on Linux that can resize loads of images all at once while keeping all the images the same aspect ratio as before? I would like to make all my images in a game have either a width of at least 128 px or height of 192 px (e.g. an image that is 700x875 would resize down to 154x192px, so that width is > 128 px and height = 192 px. I think for most of the images resizing based on height will work, but you never know!)

edit: I have used a for loop that cds into each directory, uses imagemagick to resize all of them to fill/overflow area 128x192 with ^ tag and using morgify to modify in place, then cd back to the parent directory! Thanks everyone

15
38

Log in to comment

15 Comments

https://usage.imagemagick.org/resize/

Imagemagick is very powerful and easy to use, but be aware that the syntax can be a bit arcane. You will need to use mogrify to modify in-place, and make sure you tell it to only resize if it’s larger, and to preserve the aspect ratio. If you just tell it “resize everything to 192x128” it will do exactly that, regardless of the size or shape of the input image.

The link you mentioned looks quite helpful, thanks! Imagemagick is pretty cool


It looks like I need to use the “fill area” option, possibly with centering too.

nvm, read that option wrong. Only scale down it is then w/ keep aspect ratio

Never mind, I was right, I just found that the mogrify command requires the file name to be last



imagemagik can do it. but I think you’re going to need a for loop to iterate through subdirectories

Will use a loop to go through the subdirectories then

@commie@lemmy.dbzer0.com

You may use find with the -exec option or xargs depending on whether imagemagick reads from standard input or doesn’t.




ImageMagick does the job but can be slow. libvips is à faster alternative

Well, this is exactly what I needed for work… we process like 200MB tiffs and imagemagick speed and mem use is an issue

I found out about it while making a Jekyll plugin, the speed improvement is really noticeable

Yeah, I tested it on some large TIFF datasets I have around. 3x less memory and 4x faster.





Imagemagick with bash script. Lookup how to run a bash script recursively through sub folders


Dont know if this is what you are looking for. I have never used it as I just write a quick python script, but I hope this helps.

https://github.com/Nenotriple/batch_resize_images


Take a look at XnView, it has batch capabilities of that kind, which you can set up through a graphical interface. Ships for linux too.



You can simplify the for loop by something like

#!/bin/bash
shopt -s globstar             #assuming bash
for i in images/**/*.gif 
do
     convert ..... $f
done

or, if you don’t use bash,

find images/ -type f -name '*.gif' -print0 | xargs -0 convert .... '{}' 
# maybe xargs needs "-1" option to process only one file at a time

both versions call imagemagick’s convert on all files ending in .gif in the images folder.

For testing, put an “echo” command in front of the “convert” .

You could also check out if there are Rust utilities which do what you want - you’d need to install these using “cargo install”.


Insert image