2015-05-13 39 views
1

我有一个班级,在重新上传到S3之前下载照片并进行长期存储,我想修剪白色空间。当我存储临时图像(可以正常工作)时,我会尝试在storeTempFile()方法中调用Intervention trim(),但不会裁剪空白区域。我想这可能是我的代码中的位置?如何通过干预修剪白色空间图像?

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

'修剪()'返回剪裁后的图像,但你是做什么用的返回值 – lukasgeiter

+0

啊,我看你在说什么,但我不知道我会做什么来解决这个问题。 –

+1

尝试调用'save()':'Image :: make($ this-> tempFileName) - > trim('top-left',null,60) - > save();' – lukasgeiter

回答

2

trim()返回修剪过的图像,但是你对返回值没有做任何处理。尝试调用save()到图像坚持到文件系统:

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