This is a comment on ImageMagick Support for PHP Thumb Library, posted by WikiAdmin at 06/11/2026 00:33
View source for Example Analysis and Fixes for PHPThumb Library
=== Issues Found ===
#|
*| File | Issue |*
|| All files | Wrong relative paths to resources (##../tests/resources/## should be ##../../resources/##) ||
|| ##image_filter.php## | Wrong argument format for ##IMG_FILTER_COLORIZE## ||
|| ##remote_image_resize.php## | Invalid GitHub URL (points to HTML page, not raw image) ||
|| ##crop_basic_fromstring.php## | Missing autoloader, wrong file path ||
|| ##rotate_basic.php## | Comment mentions non-existent ##rotate()## method ||
|| ##save_differentformat.php## | Saves to current directory without verification ||
|| All | Missing Imagick examples ||
|#
=== Fixed Examples ===
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Basic Crop
*
* Demonstrates basic cropping functionality
*
* @see \PHPThumb\GD::crop()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
// Load the test image
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Crop starting at x=100, y=100 with width=300 and height=200
$thumb->crop(100, 100, 300, 200);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Crop from String
*
* Demonstrates loading an image from a string (e.g., database BLOB)
*
* @see \PHPThumb\GD::getImageAsString()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
// Load image file into string (simulating database retrieval)
$fileData = file_get_contents(__DIR__ . '/../../resources/test.jpg');
if ($fileData === false) {
throw new RuntimeException('Could not read image file');
}
// Create thumbnail from string data
$thumb = new GD($fileData);
$thumb->crop(100, 100, 300, 200);
// Get the processed image as string for storage
$imageAsString = $thumb->getImageAsString();
?>
<!DOCTYPE html>
<html>
<head>
<title>Crop from String Example</title>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
.image-container {
border: 1px solid #e4e4e4;
padding: 10px;
display: inline-block;
margin: 10px 0;
}
</style>
</head>
<body>
<h2>Processed Image Data</h2>
<p><strong>Note:</strong> Raw image data (shown as gibberish below)</p>
<div class="image-container">
<div style="overflow: auto; width: 500px; height: 400px;"><?php echo htmlentities($imageAsString); ?></div>
</div>
<h2>Image Preview</h2>
<div class="image-container">
<img src="data:image/jpeg;base64,<?php echo base64_encode($imageAsString); ?>" alt="Cropped image" />
</div>
<p>Image data length: <?php echo strlen($imageAsString); ?> bytes</p>
</body>
</html>
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Crop from Center
*
* Demonstrates center-based cropping
*
* @see \PHPThumb\GD::cropFromCenter()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Crop 200x100 from center
$thumb->cropFromCenter(200, 100);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Crop with Padding
*
* Demonstrates padding an image to specific dimensions
*
* @see \PHPThumb\GD::pad()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Pad to 1024x350 with olive green color [192, 212, 45]
$thumb->pad(1024, 350, [192, 212, 45]);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Image Filters
*
* Demonstrates various GD image filters
*
* @see https://www.php.net/manual/en/function.imagefilter.php
* @see \PHPThumb\GD::imageFilter()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Apply colorize filter: red=160, green=20, blue=20
// The filter applies a color overlay to the image
$thumb->imageFilter(IMG_FILTER_COLORIZE, 160, 20, 20, 0);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Reflection Effect
*
* Demonstrates the reflection plugin
*
* @see \PHPThumb\Plugins\Reflection
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
use PHPThumb\Plugins\Reflection;
$thumb = new GD(
__DIR__ . '/../../resources/test.jpg',
[],
[
new Reflection(
percent: 40, // 40% of original included in reflection
reflection: 40, // 40% of original height for reflection
white: 80, // 80% white (20% transparent at bottom)
border: true, // Add border
borderColor: '#a4a4a4' // Gray border
)
]
);
$thumb->adaptiveResize(250, 250);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Remote Image Resize
*
* Demonstrates loading and resizing a remote image
*
* @see \PHPThumb\GD::resize()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
// Use a reliable remote image URL (raw content, not HTML page)
$thumb = new GD('https://raw.githubusercontent.com/PHPThumb/PHPThumb/master/examples/test.jpg');
$thumb->resize(200, 200);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Adaptive Resize
*
* Demonstrates adaptive resizing (resize to fit, then crop excess from center)
*
* @see \PHPThumb\GD::adaptiveResize()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Resize to fit within 175x175, cropping excess from center
$thumb->adaptiveResize(175, 175);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Adaptive Resize with Quadrant
*
* Demonstrates adaptive resizing with specific crop quadrant
*
* Quadrants: T (top), B (bottom), L (left), R (right), C (center)
*
* +---+---+---+
* | | T | |
* +---+---+---+
* | L | C | R |
* +---+---+---+
* | | B | |
* +---+---+---+
*
* @see \PHPThumb\GD::adaptiveResizeQuadrant()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Resize to 300x300, cropping to center quadrant
$thumb->adaptiveResizeQuadrant(300, 300, 'C');
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Adaptive Resize with Quadrant (Left)
*
* Demonstrates adaptive resizing cropping to the left
*
* @see \PHPThumb\GD::adaptiveResizeQuadrant()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Resize to 300x300, keeping the left portion
$thumb->adaptiveResizeQuadrant(300, 300, 'L');
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Basic Resize
*
* Demonstrates basic proportional resizing
*
* @see \PHPThumb\GD::resize()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Resize to fit within 100x100 (proportional)
$thumb->resize(100, 100);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Resize by Percentage
*
* Demonstrates resizing by percentage
*
* @see \PHPThumb\GD::resizePercent()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Resize to 50% of original size
$thumb->resizePercent(50);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Rotation by Degrees
*
* Demonstrates rotation by specific degrees
*
* @see \PHPThumb\GD::rotateImageNDegrees()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Rotate 180 degrees
$thumb->rotateImageNDegrees(180);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Basic Rotation
*
* Demonstrates 90-degree rotation
*
* @see \PHPThumb\GD::rotateImage()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Rotate 90 degrees clockwise
$thumb->rotateImage('CW');
// Alternative: rotate 90 degrees counter-clockwise
// $thumb->rotateImage('CCW');
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Save in Different Format
*
* Demonstrates saving to a different format
*
* @see \PHPThumb\GD::save()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
$thumb->adaptiveResize(300, 300);
// Save as PNG
// Note: The directory must be writable
$outputPath = __DIR__ . '/output/test.png';
// Ensure output directory exists
$outputDir = dirname($outputPath);
if (!is_dir($outputDir)) {
mkdir($outputDir, 0755, true);
}
$thumb->save($outputPath, 'PNG');
echo "Image saved to: " . $outputPath . "\n";
// Display the saved file
$thumb2 = new GD($outputPath);
$thumb2->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Trim Borders
*
* Demonstrates trimming single-color borders
*
* @see \PHPThumb\Plugins\Trim
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
use PHPThumb\Plugins\Trim;
$thumb = new GD(
__DIR__ . '/../../resources/test.jpg',
[],
[
// Trim white borders from all sides
new Trim([255, 255, 255], 'TBLR')
]
);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Watermark
*
* Demonstrates adding a watermark to an image
*
* @see \PHPThumb\Plugins\Watermark
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
use PHPThumb\Plugins\Watermark;
// Create watermark image (20% of original size)
$watermark = new GD(__DIR__ . '/../../resources/test.jpg');
$watermark->resizePercent(20);
// Create main image
$thumb = new GD(
__DIR__ . '/../../resources/test.jpg',
[],
[
// Position watermark in center with 50% opacity
new Watermark($watermark, 'center', 50, 0, 0)
]
);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Watermark Positions
*
* Demonstrates different watermark positions
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
use PHPThumb\Plugins\Watermark;
// Create small watermark
$watermark = new GD(__DIR__ . '/../../resources/test.jpg');
$watermark->resizePercent(15);
// Create main image
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Apply watermark positioned at bottom-right with full opacity
$wm = new Watermark($watermark, 'right-bottom', 80);
$wm->execute($thumb);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Imagick Basic Resize
*
* Demonstrates basic resizing using ImageMagick
*
* @see \PHPThumb\Imagick::resize()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\Imagick;
// Use Imagick for potentially better quality
$thumb = new Imagick(__DIR__ . '/../../resources/test.jpg');
// Resize to fit within 100x100 (proportional)
$thumb->resize(100, 100);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Imagick Adaptive Resize
*
* Demonstrates adaptive resizing using ImageMagick
*
* @see \PHPThumb\Imagick::adaptiveResize()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\Imagick;
$thumb = new Imagick(__DIR__ . '/../../resources/test.jpg');
// Resize to fit within 175x175, cropping excess from center
$thumb->adaptiveResize(175, 175);
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Imagick Save Formats
*
* Demonstrates saving in different formats using ImageMagick
*
* ImageMagick supports many formats including: AVIF, BMP, GIF, HEIC, JPEG, PNG, TIFF, WEBP
*
* @see \PHPThumb\Imagick::save()
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\Imagick;
$thumb = new Imagick(__DIR__ . '/../../resources/test.jpg');
$thumb->adaptiveResize(300, 300);
// Ensure output directory exists
$outputDir = __DIR__ . '/output';
if (!is_dir($outputDir)) {
mkdir($outputDir, 0755, true);
}
// Save in different formats
$formats = ['PNG', 'WEBP', 'JPEG'];
foreach ($formats as $format) {
$extension = strtolower($format);
if ($format === 'JPEG') {
$extension = 'jpg';
}
$outputPath = $outputDir . '/test.' . $extension;
$thumb->save($outputPath, $format);
echo "Saved: {$outputPath}\n";
}
// Display the last saved image
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Chained Operations
*
* Demonstrates chaining multiple operations
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Chain multiple operations
$thumb
->resize(400, 300) // Resize to fit 400x300
->rotateImage('CW') // Rotate 90 degrees clockwise
->cropFromCenter(200) // Crop 200x200 from center
->pad(300, 300, [240, 240, 240]); // Pad to 300x300 with light gray
$thumb->show();
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Quality Settings
*
* Demonstrates adjusting output quality
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
$thumb = new GD(__DIR__ . '/../../resources/test.jpg');
// Set JPEG quality to 75 (lower = smaller file, lower quality)
$thumb->setOptions([
'jpegQuality' => 75,
'resizeUp' => true // Allow upscaling
]);
$thumb->resize(800, 600);
// Save with low quality
$outputPath = __DIR__ . '/output/low_quality.jpg';
$thumb->save($outputPath, 'JPG');
echo "Low quality saved to: {$outputPath}\n";
// Now create high quality version
$thumb2 = new GD(__DIR__ . '/../../resources/test.jpg');
$thumb2->setOptions(['jpegQuality' => 95]);
$thumb2->resize(800, 600);
$outputPath2 = __DIR__ . '/output/high_quality.jpg';
$thumb2->save($outputPath2, 'JPG');
echo "High quality saved to: {$outputPath2}\n";
// Compare file sizes
$size1 = filesize($outputPath);
$size2 = filesize($outputPath2);
echo "Low quality: " . number_format($size1) . " bytes\n";
echo "High quality: " . number_format($size2) . " bytes\n";
%%
%%(hl php)
<?php
/**
* PhpThumb Library Example File - Preserve Transparency
*
* Demonstrates preserving alpha transparency for PNG/GIF
*/
require_once __DIR__ . '/../vendor/autoload.php';
use PHPThumb\GD;
// Test with PNG (supports alpha transparency)
$thumb = new GD(__DIR__ . '/../../resources/test.png');
$thumb->setOptions([
'preserveAlpha' => true,
'alphaMaskColor' => [255, 255, 255] // White background for transparent areas
]);
$thumb->resize(200, 200);
$thumb->show();
%%
=== Summary of Fixes ===
#|
*| Issue | Fix Applied |*
|| Wrong resource paths | Changed ##../tests/resources/## to ##../../resources/## ||
|| Missing autoloader | Added ##require_once __DIR__ . '/../vendor/autoload.php'## ||
|| Invalid remote URL | Changed to raw GitHub URL ||
|| Wrong filter args | Corrected ##imageFilter()## argument order ||
|| Non-writable directories | Added ##mkdir()## for output directories ||
|| Missing Imagick examples | Added ImageMagick-specific examples ||
|| No output directory | Created ##output/## directory before saving ||
|| Documentation errors | Fixed method name references ||
|#
=== File Structure ===
%%
phpthumb/
├── Examples/
│ ├── crop_basic.php
│ ├── crop_basic_fromstring.php
│ ├── crop_fromcenter.php
│ ├── crop_pad.php
│ ├── image_filter.php
│ ├── reflection.php
│ ├── remote_image_resize.php
│ ├── resize_adaptive.php
│ ├── resize_adaptive_quadrant.php
│ ├── resize_adaptive_quadrant_left.php
│ ├── resize_basic.php
│ ├── resize_percentage.php
│ ├── rotate_advanced.php
│ ├── rotate_basic.php
│ ├── save_differentformat.php
│ ├── trim.php
│ ├── watermark.php
│ ├── watermark_positions.php
│ ├── imagick_basic.php
│ ├── imagick_adaptive.php
│ ├── imagick_save_formats.php
│ ├── chained_operations.php
│ ├── quality_settings.php
│ └── preserve_transparency.php
├── resources/
│ ├── test.avif
│ ├── test.bmp
│ ├── test.gif
│ ├── test.heic
│ ├── test.jpg
│ ├── test.png
│ ├── test.tiff
│ └── test.webp
└── output/ (created by examples)
%%