trisnawan / image-resizer
Resizer, Thumbnailer, Cropper Image with PHP Imagick
Requires
- php: >=7.4.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-12 15:57:37 UTC
README
Resize, crop, convert, and watermark images using either Imagick or GD with the same API.
Instalation
composer require trisnawan/image-resizer
Initialization
use Trisnawan\ImageResizer\ImageResizer;
// Image from user upload $filePath = $_FILES["image"]["tmp_name"]; // Image from local storage $filePath = "path/to/image_file.jpg"; // Image from a remote URL (http / https) $filePath = "https://example.com/image_file.jpg"; // Default library: Imagick $resizer = new ImageResizer($filePath); // Explicit Imagick $resizer = new ImageResizer($filePath, 'imagick'); // Use GD $resizer = new ImageResizer($filePath, 'gd'); // Optional PDF render resolution in DPI $resizer = new ImageResizer($filePath, 'imagick', 300);
Image Source from URL
Pass an http:// or https:// URL instead of a file path and the file is downloaded automatically by both GD and Imagick.
// GD $resizer = new ImageResizer('https://example.com/image_file.jpg', 'gd'); $resizer->maxWidth(640); $resizer->writeImage('thumbnails/image_file.jpg'); // Imagick $resizer = new ImageResizer('https://example.com/image_file.jpg', 'imagick'); $blob = $resizer->getBlob();
Notes:
- Downloads use cURL when the extension is available, and fall back to PHP streams (
allow_url_fopen). - The default timeout is 10 seconds. Redirects are followed up to 5 hops, and redirects to non-HTTP(S) schemes are rejected.
- The image format is detected from the downloaded content, so URLs without a file extension also work.
- Non-2xx HTTP responses throw a
RuntimeException. - Keep in mind that any caller-controlled URL can target internal hosts (SSRF). Validate or allow-list user supplied URLs in your own application.
PDF Source
// Automatically load the first page of a PDF $resizer = new ImageResizer('../folder/file.pdf'); // Load page 2 from a PDF $resizer = new ImageResizer('../folder/file.pdf[2]'); // Render a PDF page with higher resolution for sharper output $resizer = new ImageResizer('../folder/file.pdf[2]', 'imagick', 300); // If GD is selected for a PDF, the library automatically falls back to Imagick $resizer = new ImageResizer('../folder/file.pdf', 'gd', 300); // PDF over HTTP is supported by Imagick (GD falls back to Imagick) $resizer = new ImageResizer('https://example.com/file.pdf'); $resizer = new ImageResizer('https://example.com/file.pdf[2]', 'imagick', 300);
$pdfResolution is optional and only affects PDF sources. The default value is 150 DPI.
PDF page numbers in the path use one-based numbering, so [1] is the first page and [2] is the second page.
Remote PDF files are downloaded to a temporary file, rendered, and the temporary file is removed afterwards.
Resize Image
Use the maximum pixels and the image will be automatically reduced to the maximum size.
// Max Width in pixels $maxWidth = 640; $resizer->maxWidth($maxWidth);
Crop Image
// Crop the image into a square from the center $resizer->cropCenter(); // Crop the image into a square from the top $resizer->cropTop();
Add Text Watermark
// Basic watermark with automatic bottom-right placement $resizer->createWatermark('© My Brand'); // Manual position $resizer->createWatermark('© My Brand', 20, 40); // Manual position with custom size, opacity, and color $resizer->createWatermark('© My Brand', 20, 40, 24, 0.45, '#ffffff'); // Opacity also accepts percent values $resizer->createWatermark('© My Brand', null, null, 18, 55, '#f5f5f5');
Parameter summary:
$text: watermark text.$x: horizontal position. If omitted, the watermark is placed automatically at the bottom-right.$y: vertical position. If omitted, the watermark is placed automatically at the bottom-right.$size: optional text size.$opacity: optional opacity, accepts0..1or1..100.$color: optional hex color such as#ffffffor#fff.
GD uses TrueType text automatically when a common system font is available, and falls back to the built-in GD bitmap font otherwise.
Save to Local Storage
// Keep the original format if the extension is the same $saveFilePath = "path/to/image_new.jpg"; $resizer->writeImage($saveFilePath); // Convert output format based on the target extension $resizer->writeImage('path/to/image_new.webp'); $resizer->writeImage('path/to/image_new.png');
If the output filename has no extension, the original image format is used.
Show Blob Image
// Show in blob $blob = $resizer->getBlob();
Full Example
use Trisnawan\ImageResizer\ImageResizer; $filePath = $_FILES["image"]["tmp_name"]; $resizer = new ImageResizer($filePath, 'gd'); $resizer->maxWidth(1280); $resizer->cropCenter(); $resizer->createWatermark('© My Brand', null, null, 20, 0.5, '#ffffff'); $resizer->writeImage('uploads/profile.webp');