avvertix / html-shot
HTML to image rendering for PHP, powered by Rust and Takumi
Requires
- php: ^8.3
- ext-ffi: *
Requires (Dev)
- laravel/pint: ^1.29
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
- symfony/var-dumper: ^6.4|^7.0|^8.0
README
HTML to image rendering for PHP, powered by Rust and Takumi. Generate Open Graph images and more from HTML/CSS without headless browser overhead.
Features
tbd
HTML & CSS Support
| Input | Behaviour |
|---|---|
<style> tags |
CSS extracted and applied as a stylesheet |
Inline style="..." |
Promoted to a generated CSS class rule |
<img src="..."> |
Local paths and data URIs supported |
CSS background-image: url(...) |
Local paths and data URIs supported |
<br> |
Rendered as a newline |
<html>, <head>, <body> |
Transparent wrappers, stripped |
| All other elements | Rendered as Takumi container nodes (class, id, tagName forwarded) |
Takumi's layout engine supports Flexbox, CSS Grid, tw Tailwind utility classes, and CSS
animations.
Installation
composer require avvertix/html-shot
Requirements
- PHP 8.1 or higher
- FFI extension enabled
ext-ffi| enabled (ffi.enable = trueinphp.ini) |
Quick Example
tbd
Development
git clone https://github.com/avvertix/html-shot.git cd html-shot # Install PHP dependencies composer install # Build the Rust library cd rust && cargo build --release
Build the native library
The Rust library must be compiled for your target platform. A pre-built binary is attached to each GitHub release or you can build your own.
cd vendor/avvertix/html-shot/rust
cargo build --release
Then copy the compiled library to the lib/ directory at the package root:
| Platform | Source | Destination |
|---|---|---|
| Linux | target/release/libhtml_shot.so |
../lib/libhtml_shot.so |
| macOS | target/release/libhtml_shot.dylib |
../lib/libhtml_shot.dylib |
| Windows | target/release/html_shot.dll |
../lib/html_shot.dll |
The C header is auto-generated by cbindgen and written to include/html_shot.h during the build.
Troubleshooting
Enabling ext-ffi
Check whether FFI is active:
php -m | grep FFI
If it is not listed, add the following to your php.ini and restart PHP-FPM / your web server:
extension=ffi ffi.enable=true
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
MIT License - see LICENSE file for details.
Credits
Powered by Takumi