Как вывести кэшированное изображение с помощью Intervention Image Cache? - PullRequest
0 голосов
/ 04 апреля 2020

Мне удалось заставить работать стандартный 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.

Я попытался установить второй и третий параметры, как определено в документации (как указал Даниил Протопопов ). Неважно, если я установлю третий параметр на TRUE или FALSE, он все равно просто вернет строку, подобную ����JFIF``��;CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), quality = 90, если я выведу эхо $img

Если я запускаю следующий код с использованием только основного вмешательства Пакет изображений выводится совершенно нормально, но я не могу заставить работать функцию кэширования, и все примеры в системе отслеживания проблем GitHub, похоже, относятся к 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(). Спасибо Даниил Протопопов !

1 Ответ

1 голос
/ 04 апреля 2020

Вам необходимо добавить время жизни кэширования и true в качестве третьего параметра, чтобы он возвращал вам объект, а не строку согласно документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...