Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Изменение размера и формата изображения на 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.'" />';
}
}
В примере для упрощения умышленно допущена ошибка. На экране вы увидите только измененную картинку, т.к. к моменту вывода исходная картинка будет затерта новой.
Возможно Вам будет интересно: