I often look for ways to batch-transform images and videos with command-line tools instead of heavy image-editing tools, such as Photoshop or Gimp.
Today, I needed to resize and crop a series of images to ensure they had a height of one thousand pixels.
convert \ input.jpg \ -resize 1500x1000^ \ -gravity center \ -extent 1500x1000 \ -quality 90 \ converted.jpg
Here's the same command, with comments.
convert \ # Input image path/name input.jpg \ # Desired resize size -resize 1500x1000^ \ # Where to position the cropping frame -gravity center \ # Cropping frame size -extent 1500x1000 \ # JPEG compression quality -quality 90 \ # Output file path/name converted.jpg
To batch convert images, really, you'd have to repeat this command manually. But there has to be a way to parametrize the input and output names. The one way I found, not using the original input names though, is to use a formatted numbered string.
convert input.jpg -resize 50% output_%03d.jpg