ereminmdev/yii2-cropperimageupload

Image crop and upload for Yii framework.

1.0.62 2024-04-19 10:57 UTC

README

Image crop and upload for Yii framework.

Depends on:

Install

composer require --prefer-dist ereminmdev/yii-cropperimageupload

Use

Add some code to model and view files:

  • model:
public function behaviors()
{
    return [
        'avatar' => [
            'class' => CropperImageUploadBehavior::class,
            'attribute' => 'avatar',
            'scenarios' => ['default', 'create', 'update'],
            'placeholder' => '@app/modules/user/assets/images/no-avatar.jpg',
            'path' => '@webroot/upload/avatar/{id}',
            'url' => '@web/upload/avatar/{id}',
            'thumbs' => [
                'thumb' => ['width' => 60, 'height' => 60, 'quality' => 80, 'mode' => ManipulatorInterface::THUMBNAIL_OUTBOUND],
                'preview' => ['width' => 240, 'height' => 240],
            ],
            'cropAspectRatio' => 1,
        ],
    ];
}

public function rules()
{
    return [
        [['avatar'], 'file', 'extensions' => 'jpg, jpeg, gif, png, svg, webp'],
    ];
}
  • form field:
<?= $form->field($model, 'avatar')->widget(CropperImageUploadWidget::class) ?>
  • html image:
<?= $model->renderThumbImage('avatar') ?>
<?= $model->renderThumbImage('avatar', 'preview', ['alt'=>'Avatar']) ?>

Tips

  • Re-create thumbs:
foreach (User::find()->each() as $model) {
    $filename = $model->getAttribute('avatar');

    if ($model->recreateThumbs('avatar', true, true)) {
        $this->stdout('Recreated successful: ' . $filename . "\n");
    } else {
        $this->stdout('Error when recreating: ' . $filename . "\n", Console::FG_RED);
    }
}