如何用Intervention Image Cache输出缓存的图片?

How to output the cached image with Intervention Image Cache?

我已经设法让标准 Intervention Image 正常工作,但我终究无法让它与缓存系统一起工作。我在没有框架的标准 PHP 设置上使用它。

这是我的代码

// import the Intervention Image Manager Class ~ http://image.intervention.io/
use Intervention\Image\ImageManager;

// create an image manager instance with favored driver
if (!extension_loaded('imagick')) {
  $this->manager = new ImageManager(array('driver' => 'GD'));
} else {
  $this->manager = new ImageManager(array('driver' => 'imagick'));
}

$img = $this->manager->cache(
  function ($image) use ($imagePath) {

    $image = $image->make($imagePath);

    // Check for dimensions
    if (
      (!empty($_GET['w']) && is_numeric($_GET['w'])) || (!empty($_GET['h']) && is_numeric($_GET['h']))
    ) {
      // Dimensions set

      // Set default options
      $width = (!empty($_GET['w'])) ? (int) trim($_GET['w']) : null;
      $height = (!empty($_GET['h'])) ? (int) trim($_GET['h']) : null;

      // Resize and return the image
      return $image->resize($width, $height, function ($constraint) {
        $constraint->aspectRatio();
        // prevent possible upsizing
        if (empty($_GET['e']) || trim($_GET['e']) !== 'y') {
          $constraint->upsize();
        }
      });
    } else {
      // Return the image
      return $image;
    }
  }
);

// Output the image
echo $img->response();
exit;

但我收到错误 Call to a member function response() on string

同样,我没有使用 Laravel 或任何其他包,这只是一个普通的 PHP 脚本。

我已经尝试设置 documentation (as pointed out by 中定义的第二个和第三个参数。无论我将第三个参数设置为 TRUE 还是 FALSE 如果我回显 $img

它仍然只是 return 一个像 ����JFIF``��;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90 这样的字符串

如果我 运行 下面的代码只使用核心干预图像包,它输出非常好,但我似乎无法让缓存选项工作以及 [=44= 中的所有示例] 问题跟踪器似乎适用于 v1/pre 2017。

// import the Intervention Image Manager Class ~ http://image.intervention.io/
use Intervention\Image\ImageManager;

// create an image manager instance with favored driver
if (!extension_loaded('imagick')) {
  $this->manager = new ImageManager(array('driver' => 'GD'));
} else {
  $this->manager = new ImageManager(array('driver' => 'imagick'));
}

// Create the image
$img = $this->manager->make($imagePath);

// Check for dimensions
if (
  (!empty($_GET['w']) && is_numeric($_GET['w'])) || (!empty($_GET['h']) && is_numeric($_GET['h']))
) {
  // Dimensions set

  // Set default options
  $width = (!empty($_GET['w'])) ? (int) trim($_GET['w']) : null;
  $height = (!empty($_GET['h'])) ? (int) trim($_GET['h']) : null;

  // Resize and return the image
  $img = $img->resize($width, $height, function ($constraint) {
    $constraint->aspectRatio();
    // prevent possible upsizing
    if (empty($_GET['e']) || trim($_GET['e']) !== 'y') {
      $constraint->upsize();
    }
  });
}

// Output the image
echo $img->response();
exit;

我怎样才能让它工作?

更新

原来我是将 TRUE 参数放在 $image->resize() 函数中,而不是放在 $this->manager->cache() 方法的末尾。谢谢

您需要添加缓存生命周期和 true 作为第三个参数,以便它 returns 您是一个对象,而不是按照 documentation

的字符串