trisnawan/image-resizer

Resizer, Thumbnailer, Cropper Image with PHP Imagick

Maintainers

Package info

github.com/trisnawan/image-resizer

pkg:composer/trisnawan/image-resizer

Transparency log

Statistics

Installs: 83

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v2.0.0 2026-07-13 04:42 UTC

This package is auto-updated.

Last update: 2026-08-13 04:48:33 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";

// 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);

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);

$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.

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, accepts 0..1 or 1..100.
  • $color: optional hex color such as #ffffff or #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');