Использование imagejpeg для сохранения и отображения файла изображения

Я немного экспериментирую с манипуляциями PHP + Image. Я пытаюсь преобразовать некоторые изображения в черно-белые версии. Я в основном понял это, но имею одну небольшую проблему.

Чтобы уменьшить нагрузку на сервер, я хотел сохранить версии B & W и только запустить фильтрацию изображений на изображениях, которые раньше не выполнялись через сценарий. Итак, у меня есть что-то вроде этого:

<?php header("Content-type: image/jpeg"); $file = $_GET['img']; $name = md5($file).".jpg"; if(file_exists("/path/to/file" . $name)) { ob_clean(); flush(); readfile("path/to/file" . $name); exit; } else { $image = imagecreatefromjpeg($file); imagefilter($image, IMG_FILTER_GRAYSCALE); imagejpeg($image, "/path/to/file" . $name); imagedestroy($image); }; ?> 

Это создает B & W версии файла и сохраняет их на сервере. Исходный оператор «if» также работает – он правильно служит для изображения, если он уже существует.

Проблема в том, что для запуска новых изображений это сохраняет их, но не выводит их в браузер. Что я могу использовать / изменить, чтобы сделать это?

Кроме того, я впервые делаю что-то подобное. Любые общие советы, которые вы имеете о выполнении вышеизложенного, будут оценены.

Solutions Collecting From Web of "Использование imagejpeg для сохранения и отображения файла изображения"

Компактная и правильная форма для вышеуказанной функции может быть:

 <?php header("Content-type: image/jpeg"); $file = $_GET['img']; $name = md5($file).".jpg"; if(!file_exists("/path/to/file" . $name)) { imagefilter($image, IMG_FILTER_GRAYSCALE); imagejpeg($image, "/path/to/file" . $name); } else { $image = imagecreatefromjpeg("/path/to/file" . $name); } imagejpeg($image); imagedestroy($image); ?> 

Поскольку вы сохраняете изображение с помощью imagejpeg() в части else , ваше изображение не будет отображаться. Поэтому вы должны добавить

 readfile("/path/to/file". $name); 

после imagedestroy() ;).

Вы можете обернуть код вывода изображения в функцию – что-то вроде этого (untested):

 function output_image ( $image_file ) { header("Content-type: image/jpeg"); header('Content-Length: ' . filesize($image_file)); ob_clean(); flush(); readfile($image_file); } $file = $_GET['img']; $name = md5( $file ) . ".jpg"; $image_file = "/path/to/file/" . $name; if(!file_exists( $image_file )) { $image = imagecreatefromjpeg( $file ); imagefilter( $image, IMG_FILTER_GRAYSCALE ); imagejpeg( $image, $image_file ); imagedestroy( $image ); } output_image( $image_file );