Изменить размер изображения в PHP

  1. Загрузите изображение перед изменением размера
  2. imagecopyresized() в PHP
  3. imagecopyresampled() в PHP
  4. imagescale () в PHP

В этой обучающей статье мы обсудим изменение размера изображения в PHP.

Загрузите изображение перед изменением размера

Прежде чем изменять размер изображения, мы должны сначала загрузить его как ресурс изображения в скрипте. Это не то же самое, что использование таких функций, как file_get_contents() для получения содержимого файла изображения. Чтобы загрузить файл, нам нужно использовать такие функции, как imagecreatefromjpeg(), imagecreatefrompng() и imagecreatefromgif(), среди других. В зависимости от типа изображения, размер которого мы будем изменять, мы будем соответственно использовать другую функцию.

getimagesize () в PHP

После загрузки изображения мы используем getimagesize() для вычисления ширины, высоты и типа входного изображения. Эта функция возвращает список элементов, где ширина и высота изображения хранятся с индексами 0 и 1 соответственно, а константы IMAGETYPE_XXX хранятся с индексом 2. Мы будем использовать значение этой возвращенной константы, чтобы выяснить, что тип изображения и функции.

<?php
function load_image($filename, $type) {
    $new = 'new34.jpeg';
    if( $type == IMAGETYPE_JPEG ) {
        $image = imagecreatefromjpeg($filename);
        echo "here is jpeg output:";
        imagejpeg($image, $new);

    }
    elseif( $type == IMAGETYPE_PNG ) {
        $image = imagecreatefrompng($filename);
        echo "here is png output:";
        imagepng($image,$new);
    }
    elseif( $type == IMAGETYPE_GIF ) {
        $image = imagecreatefromgif($filename);
        echo "here is gif output:";
        imagejpeg($image, $new);
    }
    return $new;
}

$filename = "panda.jpeg";
list($width, $height,$type) = getimagesize($filename);
echo "Width:" , $width,"\n";
echo "Height:", $height,"\n";
echo "Type:", $type, "\n";

$old_image = load_image($filename, $type);
?>

Input_Image:

php resize image - исходное изображение

Выход:

Width:225
Height:225
Type:2
here is jpeg output:

Выходное_изображение:

php изменить размер изображения

Оба являются одними и теми же изображениями, потому что в этом разделе мы загружаем только изображение и вычисляем размер исходного изображения.

imagecopyresized() в PHP

imagecopyresized() берет продолговатую область шириной src_w и высотой src_h из src_image в позиции (src_x, src_y) и помещает ее в прямоугольную область целевого изображения в позиции (dst_x, dst_y). Это встроенная функция PHP.

<?php
// File and new size
$filename = 'panda.jpeg';
$percent = 0.5;

// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height, $type) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
$type = $list[2];
echo $type;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb,'new.jpeg');
?>

Input_Image:

php resize image - исходное изображение

Выходное_изображение:

php изменить размер изображения

Как обсуждалось выше, функция imagecopyresize() принимает десять параметров, которые перечислены ниже.

Параметры Объяснение
$dst_image Ресурс целевого изображения
$src_image Ресурс исходного изображения
$dst_x Координата x точки назначения
$dst_y Координата Y точки назначения
$src_x Координата x исходной точки
$src_y Координата Y исходной точки
$dst_w Ширина назначения
$dst_h Высота назначения
$src_w Ширина источника
$src_h Высота источника

Он возвращает логическое значение ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи.

imagecopyresampled() в PHP

imagecopyresampled () копирует продолговатую часть одного изображения в другое, плавно интерполируя значения пикселей, чтобы уменьшить размер изображения, сохраняя высокий уровень четкости.

Он работает аналогично функции imagecopyresized() с дополнительным преимуществом выборки изображения в дополнение к его изменению размера.

<?php
// The file
$filename = 'panda.jpeg';
$percent = 2;

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, 'resampled1.jpeg', 100);
?>

Input_Image:

php resize image - исходное изображение

Выходное_изображение:

php изменить размер изображения

Функция imagecopyresampled() принимает десять различных параметров.

Параметры Объяснение
$image_p Он определяет изображение назначения.
$image Он определяет исходное изображение.
$x_dest Он определяет координату x целевого изображения.
$y_dest Он определяет координату y целевого изображения.
$x_src Он определяет координату x исходного изображения.
$y_src Он определяет y-координату исходного изображения.
$wid_dest Он определяет ширину нового изображения.
$hei_dest Он определяет высоту нового изображения.
$wid_src Он определяет ширину старого изображения.
$wid_src Он определяет высоту старого изображения.

Примечание: мы также можем выполнить пропорциональную передискретизацию, что возможно, задав ширину и высоту dest_image вместо процента.

imagescale () в PHP

Вы указываете размер, а не определяете ширину или высоту последнего изображения. Если вы хотите, чтобы размер нового изображения составлял половину от первого изображения, установите размер 0,8. Вот пример кода для масштабирования изображения с заданным коэффициентом при сохранении соотношения.

Умножаем исходную ширину и высоту изображения на указанный масштаб в функции scale image().

вот его пример:

<?php
    
function load_image($filename, $type) {

        if( $type == IMAGETYPE_JPEG ) {
            $image = imagecreatefromjpeg($filename);

        }
        elseif( $type == IMAGETYPE_PNG ) {
            $image = imagecreatefrompng($filename);
           
        }
        elseif( $type == IMAGETYPE_GIF ) {
            $image = imagecreatefromgif($filename);
            
        }
        
        return $image;
    }
function scale_image($scale, $image, $width, $height) {
    $new_width = $width * $scale;
    $new_height = $height * $scale;
    return resize_image($new_width, $new_height, $image, $width, $height);
    
}
function resize_image($new_width, $new_height, $image, $width, $height) {
    $image12 = 'hello.jpeg';
    $new_imag = imagecreatetruecolor($new_width, $new_height);
    imagecopyresampled($new_imag, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    
    return imagejpeg($new_imag, $image12);
    }


$filename = "panda.jpeg";
list($width, $height, $type) = getimagesize($filename);
$old_image = load_image($filename, $type);
$image_scaled = scale_image(0.8, $old_image, $width, $height);
?>

Input_Image:

php resize image - исходное изображение

Выходное_изображение:

php изменить размер изображения

Помимо этого, PHP имеет встроенную функцию, которая позволяет масштабировать изображение до указанной ширины и высоты.

См. Пример кода.

<?php
    
$out_image = "sca.jpeg";
$image_name ="panda.jpeg";
     
// Load image file
$image = imagecreatefromjpeg($image_name);
  
// Use imagescale() function to scale the image
$img = imagescale( $image, 500, 400 );
  

header("Content-type: image/jpeg");
imagejpeg($img,$out_image);
  
?>

Input_Image:

php resize image - исходное изображение

Выходное_изображение:

php изменить размер изображения