saad/image

此包用于处理图片裁剪、缩放、添加文本,与 Eloquent 模型集成以获取和保存图片以及创建缩略图。

v1.2 2023-05-07 11:13 UTC

This package is auto-updated.

Last update: 2024-09-07 14:02:00 UTC


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 );
	            });
	        }
    		}
    }