이미지 처리 및 GD imagecopyresampled

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

imagecopyresampled — 리샘플링으로 이미지의 일부 복사 및 크기 조정


설명

imagecopyresampled(
    GdImage $dst_image,
    GdImage $src_image,
    int $dst_x,
    int $dst_y,
    int $src_x,
    int $src_y,
    int $dst_width,
    int $dst_height,
    int $src_width,
    int $src_height
): bool
                

imagecopyresampled()는 한 이미지의 직사각형 부분을 다른 이미지로 복사하여 픽셀 값을 부드럽게 보간하여 특히 이미지 크기를 줄여도 여전히 상당한 선명도를 유지합니다.

즉, imagecopyresampled()는 (src_x, src_y) 위치에서 너비 src_width 및 높이 src_heightsrc_image에서 사각형 영역을 가져와서 (dst_x,dst_y) 위치에서 너비 dst_width 및 높이 dst_heightdst_image 사각형 영역에 배치합니다.

원본 및 대상 좌표와 너비와 높이가 다른 경우 이미지 조각의 적절한 늘이기 또는 축소가 수행됩니다. 좌표는 왼쪽 상단 모서리를 참조합니다. 이 함수는 동일한 이미지 내의 영역을 복사하는 데 사용할 수 있지만(dst_imagesrc_image와 동일한 경우) 영역이 겹치면 결과를 예측할 수 없습니다.


매개변수

dst_image
대상 이미지 리소스.
src_image
소스 이미지 리소스.
dst_x
목적지의 x 좌표.
dst_y
목적지 지점의 y 좌표.
src_x
소스 포인트의 x 좌표.
src_y
소스 포인트의 y 좌표.
dst_width
대상 너비.
dst_height
대상 높이.
src_width
소스 너비.
src_height
소스 높이.

반환 값

성공하면 true를, 실패하면 false를 반환합니다.


변경 로그

버전 설명
8.0.0 dst_imagesrc_image는 이제 GdImage 인스턴스를 예상합니다. 이전에는 리소스가 필요했습니다.

Examples

예제 #1 간단한 예

이 예에서는 이미지를 원래 크기의 절반으로 다시 샘플링합니다.

                  
<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;

// 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, null, 100);
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

function imagecopyresampled

예제 #2 이미지를 비례적으로 리샘플링

이 예는 최대 너비 또는 높이가 200픽셀인 이미지를 표시합니다.

                  
<?php
// The file
$filename = 'test.jpg';

// Set a maximum height and width
$width = 200;
$height = 200;

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

// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
} else {
   $height = $width/$ratio_orig;
}

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

// Output
imagejpeg($image_p, null, 100);
?>
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

function imagecopyresampled


메모

메모:

팔레트 이미지 제한(255+1 색상)으로 인해 문제가 있습니다. 이미지를 리샘플링하거나 필터링하려면 일반적으로 255개 이상의 색상이 필요하며, 새로운 리샘플링된 픽셀과 해당 색상을 계산하는 데 일종의 근사값이 사용됩니다.

팔레트 이미지를 사용하여 새 색상을 할당하려고 시도하고 실패하면 가장 가까운(이론적으로) 계산된 색상을 선택합니다. 이것이 항상 가장 가까운 시각적 색상은 아닙니다. 이는 빈(또는 시각적으로 빈) 이미지와 같은 이상한 결과를 생성할 수 있습니다.

이 문제를 건너뛰려면 imagecreatetruecolor()로 만든 것과 같은 트루컬러 이미지를 대상 이미지로 사용하십시오.


기타

  • imagecopyresized() - 이미지의 일부 복사 및 크기 조정
  • imagescale() - 주어진 새로운 너비와 높이를 사용하여 이미지 크기 조정
  • imagecrop() - 주어진 사각형으로 이미지 자르기