Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Изменение размера и формата изображения на PHP + GD
Довольно часто при работе требуется изменить размеры картинки, и большинство примеров, которые есть в интернете содержат ошибку, из-за которой изменённые картинки теряют свои цвета, а всё дело то в одной строке:
$resImage = ImageCreateTrueColor($destWidth, $destHeight);
Здесь описана функция изменения размера изображения. На вход подаются путь к изменяемой картинке, новая ширина, высота и признак сохранения пропорций исходного изображения. Если размеры меньше новых размеров, то изменение не осуществляется.
function SetImgSize($img, $width, $height, $AspectRatio)
{
//Создаем изображение в зависимости от типа исходного файла
// для упрощения, считаю, что расширение соответствует типу файла
switch ( strtolower(strrchr($img, '.')) ){
case "jpg":
$srcImage = @ImageCreateFromJPEG($img);
break;
case "gif":
$srcImage = @ImageCreateFromGIF($img);
break;
case "png":
$srcImage = @ImageCreateFromPNG($img);
break;
default:
return -1;
}
$srcWidth = ImageSX($srcImage);
$srcHeight = ImageSY($srcImage);
echo 'Исходная картинка('.$srcWidth.'x'.$srcHeight.'): <b>'.$pURL_name.'</b><br><img src="'.$img.'" />';
if(($width < $srcWidth) || ($height > $srcHeight))
{ if($AspectRatio){
$ratioWidth = $srcWidth/$width;
$ratioHeight = $srcHeight/$height;
if($ratioWidth < $ratioHeight)
{
$destWidth = intval($srcWidth/$ratioHeight);
$destHeight = $height;
}
else
{
$destWidth = $width;
$destHeight = intval($srcHeight/$ratioWidth);
}
}else {
$destHeight = $height;
$destWidth = $width;}
$resImage = ImageCreateTrueColor($destWidth, $destHeight);
ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
unlink($img);// удаляю исходный файл
switch ( strtolower(strrchr($img, '.')) ){
case "jpg":
ImageJPEG($resImage, $img, 100); // 100 - максимальное качество
break;
case "gif":
ImageGIF($resImage, $img);
break;
case "png":
ImagePNG($resImage, $img);
break;
}
ImageDestroy($srcImage);
ImageDestroy($resImage);
echo "<br>\nИзмененная картинка(".$destWidth.'x'.$destHeight.'):<br><img src="'.$img.'" />';
}
}
В примере для упрощения умышленно допущена ошибка. На экране вы увидите только измененную картинку, т.к. к моменту вывода исходная картинка будет затерта новой.
Возможно Вам будет интересно:
- Пример скрипта анимации любых изображений
- Пример скрипта изменения размера изображения
- Сервис внедрения изображения в код страницы
- Сервис создания анимированного изображения
- Наложение логотипа(водяного знака) на изображение
- Объединение нескольких изображений в одно
.
Прокомментировать/Отблагодарить