Мне удалось заставить работать стандартный 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()
. Спасибо Даниил Протопопов !