nayzawoo/pdf-to-image

Convert PDF pages to JPG/PNG images using libvips

Maintainers

Package info

github.com/nayzawoo/pdf-to-image

pkg:composer/nayzawoo/pdf-to-image

Statistics

Installs: 17

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v2.0.0 2026-06-05 05:25 UTC

This package is auto-updated.

Last update: 2026-06-05 05:32:24 UTC


README

Tests License

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

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 at 0). Default is 0.
  • dpi (int): The rendering resolution (dots per inch). Higher values result in higher quality and larger image sizes. Default is 300.
  • n (int): The number of pages to load. Default is 1.
  • all_pages (bool): If set to true, it overrides n and 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 is 75.
  • strip (bool): Strip all metadata profiles from the image. Default is false.
  • optimize_coding (bool): Compute optimal Huffman coding tables. Default is false.
  • interlace (bool): Save as progressive JPEG. Default is false.

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 is 6.
  • interlace (bool): Save using Adam7 interlacing. Default is false.

License

This project is licensed under the MIT License. See LICENSE for details.