Я использую php 7.2 и ImageMagick-7.0.8-12. Я использую его для создания таких миниатюр:
function thumbimg($sourcePath, $thumbPath) {
try {
if (file_exists($sourcePath)) {
$imagick = new Imagick();
$imagick->readImage($sourcePath);
$imagick->setImageFormat("jpg");
header('Content-Type: image/jpeg');
$imagick->writeImage($thumbPath);
$imagick->clear();
$imagick->destroy();
chmod($thumbPath, 0755);
return;
}
} catch (ImagickException $e) {
echo $this->raiseError('Could not save image to file: ' . $e->getMessage(), IMAGE_TRANSFORM_ERROR_IO);
}
return;
}
Скрипт php действительно возвращает отраженный JSON, как и было задумано, но когда я смотрю на предварительный просмотр сетевого возврата, он показывает пустое изображение со ссылкой на этот скрипт. Это поведение начинается со строки $imagick = new Imagick();
. До этого оно ведет себя нормально. Хотя я получаю желаемый JSON, он мешает другим функциям, которые производят выходные данные.
Я бы поискал другой пример Imagick, так как ваш выглядит немного беспорядочно. У вас есть заголовок в середине вашего кода, который используется для отображения. Понятия не имею, почему у вас есть chmod, и я бы подумал, если бы он был необходим, он был бы в начале кода Imagick. Я также не вижу кода миниатюр.
Попробуй это:
$im = new Imagick($input);
$im->resizeImage( 100, 100, imagick::FILTER_LANCZOS, TRUE );
$im->writeImage('resizeImage.jpg');
$im->destroy();
(Фильтр не является обязательным, поскольку Imagick выберет лучший фильтр для использования при увеличении или уменьшении размера.)
Я думаю, как @Mark Setchell говорит, что уничтожение не нужно
Я считаю, что
$imagick->destroy();
устарел и не нужен.