saad / image
此包用于处理图片裁剪、缩放、添加文本,与 Eloquent 模型集成以获取和保存图片以及创建缩略图。
v1.2
2023-05-07 11:13 UTC
Requires
- php: >=7.0.0
- ext-gd: *
README
安装
您可以通过 composer 引入此包
$ composer require saad/image
为 Laravel 注册包服务提供者
Laravel 5.5
此包将自动注册自身。
Laravel < 5.5
在 config/app.php 中的 providers 配置中添加以下内容
'providers' => [ ..... Saad\Image\ImageServiceProvider::class, ]
发布包配置和资源
php artisan vendor:publish --provider="Saad\Image\ImageServiceProvider"
使用
来使用核心图像库
<?php use Saad\Image\Image; $image = new Image( $image_src ); // you can then manipulate image // Set Save Output Format $image->setOutputFormat('png'); // Set Save Options $image->setSaveOptions('image_name', 'Save_Path'); // Create Thumbnail $image->createThumbnail(100, 100); // Save and destroy resource from memory $image->export(); // Save and keep resource to continue manipulating same resource $image->export(true); // Get Image as data-url string $image->embed();
Laravel Eloquent 特性
此包附带两个特性,使在 Eloquent 模型上保存图片变得容易
EloquentImageSaverTrait
用于动态保存上传的图片并创建缩略图
EloquentPublicImageTrait
用于获取已保存图片及其创建的缩略图的公开 URL
完整示例
假设我们有一个包含存储用户个人图片的图片列的用户模型
<?php .... use Saad\Image\Traits\EloquentImageSaverTrait; use Saad\Image\Traits\EloquentPublicImageTrait; class User extends Model { use EloquentImageSaverTrait, EloquentPublicImageTrait; protected static $profile_image_sizes = [ [ 256, 256 ], // Default image size [ 100, 100 ], // Thumbnail [ 46, 46 ], // Thumbnail [ 26, 26 ], // Thumbnail ]; /** * Get Image * @return String Image Url */ public function getImage() { return $this->getImagePublicLink( 'image', 'images/profiles/' ); } /** * Get Image Thumbnail * @param String $size Thumbnail size in format '46x46' * @return String Image Thumbnail Url */ public function getImageThumb( $size ) { return $this->getImagePublicLink( 'image', 'images/profiles/thumb/', $size ); } /** * Mutator To Save and Set Image * * Save Image and create thumbnails, and set image name attribute to model */ public function setImageAttribute( $file ) { $path = public_path( 'images/profiles/' ); if($file instanceof \Illuminate\Http\UploadedFile) { $this->attributes['image'] = $this->saveImage( $file, $path, null, static::$profile_image_sizes, function( $object, $save_name ) use($path){ /** * Delete Old Images */ $this->deleteOldFor( $object->image, $path ); } ); } else { $file = realpath(public_path('/images/temp/'.$file)); $this->attributes['image'] = $this->saveLocalImage( $file, $path, null, static::$profile_image_sizes, function( $object, $save_name ) use($path){ /** * Delete Old Images */ $this->deleteOldFor( $object->image, $path ); }); } } }