繁体   English   中英

如何使用Intervention修剪图像的空白区域?

[英]How can I trim white space off image with Intervention?

我有一堂课,拍摄我下载的照片,然后重新上传到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);
  }
}

trim()返回修剪后的图像,但是您对返回值不执行任何操作。 尝试调用save()将映像持久save()到文件系统:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM