imagemagick

Installation
SKILL.md

ImageMagick Commands

ImageMagick v7 uses magick as the main command. On older systems (v6), use convert, mogrify, identify, montage directly.

Image Info

# Dimensions, format, colorspace, filesize
magick identify image.png
magick identify -verbose image.png

# Just dimensions
magick identify -format "%wx%h" image.png

# Format, dimensions, filesize, colorspace in one line
magick identify -format "Format: %m, Size: %wx%h, Filesize: %b, Colorspace: %[colorspace]\n" image.png

# List all images in a directory
magick identify *.jpg

Convert Between Formats

magick input.png output.jpg
magick input.jpg output.webp
magick input.png output.gif
magick input.svg output.png
magick input.png output.pdf
magick input.webp output.png

# Explicit format override (when extension is ambiguous)
magick PNG:input output.jpg

Resize

# Resize to exact width x height (may distort)
magick input.png -resize 800x600! output.png

# Resize to fit within bounds (preserves aspect ratio)
magick input.png -resize 800x600 output.png

# Resize by width only (height scales proportionally)
magick input.png -resize 800x output.png

# Resize by height only
magick input.png -resize x600 output.png

# Resize by percentage
magick input.png -resize 50% output.png

# Resize only if larger (shrink-only flag >)
magick input.png -resize 800x600\> output.png

# Resize only if smaller (enlarge-only flag <)
magick input.png -resize 800x600\< output.png

# Fill area, cropping overflow (cover behavior)
magick input.png -resize 800x600^ -gravity center -extent 800x600 output.png

Crop

# Crop WxH+X+Y (width x height from top-left offset)
magick input.png -crop 400x300+100+50 +repage output.png

# Crop from center
magick input.png -gravity center -crop 400x300+0+0 +repage output.png

# Auto-trim whitespace/uniform borders
magick input.png -trim +repage output.png

# Trim with fuzz tolerance (handles near-white borders)
magick input.png -fuzz 10% -trim +repage output.png

# Crop into tiles (e.g., 3x3 grid)
magick input.png -crop 33.33%x33.33% +repage tile_%d.png

Quality and Compression

# JPEG quality (1-100, default ~92)
magick input.png -quality 85 output.jpg

# WebP quality (1-100)
magick input.png -quality 80 output.webp

# PNG compression level (0-9 mapped to quality 0-90, where lower = more compression)
magick input.png -quality 90 output.png

# Lossless WebP
magick input.png -define webp:lossless=true output.webp

# JPEG with specific sampling factor
magick input.png -sampling-factor 4:2:0 -quality 85 output.jpg

Batch Processing with Mogrify

Mogrify modifies files in place. Use -path to write to a different directory.

# Convert all PNGs to JPG in a new directory
mkdir -p converted
magick mogrify -path converted -format jpg *.png

# Resize all images in place
magick mogrify -resize 800x600 *.jpg

# Resize and output to directory
mkdir -p resized
magick mogrify -path resized -resize 50% *.png

# Batch quality reduction
mkdir -p compressed
magick mogrify -path compressed -quality 80 *.jpg

# Batch format conversion with resize
mkdir -p thumbnails
magick mogrify -path thumbnails -resize 200x200 -format webp *.png

Create Thumbnails

# Simple thumbnail (preserves aspect ratio)
magick input.png -thumbnail 150x150 thumb.png

# Square thumbnail with crop (cover + center crop)
magick input.png -thumbnail 150x150^ -gravity center -extent 150x150 thumb.png

# Thumbnail strip metadata
magick input.png -thumbnail 150x150 -strip thumb.png

# Batch thumbnails
mkdir -p thumbs
magick mogrify -path thumbs -thumbnail 200x200^ -gravity center -extent 200x200 *.jpg

Watermark

# Text watermark
magick input.png \
  -gravity southeast \
  -fill "rgba(255,255,255,0.5)" \
  -pointsize 24 \
  -annotate +10+10 "Copyright 2026" \
  output.png

# Text watermark with background
magick input.png \
  -gravity south \
  -fill white -undercolor "rgba(0,0,0,0.5)" \
  -pointsize 20 \
  -annotate +0+10 " My Watermark " \
  output.png

# Image overlay watermark (bottom-right, 20% opacity)
magick input.png \
  \( watermark.png -resize 200x -alpha set -channel A -evaluate set 20% +channel \) \
  -gravity southeast -geometry +10+10 \
  -composite output.png

# Tiled watermark across entire image
magick input.png \
  \( watermark.png -resize 100x -alpha set -channel A -evaluate set 15% +channel \
     -write mpr:wm +delete +clone -fill mpr:wm -draw "color 0,0 reset" \) \
  -composite output.png

Combine Images

# Append horizontally (side by side)
magick input1.png input2.png +append combined.png

# Append vertically (stacked)
magick input1.png input2.png -append combined.png

# Montage grid (2x2) with spacing
magick montage img1.png img2.png img3.png img4.png \
  -geometry 300x300+5+5 -tile 2x2 grid.png

# Montage with labels
magick montage img1.png img2.png img3.png img4.png \
  -label "%f" -geometry 300x300+5+5 -tile 2x grid.png

# Montage with background color
magick montage *.jpg \
  -geometry 200x200+4+4 -tile 3x -background "#f0f0f0" grid.png

Color Adjustments

# Convert to grayscale
magick input.png -colorspace Gray output.png

# Adjust brightness-contrast (-100 to +100 each)
magick input.png -brightness-contrast 10x20 output.png

# Negate (invert colors)
magick input.png -negate output.png

# Sepia tone
magick input.png -sepia-tone 80% output.png

# Adjust saturation (via modulate: brightness, saturation, hue)
magick input.png -modulate 100,130,100 output.png

# Desaturate partially
magick input.png -modulate 100,50,100 output.png

# Convert colorspace (sRGB, CMYK, etc.)
magick input.png -colorspace CMYK output.tiff
magick input.tiff -colorspace sRGB output.png

# Auto-level (stretch contrast)
magick input.png -auto-level output.png

# Normalize (full range stretch)
magick input.png -normalize output.png

Borders and Padding

# Add solid border
magick input.png -bordercolor "#333333" -border 10 output.png

# Add padding (extend canvas with background color)
magick input.png -gravity center -background white -extent 900x700 output.png

# Rounded corners (create mask, composite)
magick input.png \
  \( +clone -alpha extract \
     -draw "fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0" \
     \( +clone -flip \) -compose Multiply -composite \
     \( +clone -flop \) -compose Multiply -composite \
  \) -alpha off -compose CopyOpacity -composite output.png

# Add shadow
magick input.png \
  \( +clone -background black -shadow 60x5+4+4 \) \
  +swap -background none -layers merge +repage output.png

Optimize for Web

# Strip all metadata (EXIF, profiles, comments)
magick input.jpg -strip output.jpg

# Progressive JPEG
magick input.png -interlace Plane -quality 85 -strip output.jpg

# Optimized WebP from any format
magick input.png -quality 80 -define webp:method=6 -strip output.webp

# Resize + optimize in one pass
magick input.png -resize 1200x -quality 82 -strip -interlace Plane output.jpg

# Batch optimize for web
mkdir -p web
magick mogrify -path web -resize "1920x1920>" -quality 82 -strip -interlace Plane -format jpg *.png

Favicon from PNG

# Create multi-size ICO favicon
magick input.png -define icon:auto-resize=256,128,64,48,32,16 favicon.ico

# Create specific size favicons
magick input.png -resize 32x32 favicon-32.png
magick input.png -resize 16x16 favicon-16.png
magick input.png -resize 180x180 apple-touch-icon.png
magick input.png -resize 192x192 android-chrome-192.png
magick input.png -resize 512x512 android-chrome-512.png

PDF Operations

# PDF to images (one image per page)
magick -density 300 input.pdf output_%03d.png

# Specific page from PDF (0-indexed)
magick -density 300 "input.pdf[0]" first_page.png

# Page range
magick -density 300 "input.pdf[0-4]" page_%03d.png

# Images to PDF
magick *.jpg output.pdf

# Images to PDF with specific page size
magick *.png -resize 595x842 -gravity center -extent 595x842 output.pdf

# Compress PDF images
magick -density 150 input.pdf -quality 80 compressed.pdf

Transparent Background

# Remove white background (make transparent)
magick input.png -fuzz 10% -transparent white output.png

# Remove any specific color background
magick input.png -fuzz 15% -transparent "#00ff00" output.png

# Replace transparent with a color
magick input.png -background white -alpha remove -alpha off output.png

# Flatten transparency to white
magick input.png -flatten output.jpg

# Set specific pixels transparent via flood fill from top-left corner
magick input.png -fill none -fuzz 10% -draw "alpha 0,0 floodfill" output.png

# Add transparency channel
magick input.jpg -alpha set output.png

Useful Flags Reference

Flag Purpose
-strip Remove metadata
-auto-orient Fix rotation from EXIF
+repage Reset virtual canvas after crop
-fuzz N% Color matching tolerance
-gravity Anchor point: center, north, southeast, etc.
-density N DPI for rasterizing vector/PDF (use before input)
-depth 8 Set bit depth
-alpha set Enable alpha channel
-alpha remove Flatten alpha to background
-verbose Show processing details
Related skills

More from 1mangesh1/dev-skills-collection

Installs
1
GitHub Stars
3
First Seen
Apr 14, 2026