【发布时间】:2015-07-04 15:29:26
【问题描述】:
我想创建一个拇指,但收到此错误:
PHP 致命错误 – yii\base\ErrorException 找不到类“Imagine\Image\ManipulatorInterface”
我不知道从哪里可以得到这个?我使用了yii2-imagine,但没有找到任何ManipulatorInterface 类。
控制器文件:
<?php
namespace backend\controllers;
use Yii;
use app\models\Employee;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\AccessControl;
use yii\filters\VerbFilter;
use yii\web\UploadedFile;
use yii\imagine\Image; // this is where i used Image class
public function actionCreate()
{
$model = new Employee();
$model->added_date_time = date('Y-m-d H:i:s');
if($model->load(Yii::$app->request->post())) {
$model->file = UploadedFile::getInstance($model,'avatar');
if(!empty($model->file)) {
$imageName = Yii::$app->security->generateRandomString();
$model->file->saveAs('uploads/'.$imageName.'.'.$model->file->extension);
$model->avatar = $imageName.'.'.$model->file->extension;
$file = 'uploads/'.$imageName.'.'.$model->file->extension;
Image::thumbnail($file, 200, 200)->save('uploads/thumb/', ['quality' => 80]);
}
if($model->save()){
$this->redirect(\Yii::$app->urlManager->createUrl('employee'));
}
}
else {
return $this->render('create', [
'model' => $model
]);
}
}
?>
图像类文件在\vendor\yiisoft\yii2\imagine文件夹中,ManipulatorInterface在\vendor\yiisoft\yii2\imagine\Image文件夹中
Image.php
<?php
namespace yii\Imagine;
class Image extends BaseImage
{
}
?>
BaseImage.php
<?php
namespace yii\imagine;
use Yii;
use imagine\Image\Box;
use imagine\Image\Color;
use imagine\Image\ImageInterface;
use imagine\Image\ImagineInterface;
use imagine\Image\ManipulatorInterface;
use imagine\Image\Point;
use yii\base\InvalidConfigException;
use yii\base\InvalidParamException;
use yii\helpers\ArrayHelper;
class BaseImage
{
public static function thumbnail($filename, $width, $height, $mode = 'outbound')
{
$box = new Box($width, $height);
$img = static::getImagine()->open(Yii::getAlias($filename));
if (($img->getSize()->getWidth() <= $box->getWidth() && $img->getSize()->getHeight() <= $box->getHeight()) || (!$box->getWidth() && !$box->getHeight())) {
return $img->copy();
}
$img = $img->thumbnail($box, $mode);
// create empty image to preserve aspect ratio of thumbnail
$thumb = static::getImagine()->create($box, new Color('FFF', 100));
// calculate points
$size = $img->getSize();
$startX = 0;
$startY = 0;
if ($size->getWidth() < $width) {
$startX = ceil($width - $size->getWidth()) / 2;
}
if ($size->getHeight() < $height) {
$startY = ceil($height - $size->getHeight()) / 2;
}
$thumb->paste($img, new Point($startX, $startY));
return $thumb;
}
?>
【问题讨论】:
-
我会说你有一个命名空间问题,但没有代码很难帮助你。您可以在您的问题中粘贴相关代码吗?
-
我应该发布什么?
-
抛出此错误的 php 代码
-
好的,我会发布更详细的代码
-
@FélixGagnon-Grenier 请查看我的更新代码。