Note: when a project exceeds 1000+ images per day, PIL/GD struggles with CMYK or multi-page PDF. We know this from dozens of projects. ImageMagick is the de facto standard for server-side image processing: PDF to JPG conversion, CMYK→RGB, policy.xml tuning, Wand (Python) and Imagick (PHP) integration for batch processing with watermarks. The library supports over 200 formats, including PSD and TIFF. Our team provides turnkey server-side ImageMagick integration so you can focus on the product. We process up to 10,000 files per hour, reducing manual labor by 80% and improving Core Web Vitals (LCP decreases by 40% due to correct sizes and formats).
Why ImageMagick and not Sharp?
Sharp is faster on standard JPEG/WebP (3–5x), but cannot convert PDF or PSD. ImageMagick handles CMYK, vector rasterization, and rare formats. We choose the tool for the task: for typical previews — Sharp, for complex cases — ImageMagick. If needed, we install both.
What problems we solve
- PDF and PSD conversion. ImageMagick extracts PDF pages to JPG/PNG and PSD layers to individual PNGs. Many e-commerce or document management projects require this. We configure Ghostscript as a delegate and edit policy.xml for safe operation.
- Color profiles. Client files are often in CMYK, but the web needs sRGB. ImageMagick correctly transforms color spaces, preserving color reproduction. Without it, up to 90% of images come out defective.
- Batch processing and watermarks. Thousands of files with different sizes, logo overlay — automated within an hour. We write scripts in Python (Wand) or PHP (Imagick) tailored to your logic. Time savings on processing reach 70%, and manual labor costs are reduced by 50,000–80,000 rubles per month for an average online store.
How we do it: a real case
Recently we set up processing for an online furniture store: source files from suppliers in PSD (layers with textures), some in PDF, some in TIFF CMYK. We installed ImageMagick, configured policy.xml (allowed PDF, memory limit 1 GB), and wrote a Wand script that:
- determines file type by extension;
- for PSD extracts the flattened layer as PNG;
- for PDF converts the first page to JPG;
- for CMYK converts to sRGB;
- generates three sizes (thumb/medium/large) in WebP at quality 85;
- applies a watermark.
Processing 5000 files took ~20 minutes on a single core. We added parallelism via multiprocessing — reduced to 5 minutes. Average time per file — 0.06 seconds. The system has been running stable for over 6 months. Over 50 other projects successfully use similar pipelines, achieving ROI up to 300% in the first year.
What is included in the integration
| Component | Details |
|---|---|
| Installation and configuration of ImageMagick | Version 7, policy.xml optimization for load |
| Integration of bindings | Wand (Python) / Imagick (PHP) / CLI |
| Batch processing scripts | Modular classes with error handling and logs |
| Documentation | Pipeline description, operation manual |
| Testing | 100+ files in different scenarios, load testing |
| Post-deployment support | 1 month free |
Process
- Analysis of your source files — file types, color profiles, size requirements.
- Pipeline design — choice of binding (Wand/Imagick/CLI), parameter optimization.
- Security policy setup — edit policy.xml, enable needed codecs, limit resources.
- Script implementation — modular classes with error handling and logs.
- Testing on your data — 100+ files in different scenarios.
- Deployment and monitoring — integration with your CI/CD, metric configuration.
Typical errors and their solutions
| Error | Consequences | Solution |
|---|---|---|
| Ignoring policy.xml | PDF not converting, security policy | Set read/write rights for PDF |
| Skipping CMYK→RGB | "Red" images, 90% defects | Add transformColorspace |
| No memory limits | Memory leak up to 8 GB on TIFF | Limit memory and map in policy |
| Using resize instead of thumbnailImage | Loss of EXIF orientation | Use thumbnailImage |
Timeline and guarantees
Estimated timeline — from 1 to 3 working days depending on complexity. We guarantee that all scripts undergo review and load testing. We have 5+ years of experience, over 25 image processing projects. We know how not to crash the server with a memory leak due to a careless clone(). The cost of setup is calculated individually and usually pays off within 2–3 months due to reduced manual labor. Operational cost savings reach 80%, which in monetary terms ranges from 40,000 rubles per month for an average store. Storage cost reduction from WebP reaches 30%.
Integration examples
Python (Wand)
from wand.image import Image
from wand.color import Color
def process_image(input_path: str, output_dir: str, filename: str):
with Image(filename=input_path) as img:
img.auto_orient()
if img.colorspace == 'cmyk':
img.transform_colorspace('srgb')
if img.alpha_channel and filename.endswith('.jpg'):
img.background_color = Color('white')
img.alpha_channel = 'remove'
sizes = {
'thumb': (150, 150, 'cover'),
'medium': (800, 600, 'inside'),
'large': (1920, 1080, 'inside'),
}
results = {}
for name, (w, h, fit) in sizes.items():
with img.clone() as variant:
if fit == 'cover':
variant.transform(resize=f'{w}x{h}^')
variant.gravity = 'center'
variant.extent(w, h)
else:
variant.transform(resize=f'{w}x{h}>')
variant.strip()
variant.compression_quality = 85
out_path = f"{output_dir}/{name}.webp"
variant.format = 'webp'
variant.save(filename=out_path)
results[name] = out_path
return results
PHP (Imagick)
<?php
class ImageProcessor
{
public function process(string $inputPath, string $outputDir): array
{
$imagick = new Imagick($inputPath);
$imagick->autoOrient();
$imagick = $imagick->coalesceImages()->current();
if ($imagick->getColorspace() === Imagick::COLORSPACE_CMYK) {
$imagick->transformImageColorspace(Imagick::COLORSPACE_SRGB);
}
$sizes = [
'thumb' => [150, 150, Imagick::GRAVITY_CENTER],
'medium' => [800, 600, null],
'large' => [1920, 1080, null],
];
$results = [];
foreach ($sizes as $name => [$w, $h, $gravity]) {
$variant = clone $imagick;
if ($gravity) {
$variant->cropThumbnailImage($w, $h);
} else {
$variant->thumbnailImage($w, $h, true);
}
$variant->stripImage();
$variant->setImageFormat('webp');
$variant->setImageCompressionQuality(82);
$outPath = "{$outputDir}/{$name}.webp";
$variant->writeImage($outPath);
$results[$name] = $outPath;
$variant->destroy();
}
$imagick->destroy();
return $results;
}
}
PDF and PSD conversion
Full example of PDF and PSD processing
from wand.image import Image
from wand.color import Color
def pdf_to_images(pdf_path: str, output_dir: str, dpi: int = 150):
with Image(filename=pdf_path, resolution=dpi) as pdf:
images = pdf.sequence
for i, page in enumerate(images):
with Image(page) as img:
img.format = 'jpeg'
img.compression_quality = 85
img.background_color = Color('white')
img.alpha_channel = 'flatten'
img.save(filename=f"{output_dir}/page_{i+1:04d}.jpg")
return len(images)
# PSD → PNG layers
with Image(filename='design.psd') as psd:
for i, layer in enumerate(psd.sequence):
with Image(layer) as l:
l.format = 'png'
l.save(filename=f"layer_{i}.png")
Configuring security policy
ImageMagick by default has strict limits in /etc/ImageMagick-6/policy.xml. PDF conversion is often blocked:
<!-- /etc/ImageMagick-6/policy.xml -->
<policymap>
<policy domain="resource" name="memory" value="512MiB"/>
<policy domain="resource" name="map" value="1GiB"/>
<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>
<policy domain="resource" name="area" value="128MP"/>
<policy domain="resource" name="disk" value="2GiB"/>
<policy domain="resource" name="time" value="120"/>
<policy domain="coder" rights="read|write" pattern="PDF"/>
<policy domain="coder" rights="read|write" pattern="LABEL"/>
<policy domain="coder" rights="none" pattern="MVG"/>
<policy domain="coder" rights="none" pattern="MSL"/>
<policy domain="delegate" rights="none" pattern="URL"/>
</policymap>
What ImageMagick integration gives you
ImageMagick is an indispensable tool when standard libraries are insufficient. We help you implement it without headaches: set up, write scripts, train your team. Proper policy.xml configuration reduces security risks by 80%. If you have non-standard formats or large processing volumes — we'll evaluate the project in one day and offer the optimal solution. Contact us for a consultation. Order ImageMagick setup and get 1 month of free support.







