Рецепт №91. Из книги «128 рецептов php»
Перейти к оглавлению
Как, наверняка, уже стало ясно из предыдущих рецептов, для работы с разными форматами изображений, приходится использовать разные php функции при создании и сохранении/выводе в браузер изображения. Например, при сохранении картинки в формате jpg используется функция imagejpeg, для png — imagepng , для gif — imagegif. Так же обстоят дела и с функциями создания изображения разных форматов. Это создает некоторые проблемы в случаях, когда на обработку может попасть картинка любого формата. Ниже приведенный рецепт поможет решить сложившуюся проблему.
Пример:
$source = "test.jpg"; // $source = "test.jpeg"; // $source = "test.png"; // $source = "test.gif"; // получаем функцию, для создания изображения $imageCreateFunc = get_image_create_func($source); // получаем функцию, для сохранения/вывода изображения $imageSaveFunc = get_image_save_func($source); // загружаем исходную картинку $pic = $imageCreateFunc($source); // заголовок для браузера header("Content-Type: image/jpeg"); // выводим результат в браузер $imageSaveFunc($pic); // очищаем пямять imagedestroy($pic); // получаем функцию, для создания изображения function get_image_create_func($source){ // получаем данные о файле $size = @getimagesize($source); // если ни чего не получили if(!$size) return false; // определяем формат картинки $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1) ); // при необходимости, меняем jpg на jpeg if($format == "jpg") $format = "jpeg"; // создаем функцию, для полученного // формата изображения $func = "imagecreatefrom" . $format; // проверяем существование полученной функции if(!function_exists($func)) return false; // возвращаем результат return $func; } // получаем функцию, для сохранения/вывода изображения function get_image_save_func($source){ $size = @getimagesize($source); if(!$size) return false; $format = strtolower( substr($size['mime'], strpos($size['mime'], '/')+1) ); if($format == "jpg") $format = "jpeg"; $func = "image" . $format; if(!function_exists($func)) return false; return $func; }
В приведенном примере использовалась ранее не описанная функция – function_exists. Она проверяет, определена функция или нет.