morrelinko / simple-photo
Photo uploading and management made easy.
Requires
- php: >=5.3.0
- imagine/imagine: ~0.5.0
Requires (Dev)
- aws/aws-sdk-php: ~2
- mockery/mockery: dev-master@dev
- phpunit/phpunit: ~4.0
Suggests
- aws/aws-sdk-php: For use with Aws S3 Storage
This package is not auto-updated.
Last update: 2024-07-30 01:29:34 UTC
README
Handling photos in your web application has never been so simple.
Installation
Through Composer
{ "require": { "morrelinko/simple-photo": "0.*" } }
Create the database using the schema below for the data store you will be using
Uploading Photo
$photoId = $simplePhoto->uploadFromPhpFileUpload($_FILES["image"]); // Or $photoId = $simplePhoto->uploadFromFilePath("/path/to/photo.png");
With support for accepting uploads from different sources.
$photoId = $simplePhoto->upload(new YourUploadSource($imageData));
The two upload methods shown above actually are aliases/shortcuts for doing this
$photoId = $simplePhoto->upload(new PhpFileUploadSource($_FILES["image"])); // Or $photoId = $simplePhoto->upload(new FilePathSource("/path/to/photo.png"));
Retrieving Photo
$photo = $simplePhoto->get($photoId); $photo->id(); $photo->url(); $photo->path(); $photo->fileMime(); $photo->storage(); $photo->fileSize(); $photo->fileExtension(); $photo->filePath(); $photo->createdAt(); ...
Setup
SimplePhoto requires...
- Storage Manager: For Storing & Managing registered storage adapters.
- Data Store: Database for persisting information about a photo.
use SimplePhoto\Storage\LocalStorage; use SimplePhoto\StorageManager; use SimplePhoto\DataStore\SqliteDataStore; use SimplePhoto\SimplePhoto; // Create a local storage adapter $localStorage = new LocalStorage('/path/to/project/root/', 'photos'); // Create a storage manager $storageManager = new StorageManager(); // Adds one or more registered storage adapters $storageManager->add('local', $localStorage); // Create Data Store $dataStore = new SqliteDataStore(['database' => 'photo_app.db']); // Create Our Simple Photo Object $simplePhoto = new SimplePhoto($storageManager, $dataStore);
Get photos (+Transformation)
If you want to get a re-sized photo, use the "transform" options of the second argument
$photo = $simplePhoto->get($photoId, [ 'transform' => [ 'size' => [200, 200] ] ]);
The default transformation options available...
[ 'size' => [$width, $height] 'rotate' => [$angle, ($background)] ]
You could implement your own transformer and add more transformation options
Arguments in parenthesis are optional
Collection of photos
$photos = $simplePhoto->collection([2, 23, 15]); $photos->get(0); // gets photo '2' $photos->get(1); // gets photo '23'
PhotoCollection come with a handful of methods for manipulating its items
// Creates a collection of photos $photos = $simplePhoto->collection([2, 23, 15, 34, 21, 1, 64, 324]); // Gets all as array $allPhotos = $photos->all(); // Uses filter() method. // This example creates a new photo collection containing only photos in 'local' storage $localPhotos = $photos->filter(function($photo) { return $photo->storage() == 'local'; }); var_dump($localPhotos);
Push
// Probably gotten from a db $users = [ ['user_id' => 1, 'name' => 'John Doe', 'photo_id' => 2], ['user_id' => 2, 'name' => 'Mary Alice', 'photo_id' => 5] ]; $simplePhoto->push($users, array('photo_id')); var_dump($users); // Sample Output: [ ['user_id' => 1, 'name' => 'John Doe', 'photo_id' => 2, 'photo' => (Object SimplePhoto\PhotoResult)], ['user_id' => 2, 'name' => 'Mary Alice', 'photo_id' => 5, 'photo' => (Object SimplePhoto\PhotoResult)] ];
If you would like complete control on what is pushed to the array from the photo result,
you specify a callback as third argument to push()
$simplePhoto->push($users, array('photo_id'), function(&$item, $photo, $index, $name) { $item['photo_url'] = $photo->url(); }); var_dump($users); // Sample Output: [ ['user_id' => 1, 'name' => 'John Doe', 'photo_id' => 2, 'photo_url' => 'http://example.com/files/2014/xxxxx.png'], ['user_id' => 2, 'name' => 'Mary Alice', 'photo_id' => 5, 'photo_url' => 'http://example.com/files/2014/xxxxx.png'] ];
Supported Photo Sources
Supported Data Stores
Supported Storage
TODO
- Add MongoDB Data Store
Credits
This code is principally developed and maintained by [Laju Morrison] (https://github.com/morrelinko)
Licence
The MIT License (MIT). Please see License File for more information.
Supported by http://contactlyapp.com