Универсальные функции создания и сохранения картинок

Рецепт №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. Она проверяет, определена функция или нет.

Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*