Laravel Usage Examples

Learn how to use the HTML to Image API in your Laravel application using Laravel’s HTTP facade.

Setup

Add your API key to your .env file:

HTML2IMG_API_KEY=your-api-key

HTML to Image Example

Here’s a simple example of converting HTML to an image using Laravel’s HTTP facade:

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;

public function generateImage()
{
    $response = Http::withHeaders([
        'X-API-Key' => env('HTML2IMG_API_KEY')
    ])->post('https://app.html2img.com/api/html', [
        'html' => '<div style="padding: 20px; background: #f0f0f0;">
            <h1>Hello from Laravel!</h1>
            <p>Generated at ' . now() . '</p>
        </div>',
        'css' => 'h1 { color: #2563eb; } p { color: #4b5563; }',
        'width' => 800,
        'height' => 600
    ]);

    if ($response->successful()) {
        Storage::disk('public')->put(
            'images/output.png', 
            $response->body()
        );
        
        return response()->json([
            'success' => true,
            'url' => Storage::url('images/output.png')
        ]);
    }

    return response()->json([
        'success' => false,
        'message' => $response->json('message', 'Unknown error')
    ], $response->status());
}

Screenshot Example

Taking a screenshot of a webpage is just as simple:

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;

public function takeScreenshot()
{
    $response = Http::withHeaders([
        'X-API-Key' => env('HTML2IMG_API_KEY')
    ])->post('https://app.html2img.com/api/screenshot', [
        'url' => 'https://example.com',
        'width' => 1200,
        'height' => 800,
        'dpi' => 2,
        'fullpage' => true
    ]);

    if ($response->successful()) {
        Storage::disk('public')->put(
            'images/screenshot.png', 
            $response->body()
        );
        
        return response()->json([
            'success' => true,
            'url' => Storage::url('images/screenshot.png')
        ]);
    }

    return response()->json([
        'success' => false,
        'message' => $response->json('message', 'Unknown error')
    ], $response->status());
}

Using with Blade Views

You can also generate images from Blade views:

public function generateFromView()
{
    $html = view('emails.invoice', [
        'order' => Order::find(1)
    ])->render();

    $response = Http::withHeaders([
        'X-API-Key' => env('HTML2IMG_API_KEY')
    ])->post('https://app.html2img.com/api/html', [
        'html' => $html,
        'width' => 800,
        'height' => 600
    ]);

    if ($response->successful()) {
        return Storage::disk('public')->put(
            'images/invoice.png', 
            $response->body()
        );
    }

    return response()->json([
        'error' => $response->json('message', 'Unknown error')
    ], $response->status());
}

Remember to run php artisan storage:link to make the storage directory publicly accessible.