bool formatImage ( string srcFile [, string dstFile [, int dstWidth [, int dstHeight]]] )
(PHP >= 4.3.0, GD 2.0)
Изменения типа (GIF, JPEG, PNG) и размеров изображения.
[size=13pt]Список параметров[/size]
srcFile - путь к файлу с исходной картинкой. Единственный обязательный параметр.
dstFile - путь к файлу для нового изображения. Его тип определяется расширением файла (если расширение отсутсвует, тип останется без изменений). Если не указывать этот параметр (или указать значение NULL), картинка, в том же формате, что и исходная, будет отправлена в браузер с соответствующими HTTP-заголовками.
dstWidth - ширина новой картинки.
dstHeight - высота новой картинки.
Если указать только ширину (высоту), то высота (ширина) будет расчитана в соответствии с пропорциями исходного изображения. Если вообще не указывать этих параметров, размеры останутся прежними.
Функция генерирует ошибки (предупреждения) уровня E_USER_WARNING если
- не найден файл (или недоступен для чтения) файл srcFile;
- тип изображения не поддерживается;
- размеры указаны некорректно.
[size=13pt]Возвращаемые значения[/size]
Возвращает TRUE при успешном завершении и FALSE в случае ошибки.
[size=13pt]Код[/size]
function formatImage($srcFile, $dstFile = null, $dstWidth = null, $dstHeight = null)
{
if (! is_readable($srcFile)) {
trigger_error("File $srcFile is not readable or not exists", E_USER_WARNING);
return false;
}
list($srcWidth, $srcHeight, $type) = getImageSize($srcFile);
switch ($type) {
case IMG_GIF:
$srcImage = imageCreateFromGif($srcFile);
break;
case IMG_JPG:
$srcImage = imageCreateFromJpeg($srcFile);
break;
case IMG_PNG:
$srcImage = imageCreateFromPng($srcFile);
break;
default:
trigger_error("Invalid image type of '$srcFile'", E_USER_WARNING);
return false;
}
if (isset($dstWidth) || isset($dstHeight)) {
if (! isset($dstHeight)) {
$dstHeight = round($dstWidth / ($srcWidth / $srcHeight));
} elseif (! isset($dstWidth)) {
$dstWidth = round($dstHeight / ($srcHeight / $srcWidth));
}
if ($dstWidth < 1 || $dstHeight < 1) {
trigger_error("Invalid image dimensions", E_USER_WARNING);
return false;
}
$dstImage = imageCreateTrueColor($dstWidth, $dstHeight);
imageCopyResampled($dstImage, $srcImage, 0, 0, 0, 0,
$dstWidth, $dstHeight,
$srcWidth, $srcHeight);
} else {
$dstImage = $srcImage;
}
if (empty($dstFile)) {
$mime = image_type_to_mime_type($type);
header("Content-Type: $mime");
} else {
$ext = strToUpper(pathInfo($dstFile, PATHINFO_EXTENSION));
if ($ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') {
$type = constant("IMG_$ext");
}
}
switch ($type) {
case IMG_GIF:
if ($dstFile) {
imageGif($dstImage, $dstFile);
} else {
imageGif($dstImage);
}
break;
case IMG_JPG:
if ($dstFile) {
imageJpeg($dstImage, $dstFile);
} else {
imageJpeg($dstImage);
}
break;
case IMG_PNG:
if ($dstFile) {
imagePng($dstImage, $dstFile);
} else {
imagePng($dstImage);
}
break;
}
imageDestroy($dstImage);
imageDestroy($srcImage);
return true;
}
[size=13pt]Примеры[/size]
a) Создание файл [tt]out.gif[/tt] с GIF-изображением, 200x100, из JPEG-картинки [tt]in.jpg[/tt]:
formatImage('in.jpg', 'out.gif', 200, 100);
b) Отправка в браузер изображение из [tt]in.jpg[/tt] с высотой 100px и соответствующей шириной:
formatImage('in.jpg', null, null, 100);
c) Изменение типа картинки:
formatImage('in.jpg', 'out.png');