https://github.com/serafimarts/ffi-sdl-image
SDL2 Image FFI bindings for the PHP language
https://github.com/serafimarts/ffi-sdl-image
ffi php php-ffi sdl2 sdl2-image
Last synced: 5 months ago
JSON representation
SDL2 Image FFI bindings for the PHP language
- Host: GitHub
- URL: https://github.com/serafimarts/ffi-sdl-image
- Owner: SerafimArts
- License: mit
- Created: 2020-03-22T02:41:44.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-12-04T19:40:44.000Z (over 1 year ago)
- Last Synced: 2024-12-04T20:31:41.431Z (over 1 year ago)
- Topics: ffi, php, php-ffi, sdl2, sdl2-image
- Language: C
- Homepage:
- Size: 1.44 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# FFI SDL Image Bindings
A SDL_image extension FFI bindings for the PHP language compatible with [SDL FFI bindings for the PHP language](https://github.com/SerafimArts/ffi-sdl).
- [System Requirements](#requirements)
- [Installation](#installation)
- [Documentation](#documentation)
- [Initialization](#initialization)
- [Example](#example)
## Requirements
- PHP ^8.1
- ext-ffi
- Windows, Linux, BSD or MacOS
- Android, iOS or something else are not supported yet
- SDL and SDL Image >= 2.0
## Installation
Library is available as composer repository and can be
installed using the following command in a root of your project.
```bash
$ composer require serafim/ffi-sdl-image
```
Additional dependencies:
- Debian-based Linux: `sudo apt install libsdl2-image-2.0-0 -y`
- MacOS: `brew install sdl2_image`
- Window: Can be [downloaded from here](https://github.com/libsdl-org/SDL_image/releases)
## Documentation
The library API completely supports and repeats the analogue in the C language.
- [SDL2 Image official documentation](https://www.libsdl.org/projects/SDL_image/docs/index.html)
## Initialization
In the case that you need a specific SDL instance, it should be passed
explicitly:
```php
$sdl = new Serafim\SDL\SDL(version: '2.28.3');
$image = new Serafim\SDL\Image\Image(sdl: $sdl);
// If no argument is passed, the latest initialized
// version will be used.
$image = new Serafim\SDL\Image\Image(sdl: null);
```
> ! It is recommended to always specify the SDL dependency explicitly.
To specify a library pathname explicitly, you can add the `library` argument to
the `Serafim\SDL\Image\Image` constructor.
> By default, the library will try to resolve the binary's pathname automatically.
```php
// Load library from pathname (it may be relative or part of system-dependent path)
$image = new Serafim\SDL\Image\Image(library: __DIR__ . '/path/to/library.so');
// Try to automatically resolve library's pathname
$image = new Serafim\SDL\Image\Image(library: null);
```
You can also specify the library version explicitly. Depending on this version,
the corresponding functions of the SDL Image will be available.
> By default, the library will try to resolve SDL Image version automatically.
```php
// Use v2.0.5 from string
$image = new Serafim\SDL\Image\Image(version: '2.0.5');
// Use v2.6.3 from predefined versions constant
$image = new Serafim\SDL\Image\Image(version: \Serafim\SDL\Image\Version::V2_6_3);
// Use latest supported version
$image = new Serafim\SDL\Image\Image(version: \Serafim\SDL\Image\Version::LATEST);
```
To speed up the header compiler, you can use any PSR-16 compatible cache driver.
```php
$image = new Serafim\SDL\Image\Image(cache: new Psr16Cache(...));
```
In addition, you can control other preprocessor directives explicitly:
```php
$pre = new \FFI\Preprocessor\Preprocessor();
$pre->define('true', 'false'); // happy debugging!
$image = new Serafim\SDL\Image\Image(pre: $pre);
```
## Example
```php
use Serafim\SDL\SDL;
use Serafim\SDL\Image\Image;
$sdl = new SDL();
$image = new Image(sdl: $sdl);
$sdl->SDL_Init(SDL::SDL_INIT_EVERYTHING);
$image->IMG_Init(Image::IMG_INIT_PNG);
$surface = $image->IMG_Load(__DIR__ . '/path/to/image.png');
$image->IMG_SaveJPG($surface, __DIR__ . '/path/to/image.jpg', quality: 80);
$image->IMG_Quit();
$sdl->SDL_Quit();
```