Convert Images Linux Terminal: ImageMagick How TO
Knowledge Overview
Prerequisites
- Basic Linux command line navigation (cd, ls, mkdir)
- Understanding of file paths and directory structures
- Familiarity with terminal/shell basics
- Ability to use a text editor (nano, vim, or gedit)
What You'll Learn
- Execute single file format conversions with precise command syntax
- Process multiple images simultaneously using batch conversion techniques
- Control image quality and file size through compression settings
- Convert between 200+ formats including JPEG, PNG, WebP, TIFF, and PDF
- Resize images during conversion to optimize for web or print
- Troubleshoot common conversion errors and permission issues
- Automate image processing workflows with bash scripts
- Optimize performance for large-scale image operations
Tools Required
- Linux operating system (Ubuntu, Debian, CentOS, Fedora, Arch, or any distribution)
- ImageMagick (installation instructions included in post)
- Terminal/command line access
Time Investment
10 minutes reading time
20-30 minutes hands-on practice
Guide Content
Core Topics Covered in This Post
- Quick ImageMagick conversion commands for common image format transformations
- Batch conversion techniques to process multiple images simultaneously
- Image quality optimization during format conversion
- Advanced conversion options including resize, compression, and metadata handling
- Troubleshooting common conversion errors and format compatibility issues
- Performance optimization tips for large-scale image processing
How to Convert Images in Linux Terminal
To convert images in Linux terminal, use the command convert input.jpg output.png. ImageMagick's convert command automatically handles format detection and applies appropriate codecs based on file extensions. For batch operations, use mogrify -format png *.jpg to convert all JPG files to PNG in the current directory.
What is ImageMagick?
ImageMagick is a powerful, free, open-source software suite for creating, editing, and converting bitmap images. When you need to convert images in Linux terminal, ImageMagick provides the most comprehensive solution available. It supports over 200 image formats including JPEG, PNG, GIF, TIFF, PDF, WebP, and many specialized formats. Available on virtually all Linux distributions, ImageMagick operates efficiently from the command line, making it ideal for automation, scripting, and server-side image processing.
Key advantages:
- Cross-platform compatibility (Linux, Windows, macOS)
- Extensive format support with automatic codec selection
- Batch processing capabilities for high-volume workflows
- Advanced manipulation options beyond simple conversion
- Integration with shell scripts and automation tools
Installing ImageMagick on Linux
Ubuntu/Debian Installation
# Update package repository
sudo apt update
# Install ImageMagick
sudo apt install imagemagick
# Verify installation
convert --version
CentOS/RHEL/Fedora Installation
# Install ImageMagick package
sudo dnf install ImageMagick
# For older CentOS/RHEL versions
sudo yum install ImageMagick
# Check installed version
convert -version
Arch Linux Installation
# Install via pacman
sudo pacman -S imagemagick
# Verify functionality
identify --version
Expected output:
Version: ImageMagick 7.1.1-x Q16-HDRI x86_64
Copyright: Β© 1999 ImageMagick Studio LLC
Features: Cipher DPC HDRI OpenMP(4.5)
Basic Image Format Conversion
Single File Conversion
The fundamental ImageMagick conversion syntax is straightforward:
# Convert JPEG to PNG
convert photo.jpg photo.png
# Convert PNG to JPEG
convert image.png image.jpg
# Convert to WebP (modern format)
convert picture.jpg picture.webp
# Convert PDF first page to image
convert document.pdf[0] page1.jpg
How it works: ImageMagick automatically detects input format from file content (not just extension) and applies the appropriate output codec based on the target extension.
Multiple Format Conversion
# Convert single image to multiple formats
convert original.jpg output.png output.webp output.gif
# Convert with explicit format specification
convert input.tiff -format jpg output.jpg
Batch Image Conversion: Convert Images Linux Terminal Efficiently
Converting All Files of One Type
# Convert all JPEG files to PNG in current directory
mogrify -format png *.jpg
# Convert all PNG files to JPEG
mogrify -format jpg *.png
# Convert with subdirectory preservation
find . -name "*.jpg" -exec convert {} {}.png \;
Important: mogrify modifies files in place by default. Use -path to specify output directory:
# Convert to new directory (preserves originals)
mkdir converted
mogrify -path converted/ -format png *.jpg
Recursive Directory Conversion
# Convert all images in subdirectories
find /path/to/images -name "*.jpg" -exec bash -c 'convert "$0" "${0%.jpg}.png"' {} \;
# More efficient with parallel processing
find . -name "*.jpg" | parallel convert {} {.}.png
Conditional Batch Conversion
# Convert only files larger than 1MB
find . -name "*.jpg" -size +1M -exec convert {} {}.png \;
# Convert only images with specific dimensions
for file in *.jpg; do
width=$(identify -format "%w" "$file")
if [ "$width" -gt 1920 ]; then
convert "$file" "${file%.jpg}.png"
fi
done
Image Quality and Compression Control
JPEG Quality Settings
# High quality JPEG (larger file size)
convert input.png -quality 95 output.jpg
# Medium quality (balanced)
convert input.png -quality 85 output.jpg
# Lower quality (smaller file size)
convert input.png -quality 60 output.jpg
Quality scale: 1-100, where 85-95 is generally optimal for web use (balances quality and file size).
PNG Compression
# Maximum PNG compression (slower processing)
convert input.jpg -quality 95 output.png
# Fast compression
convert input.jpg -quality 75 output.png
# Apply specific PNG compression filter
convert input.jpg -define png:compression-level=9 output.png
WebP Conversion with Quality Control
# High-quality lossy WebP
convert input.jpg -quality 90 output.webp
# Lossless WebP conversion
convert input.png -define webp:lossless=true output.webp
# WebP with transparency preservation
convert input.png -quality 90 output.webp
Advanced Conversion Options
Resizing During Conversion
# Resize to specific width (maintains aspect ratio)
convert input.jpg -resize 1920x output.jpg
# Resize to specific height
convert input.jpg -resize x1080 output.jpg
# Resize to exact dimensions (may distort)
convert input.jpg -resize 1920x1080! output.jpg
# Resize to fit within dimensions (preserves ratio)
convert input.jpg -resize 1920x1080 output.jpg
# Resize by percentage
convert input.jpg -resize 50% output.jpg
Format Conversion with Compression
# Convert and compress simultaneously
convert input.png -strip -quality 85 -resize 1920x output.jpg
# Remove metadata during conversion
convert input.jpg -strip output.jpg
# Apply specific color space
convert input.jpg -colorspace sRGB output.png
Transparency Handling
# Convert transparent PNG to JPEG (adds white background)
convert input.png -background white -flatten output.jpg
# Preserve transparency when converting to WebP
convert input.png -define webp:alpha-quality=100 output.webp
# Add transparency to solid image
convert input.jpg -transparent white output.png
Batch Conversion with Resizing
# Resize all images during batch conversion
mogrify -path resized/ -format jpg -resize 1920x *.png
# Convert and optimize for web
mogrify -format jpg -quality 85 -strip -resize 1920x *.png
Working with Specific Formats
PDF to Image Conversion
# Convert first page of PDF
convert document.pdf[0] page1.jpg
# Convert all PDF pages to separate images
convert document.pdf output-%d.jpg
# Convert with specific resolution (DPI)
convert -density 300 document.pdf output.jpg
# Convert specific page range
convert document.pdf[2-5] output-%d.png
SVG to Raster Conversion
# Convert SVG to PNG
convert vector.svg raster.png
# Convert SVG with specific size
convert -background none -size 1920x1080 vector.svg output.png
# High-resolution SVG conversion
convert -density 300 vector.svg output.png
RAW Image Conversion
# Convert camera RAW to JPEG
convert photo.cr2 output.jpg
# Convert RAW with quality settings
convert photo.nef -quality 95 output.jpg
# Convert multiple RAW files
mogrify -format jpg -quality 90 *.cr2
GIF to Video Format (via ImageMagick)
# Extract GIF frames
convert animation.gif frames-%03d.png
# Convert static image to GIF
convert image.png output.gif
# Create GIF from multiple images
convert -delay 10 -loop 0 frame*.png animation.gif
Troubleshooting Common Conversion Issues
Error: "convert: not authorized"
Problem: ImageMagick security policy blocks certain formats (especially PDF, PS, EPS).
Solution:
# Edit ImageMagick policy file
sudo nano /etc/ImageMagick-6/policy.xml
# Find and comment out or modify this line:
# <policy domain="coder" rights="none" pattern="PDF" />
# Change to:
# <policy domain="coder" rights="read|write" pattern="PDF" />
# Save and retry conversion
Error: "convert: unable to open image"
Causes and solutions:
# Check file permissions
ls -l input.jpg
chmod 644 input.jpg
# Verify file integrity
identify input.jpg
# Check if format is supported
convert -list format | grep -i jpg
Memory or Performance Issues
# Limit memory usage for large files
convert -limit memory 2GiB -limit map 4GiB large.tiff output.jpg
# Process in smaller chunks
convert large.tiff -define jpeg:extent=2MB output.jpg
# Use progressive JPEG for large files
convert input.png -interlace Plane output.jpg
Color Profile Problems
# Strip problematic color profiles
convert input.jpg -strip output.png
# Apply specific color profile
convert input.jpg -profile sRGB.icc output.jpg
# Convert to standard sRGB
convert input.jpg -colorspace sRGB output.png
Format-Specific Issues
# PNG transparency issues
convert input.png -background white -alpha remove output.jpg
# JPEG orientation problems
convert input.jpg -auto-orient output.jpg
# WebP compatibility
convert input.jpg -define webp:method=6 output.webp
Performance Optimization Tips
Parallel Processing for Batch Operations
# Install GNU Parallel (if not already installed)
sudo apt install parallel
# Convert multiple files simultaneously
find . -name "*.jpg" | parallel convert {} {.}.png
# Limit concurrent jobs
find . -name "*.jpg" | parallel -j 4 convert {} {.}.webp
Optimizing Large File Conversions
# Use streaming for large files
convert -define stream:buffer-size=0 large.tiff output.jpg
# Reduce quality for faster processing
convert -quality 75 large.png output.jpg
# Use specific codecs for speed
convert -quality 85 -sampling-factor 4:2:0 input.png output.jpg
Memory-Efficient Conversions
# Set resource limits
convert -limit memory 1GiB -limit map 2GiB input.tiff output.jpg
# Use disk caching for huge files
convert -define registry:temporary-path=/tmp input.psd output.jpg
ImageMagick vs Alternative Tools
| Tool | Best For | Pros | Cons |
|---|---|---|---|
| ImageMagick | General conversions, automation | Universal format support, powerful scripting | Can be slower for simple tasks |
| ffmpeg | Video/GIF conversions | Excellent for animation | Overkill for static images |
| GraphicsMagick | High-performance batch | Faster than ImageMagick | Less format support |
| GIMP | Manual editing | GUI interface | Not suitable for automation |
| libvips | Large image processing | Very fast, low memory | Steeper learning curve |
Practical Real-World Examples
Web Optimization Workflow
# Convert and optimize all product images for web
find ./products -name "*.png" -exec convert {} \
-strip \
-quality 85 \
-resize 1920x \
-format jpg \
./optimized/{} \;
Creating Thumbnails
# Generate thumbnails for all images
for img in *.jpg; do
convert "$img" -resize 300x300^ -gravity center -extent 300x300 "thumb_$img"
done
Photo Archive Conversion
# Convert old TIFF archives to space-efficient JPEGs
find ./archive -name "*.tiff" | parallel \
'convert {} -quality 92 -strip {.}.jpg && rm {}'
Watermark Application During Conversion
# Add watermark while converting format
convert input.png \
-gravity southeast \
-pointsize 20 \
-fill white \
-annotate +10+10 'Β© 2025' \
output.jpg
Scripting ImageMagick Conversions
Basic Bash Script for Automated Conversion
#!/bin/bash
# convert_images.sh - Batch image converter
INPUT_DIR="./originals"
OUTPUT_DIR="./converted"
FORMAT="webp"
QUALITY=90
# Create output directory
mkdir -p "$OUTPUT_DIR"
# Convert all images
for img in "$INPUT_DIR"/*.{jpg,jpeg,png}; do
[ -f "$img" ] || continue
filename=$(basename "$img")
base="${filename%.*}"
echo "Converting: $filename"
convert "$img" \
-quality "$QUALITY" \
-strip \
"$OUTPUT_DIR/${base}.$FORMAT"
done
echo "Conversion complete!"
Python Script with ImageMagick
#!/usr/bin/env python3
import subprocess
import os
from pathlib import Path
def convert_images(input_dir, output_format='png', quality=90):
"""Convert all images in directory to specified format"""
input_path = Path(input_dir)
for img_file in input_path.glob('*.jpg'):
output_file = img_file.with_suffix(f'.{output_format}')
cmd = [
'convert',
str(img_file),
'-quality', str(quality),
'-strip',
str(output_file)
]
subprocess.run(cmd, check=True)
print(f"Converted: {img_file.name} β {output_file.name}")
if __name__ == "__main__":
convert_images('./images', output_format='webp', quality=85)
Format Conversion Best Practices
Choosing the Right Output Format
JPEG when:
- Photographs or complex images with many colors
- File size is a primary concern
- Slight quality loss is acceptable
- No transparency is needed
PNG when:
- Graphics, logos, or text-heavy images
- Transparency is required
- Lossless quality is essential
- Web graphics with sharp edges
WebP when:
- Modern web applications
- Need both compression and quality
- Browser compatibility is acceptable
- Want smaller file sizes than JPEG
GIF when:
- Simple animations
- Images with very few colors
- Legacy system compatibility required
Quality Guidelines
# Photography (prioritize quality)
convert photo.raw -quality 95 photo.jpg
# Web graphics (balance quality/size)
convert graphic.png -quality 85 graphic.jpg
# Thumbnails (prioritize size)
convert image.jpg -quality 70 -resize 200x thumbnail.jpg
# Print materials (maximum quality)
convert source.png -quality 100 -density 300 print.tiff
Checking Conversion Results
Verify Output Quality
# Display image information
identify -verbose output.jpg
# Check file size
ls -lh output.jpg
# Compare before and after
identify -format "%f: %wx%h %b\n" input.png output.jpg
# Visual comparison (requires X11)
display input.png output.jpg
Batch Quality Check
# Check all converted files
for img in converted/*.jpg; do
echo "$(basename $img): $(identify -format '%wx%h %Q' $img)"
done
# Find files above size threshold
find converted/ -name "*.jpg" -size +500k -exec ls -lh {} \;
Additional ImageMagick Conversion Features
Color Space Conversions
# Convert to grayscale
convert color.jpg -colorspace Gray grayscale.jpg
# Convert to CMYK for print
convert rgb.jpg -colorspace CMYK print.tiff
# Convert to specific color profile
convert input.jpg -profile AdobeRGB1998.icc output.jpg
Metadata Preservation
# Keep EXIF data during conversion
convert -auto-orient input.jpg output.png
# Copy specific metadata
convert input.jpg -set comment "Copyright 2025" output.png
# Transfer all metadata
exiftool -TagsFromFile input.jpg output.png
Conclusion
ImageMagick provides a comprehensive, efficient solution to convert images in Linux terminal environments. From simple single-file transformations to complex batch operations with quality optimization, the convert and mogrify commands handle virtually any conversion scenario you'll encounter when working with images in the Linux terminal.
Key takeaways:
- Use
convertfor single file conversions with full control - Use
mogrifyfor batch operations with consistent settings - Always specify quality settings to control output size and fidelity
- Leverage shell scripting for automated, repeatable workflows
- Apply appropriate optimization based on target usage (web, print, archive)
Next steps:
- Experiment with quality settings to find optimal balance for your use case
- Create custom scripts for your specific workflow requirements
- Explore ImageMagick's extensive manipulation capabilities beyond conversion
- Consider parallel processing tools like GNU Parallel for large-scale operations
With these techniques, you can efficiently manage image format conversions as part of professional Linux workflows, whether for web development, digital asset management, or media production pipelines.
Related Commands:
identify- Display image format and propertiesmogrify- Batch image modification and conversioncompare- Visually compare two imagesmontage- Create composite images from multiple filesstream- Process portions of large images efficiently
Further Reading:
- ImageMagick official documentation
- ImageMagick usage examples
- Format-specific conversion guides in ImageMagick docs
Ready to Master Linux Like a Pro?
If you found this ImageMagick guide helpful, you're ready for the next level. Linux Mastery 100 is our comprehensive training program designed to transform you from a Linux user into a Linux expert.
π― What You'll Master:
- Advanced command-line techniques and automation
- System administration and server management
- Shell scripting for real-world problem solving
- Network configuration and security hardening
- Performance optimization and troubleshooting
π Start Your Linux Mastery Journey β
Join thousands of Linux professionals who've accelerated their careers with our proven training system.