nayzawoo / pdf-to-image
Convert PDF pages to JPG/PNG images using libvips
v2.0.0
2026-06-05 05:25 UTC
Requires
- php: ^8.5
- ext-ffi: *
- jcupitt/vips: ^2.4.0
Requires (Dev)
- phpunit/phpunit: ^12.5.12
README
A high-performance PHP library to convert PDF pages to JPG/PNG images using libvips via php-vips.
Why libvips?
libvips is an extremely fast image processing library with a very low memory footprint. Unlike ImageMagick, it does not load the entire image into memory, making it highly efficient for converting large, multi-page PDFs to images.
Requirements
- libvips C library (installation instructions)
- PHP >= 8.5 (with FFI support enabled)
Installation
Install the package via Composer:
composer require nayzawoo/pdf-to-image
Usage
Basic Example
<?php use NayZawOo\PdfToImage\PDF; // Instantiate the converter with the PDF path and options $pdf = new PDF('source.pdf', [ 'dpi' => 150, ]); // Convert and save $pdf->saveAsImage('output.png');
Get Page Count
Retrieve the total number of pages in the PDF file:
$pageCount = $pdf->getPageCount(); // returns int (e.g. 3)
Options
1. PDF Load Options (Constructor)
Pass load options as an associative array to the second argument of the constructor:
$pdf = new PDF('source.pdf', [ 'page' => 0, // Page index to load (0-indexed) 'dpi' => 300, // Resolution for rendering 'n' => 1, // Number of pages to load 'all_pages' => true // Shortcut to load all pages (sets n to -1) ]);
page(int): The page number to extract (starts at0). Default is0.dpi(int): The rendering resolution (dots per inch). Higher values result in higher quality and larger image sizes. Default is300.n(int): The number of pages to load. Default is1.all_pages(bool): If set totrue, it overridesnand tells libvips to load all pages.
2. Save / Output Options
Pass output options as an associative array to the second argument of saveAsImage():
For JPEG Output (.jpg, .jpeg):
$pdf->saveAsImage('output.jpg', [ 'Q' => 80, // Quality factor (0-100) 'strip' => true, // Strip metadata from output 'optimize_coding' => true, // Optimize Huffman coding tables 'interlace' => true // Progressive JPEG output ]);
Q(int): JPEG quality factor (0–100). Default is75.strip(bool): Strip all metadata profiles from the image. Default isfalse.optimize_coding(bool): Compute optimal Huffman coding tables. Default isfalse.interlace(bool): Save as progressive JPEG. Default isfalse.
For PNG Output (.png):
$pdf->saveAsImage('output.png', [ 'compression' => 6, // Compression level (0-9) 'interlace' => true, // Progressive/interlaced PNG output ]);
compression(int): Zlib compression level (0–9). Default is6.interlace(bool): Save using Adam7 interlacing. Default isfalse.
License
This project is licensed under the MIT License. See LICENSE for details.