Как я могу обрезать пустое пространство от изображения с вмешательством?

У меня есть класс, который берет фотографии, которые я загружаю перед повторной загрузкой в ​​S3 для длительного хранения, и я хочу обрезать пустое пространство. Когда я сохраняю временное изображение (которое работает нормально), я тогда пытаюсь вызвать на нем функцию Intervention trim () в моем методе storeTempFile (), но это не обрезает пустое пространство. Я думаю, что это может быть размещение в моем коде?

class PhotoProcessor
{
public function __construct(Listing $listing, $photoData)
{
$this->bucket       = 'real-estate-listings';
$this->s3           = App::make('aws')->get('s3');
$this->tempFileName = 'app/storage/processing/images/retsphotoupload';
$this->photoData    = $photoData;
$this->listing      = $listing;
$this->photo        = new RetsPhoto;
}

public function process()
{
$this->storeTempFile();
$this->storeFileInfo();
$this->buildPhoto();

$success = $this->pushToS3();

// if Result has the full URL or you want to build it, add it to $this->photo
DB::connection()->disableQueryLog();
$this->listing->photos()->save($this->photo);
$this->removeTempFile();
unset ($this->photoData);
return $success;
}

private function storeTempFile()
{
// return File::put($this->tempFileName, $this->photoData['Data']) > 0;
File::put($this->tempFileName, $this->photoData['Data']);
Image::make($this->tempFileName)->trim('top-left', null, 60);
return($this->tempFileName) > 0;

}

private function storeFileInfo()
{
$fileInfo = getimagesize($this->tempFileName);
// Could even be its own object
$this->fileInfo = [
'width'     => $fileInfo[0],
'height'    => $fileInfo[1],
'mimetype'  => $fileInfo['mime'],
'extension' => $this->getFileExtension($fileInfo['mime'])
];
}

private function buildPhoto()
{
$this->photo->number = $this->photoData['Object-ID']; // Storing this because it is relevant order wise
$this->photo->width  = $this->fileInfo['width'];
$this->photo->height = $this->fileInfo['height'];
$this->photo->path   = $this->getFilePath();
}

private function getFilePath()
{
$path   = [];
if ($this->listing->City == NULL)
{
$path[] = Str::slug('No City');
}
else
{
$path[] = Str::slug($this->listing->City, $separator = '-');
}

if ($this->listing->Subdivision->subdivision_display_name == NULL)
{
$path[] = Str::slug('No Subdivision');
}
else
{
$path[] = Str::slug($this->listing->Subdivision->subdivision_display_name, $separator = '-');
}

if ($this->listing->MLSNumber == NULL)
{
$path[] = Str::slug('No MLSNumber');
}
else
{
$path[] = Str::slug($this->listing->MLSNumber, $separator = '-');
}

$path[] = $this->photoData['Object-ID'].'.'.$this->fileInfo['extension'];

return strtolower(join('/', $path));

}

private function pushToS3()
{
return $this->s3->putObject([
'Bucket'     => $this->bucket,
'Key'        => $this->photo->path,
'ContentType'=> $this->fileInfo['mimetype'],
'SourceFile' => $this->tempFileName
]);
}

private function getFileExtension($mime)
{
// Use better algorithm than this
$ext = str_replace('image/', '', $mime);
return $ext == 'jpeg' ? 'jpg' : $ext;
}

private function removeTempFile()
{
return File::delete($this->tempFileName);
}
}

1

Решение

trim() возвращает обрезанное изображение, но вы ничего не делаете с возвращаемым значением. Попробуйте позвонить save() чтобы сохранить изображение в файловой системе:

Image::make($this->tempFileName)->trim('top-left', null, 60)->save();
//                                                            ^^^^^^
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]