PHP code example of tekkenking / tinypeexi
1. Go to this page and download the library: Download tekkenking/tinypeexi library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tekkenking / tinypeexi example snippets
use Tekkenking\TinyPeexi\Facades\TinyPeexi;
// Upload an image
$asset = TinyPeexi::upload($request->file('photo'));
// Generate a 400px wide WebP variant
$variant = TinyPeexi::variant($asset->sha)
->resize(400)
->format('webp')
->quality(80)
->generate();
// Get the public URL
echo $variant->url();
// => http://localhost:8080/a/dev/abc123.../w400.webp
$asset = TinyPeexi::upload($request->file('image'));
echo $asset->sha; // "a1b2c3d4e5f6..."
$asset = TinyPeexi::upload('/path/to/local/image.png');
echo $asset->sha;
$files = $request->file('gallery_images'); // Array of UploadedFile
$assets = TinyPeexi::uploadMany($files);
foreach ($assets as $asset) {
echo $asset->sha . "\n";
}
TinyPeexi::delete($sha);
$variant = TinyPeexi::variant($sha)
->resize(800)
->format('jpeg')
->quality(85)
->generate();
echo $variant->url();
$variant = TinyPeexi::variant($sha)
->resize(800, 600) // width, height
->fit('cover') // crop to fill
->generate();
$variant = TinyPeexi::variant($sha)
->resize(400)
->dpr(2.0) // Outputs 800px wide for retina displays
->generate();
$variant = TinyPeexi::variant($sha)
->resize(400, 400)
->fit('cover')
->crop('face') // AI-powered face detection crop
->generate();
$variant = TinyPeexi::variant($sha)
->cropRect(100, 50, 600, 400) // x, y, width, height
->generate();
$variant = TinyPeexi::variant($sha)
->trim(25) // threshold 0-255
->generate();
// Rotate 90 degrees clockwise
$variant = TinyPeexi::variant($sha)
->rotate(90)
->generate();
// Flip horizontally (mirror)
$variant = TinyPeexi::variant($sha)
->flip('h')
->generate();
// Auto-fix EXIF orientation
$variant = TinyPeexi::variant($sha)
->autoOrient()
->generate();
$variant = TinyPeexi::variant($sha)
->resize(800)
->blur(5.0) // Gaussian blur (0.3 - 1000.0)
->sharpen(1.5) // Sharpen (0.5 - 10.0)
->brightness(1.2) // Brightness (0.1 - 10.0)
->contrast(1.1) // Contrast (0.1 - 10.0)
->saturation(1.5) // Saturation (0.0 - 2.0)
->generate();
$variant = TinyPeexi::variant($sha)
->grayscale()
->format('jpeg')
->generate();
$variant = TinyPeexi::variant($sha)
->format('jpeg')
->ecommerce() // Flag as e-commerce operation
->canvas(1024) // 1024×1024 square canvas
->resize(800) // Product fits within 800px
->pad(40) // 40px breathing room
->background('white') // Clean white background
->quality(90)
->generate();
echo $variant->url();
// => http://localhost:8080/a/dev/abc123.../w800.jpg
$variant = TinyPeexi::variant($sha)->ecommerceVariant();
// Uses defaults from config: canvas=1024, pad=40, bg=white, jpeg, q=85
$variant = TinyPeexi::variant($sha)->ecommerceVariant(
canvasSize: 800,
padding: 20,
background: 'transparent',
format: 'png',
quality: 100,
);
$variant = TinyPeexi::variant($sha)
->removeBg() // Remove background via AI
->canvas(1024)
->pad(40)
->background('white')
->format('jpeg')
->quality(90)
->generate();
// First, upload your watermark image (do this once)
$watermark = TinyPeexi::upload('/path/to/watermark.png');
// Then apply it to any variant
$variant = TinyPeexi::variant($sha)
->resize(1200)
->watermark(
assetSha: $watermark->sha,
position: 'bottomright',
opacity: 0.5,
scale: 0.15,
)
->generate();
// In config/tinypeexi.php
'defaults' => [
'thumbnail' => [
'width' => 200,
'height' => 200,
'fit' => 'cover',
'crop' => 'center',
'format' => 'webp',
'quality' => 80,
],
]
$variant = TinyPeexi::variant($sha)
->preset('thumbnail')
->generate();
TinyPeexi::variant($sha)->batch(
sizes: [400, 800, 1200],
format: 'webp',
);
// Queues: w400.webp, w800.webp, w1200.webp
return [
// === REQUIRED ===
'api_url' => env('TINYPEEXI_API_URL', 'http://localhost:8080'),
'delivery_url' => env('TINYPEEXI_DELIVERY_URL', env('TINYPEEXI_API_URL', 'http://localhost:8080')),
'tenant_slug' => env('TINYPEEXI_TENANT_SLUG', 'dev'),
'api_key' => env('TINYPEEXI_API_KEY', ''),
// === ADVANCED (optional) ===
'advanced' => [
'timeout' => env('TINYPEEXI_TIMEOUT', 10), // seconds
'retries' => env('TINYPEEXI_RETRIES', 3),
'retry_delay' => env('TINYPEEXI_RETRY_DELAY', 500), // ms
'upload' => [
'max_filesize_bytes' => env('TINYPEEXI_MAX_UPLOAD_SIZE', 26214400), // 25MB
'allowed_mimes' => ['image/jpeg', 'image/png', 'image/webp', 'image/avif', 'image/gif'],
'strip_metadata' => env('TINYPEEXI_STRIP_METADATA', true),
'auto_optimize' => env('TINYPEEXI_AUTO_OPTIMIZE', false),
],
],
// === PRESETS (optional) ===
'defaults' => [
'ecommerce' => [
'canvas' => 1024, 'pad' => 40, 'background' => 'white',
'format' => 'jpeg', 'quality' => 85,
],
'thumbnail' => [
'width' => 200, 'height' => 200, 'fit' => 'cover',
'crop' => 'center', 'format' => 'webp', 'quality' => 80,
],
],
];
// In a Controller
public function updateAvatar(Request $request)
{
$request->validate(['avatar' => 'ariant = TinyPeexi::variant($asset->sha)
->resize(200, 200)
->fit('cover')
->crop('face')
->format('webp')
->quality(80)
->generate();
auth()->user()->update(['avatar_url' => $variant->url()]);
return back()->with('success', 'Avatar updated!');
}
public function storeProduct(Request $request)
{
$request->validate(['photo' => 'ct shot with white background
$main = TinyPeexi::variant($asset->sha)->ecommerceVariant();
// Also create a thumbnail
$thumb = TinyPeexi::variant($asset->sha)
->preset('thumbnail')
->generate();
Product::create([
'name' => $request->name,
'image_sha' => $asset->sha,
'image_url' => $main->url(),
'thumbnail_url' => $thumb->url(),
]);
return redirect()->route('products.index');
}
$asset = TinyPeexi::upload($request->file('hero'));
// Generate multiple sizes for responsive <picture> element
TinyPeexi::variant($asset->sha)->batch(
sizes: [400, 800, 1200, 1600],
format: 'webp',
);
// In your Blade template:
// <picture>
// <source srcset="/a/dev/{sha}/w400.webp 400w,
// /a/dev/{sha}/w800.webp 800w,
// /a/dev/{sha}/w1200.webp 1200w,
// /a/dev/{sha}/w1600.webp 1600w"
// type="image/webp">
// </picture>
$watermarkAsset = TinyPeexi::upload('/path/to/blog-watermark.png');
$asset = TinyPeexi::upload($request->file('blog_image'));
$variant = TinyPeexi::variant($asset->sha)
->resize(1200)
->format('jpeg')
->quality(85)
->watermark(
assetSha: $watermarkAsset->sha,
position: 'bottomright',
opacity: 0.3,
scale: 0.1,
)
->generate();
use Tekkenking\TinyPeexi\Exceptions\TinyPeexiException;
try {
$asset = TinyPeexi::upload($request->file('image'));
} catch (TinyPeexiException $e) {
Log::error('TinyPeexi upload failed', [
'message' => $e->getMessage(),
'code' => $e->getCode(),
]);
return back()->withErrors(['image' => 'Image upload failed. Please try again.']);
}
use Tekkenking\TinyPeexi\Facades\TinyPeexi;
use Tekkenking\TinyPeexi\DTOs\AssetDto;
TinyPeexi::shouldReceive('upload')
->once()
->andReturn(new AssetDto('fake_sha_256_hash'));
bash
php artisan vendor:publish --provider="Tekkenking\TinyPeexi\TinyPeexiServiceProvider"
bash
php artisan tinypeexi:migrate \
--path="/var/www/uploads/2023|/var/www/uploads/2024" \
--ext="jpg|png|webp" \
--starts-with="product_|user_" \
--variants="w800,h800|w200" \
--batch=50