godzie44 / yii2-image-behavior
Behavior that will help you to save the modified copy of the uploaded image and give you easy access to them
Installs: 316
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- php: >=5.4.0
- yiisoft/yii2: 2.0.*
- yurkinx/yii2-image: *
This package is not auto-updated.
Last update: 2025-01-25 00:07:09 UTC
README
This behavior will help you to:
- easy save uploaded image
- easy save modified copy of the initial image by apply modifiers like resize, flip and others. Also, you can apply more modifiers in an arbitrary sequence.
- get access to uploaded images
- delete images when delete record, update images when update record
Installation
composer require godzie44/yii2-image-behavior
Test
$ codecept run
Usage
In controller.
Just put in image attribute FileUpload object (like in official guide) and call $model->save() method
In model (example)
public function behaviors() { return [ [ 'class' => \godzie44\yii\behaviors\image\ImageBehavior::className(), 'imageAttr' => 'avatar', //attribute in model, instance of FileUploaded 'images' => [ // array of images that we whant to save 'default' => ['default' => []], 'small' => ['resize' => [150,200]], 'fliped' => ['flip' => [30]], 'sharped' => ['sharpen' => [30]], 'croped' => ['crop' => [30,40,20,10]], 'medium-rotate' => ['resize' => [300,400], 'rotate' => [40]], ], 'saveDirectory' => Yii::getAlias('@webroot/uploads/avatars/'), ], ... ]; }
Now in 'saveDirectory' directory we have 6 images with names like "<timestapm><default/small/fliped/...>.<file extension>"
Get path to this images by calling $model->getImage('default') - where default is postfix of needed image
Parameters
### Behavior parameters
-
imageAttr (required, string) Name of model attribute that contains FileUploaded object.
-
images (required, array[]) List of output images. Fields in this array must be format:
[string image_postfix => [string modifiers => array $params, ...]]
where:
- image_postfix string, postfix of concrete image
- modifiers string, modificator that will be applied to the image. (see modificator list and their params in modificators section)
- params array, params of modificator
-
saveDirectory (required, string) The directory where the images are saved.
-
options (optional, array) where:
- deleteOldWhenUpdate (optional, boolean) Default True. True - delete old images when upload new file in existing field, false - don't delete.
- ifNullBehavior (optional, string) Default ImageBehavior::DELETE_IF_NULL. ImageBehavior::DELETE_IF_NULL - when attribute=NULL old images will be deleted, ImageBehavior::DO_NOTHING_IF_NULL - when attribute=NULL old images dont be deleted and field don be rewrite.
### Modifiers
- default default image, params is empty array [].
- resize resize image, params [int width,int height].
- flip flip image, params [int direction].
- sharpen sharpen image, params [int amount].
- crop crop image, params [int width, int height,int offset_x,int offset_y].
- rotate rotate image, params [int degrees].
You can use this modifiers in any number and combinations.
Simple example of usage (user profile with avatar)
In controller
public function actionProfile() { $model = User::findOne(Yii::$app->user->id); if ($model->load(Yii::$app->request->post())) { $model->avatar = UploadedFile::getInstance($model, 'avatar'); $model->save(); } return $this->render('profile', ['model' => $model,]); }
User model like:
class User extends ActiveRecord { public static function tableName() { return '{{%user}}'; } public function rules() { return [ [['name', 'id'], 'safe'], [['avatar'], 'file', 'extensions' => 'png, jpg'], ]; } public function behaviors() { return [ [ 'class' => ImageBehavior::className(), 'saveDirectory' => Yii::getAlias('@webroot/uploads/avatars/'), 'imageAttr' => 'avatar', 'images' => [ '_default' => ['default' => []], //save default upload image '_small' => ['resize' => [150,200]], //and save resized copy ], 'options' => [ 'ifNullBehavior' => ImageBehavior::DO_NOTHING_IF_NULL, //when avatar attribute contains null, don't need to deleted images and rewrite avatar field ] ], ]; } //getter of resized image public function getSmallAvatar(){ return = $this->getImage('_small'); } }
In view
$form = ActiveForm::begin(); echo $form->field($model, 'name')->textInput(); echo Html::img($model->smallAvatar); echo $form->field($model, 'avatar')->fileInput()->label('change avatar'); echo Html::submitButton('Save', ['class' => 'btn btn-primary']); ActiveForm::end();