>  기사  >  백엔드 개발  >  썸네일을 만들 때 이미지 비율을 어떻게 유지하나요?

썸네일을 만들 때 이미지 비율을 어떻게 유지하나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-09 07:53:02828검색

How do I maintain image proportions when creating thumbnails?

썸네일 만들기: 이미지 비율 유지

질문에서는 업로드된 이미지에서 썸네일을 만들어 이미지의 측면이 유지되도록 하는 것이 목표입니다. 비율. 이에 대해 자세히 설명하겠습니다.

화면 비율의 중요성

이미지의 원래 모양을 유지하고 왜곡을 방지하려면 이미지의 화면 비율을 유지하는 것이 중요합니다. 비율을 유지하지 않으면 썸네일이 찌그러지거나 늘어져 이미지의 시각적 무결성이 손상될 수 있습니다.

Imagick을 사용하여 썸네일 생성

이미지의 측면을 존중하는 썸네일을 생성하려면 비율이 높을 경우 고급 이미지 조작 기능을 제공하는 Imagick 라이브러리 활용을 고려해 보세요. 함수 예시는 다음과 같습니다.

/**
 * 
 * Generate Thumbnail using Imagick class
 *  
 * @param string $img
 * @param string $width
 * @param string $height
 * @param int $quality
 * @return boolean on true
 * @throws Exception
 * @throws ImagickException
 */
function generateThumbnail($img, $width, $height, $quality = 90)
{
    if (is_file($img)) {
        $imagick = new Imagick(realpath($img));
        $imagick->setImageFormat('jpeg');
        $imagick->setImageCompression(Imagick::COMPRESSION_JPEG);
        $imagick->setImageCompressionQuality($quality);
        $imagick->thumbnailImage($width, $height, false, false);
        $filename_no_ext = reset(explode('.', $img));
        if (file_put_contents($filename_no_ext . '_thumb' . '.jpg', $imagick) === false) {
            throw new Exception("Could not put contents.");
        }
        return true;
    }
    else {
        throw new Exception("No valid image provided with {$img}.");
    }
}

이 함수는 ThumbnailImage 메서드를 사용하여 원래 가로세로 비율을 유지하면서 지정된 너비와 높이의 썸네일을 생성합니다.

대체 썸네일 생성

또는 GD 라이브러리를 사용하여 썸네일을 만들 수도 있습니다. 이미지의 종횡비를 유지하기 위해 적절한 크기를 결정해야 하기 때문에 이 접근 방식에는 더 많은 수동 계산이 필요합니다.

다음은 GD 라이브러리를 사용하여 썸네일을 만드는 방법을 보여주는 함수 예제입니다.

function makeThumbnails($updir, $img, $id)
{
    $thumbnail_width = 134;
    $thumbnail_height = 189;
    $thumb_beforeword = "thumb";
    $arr_image_details = getimagesize("$updir" . $id . '_' . "$img"); // pass id to thumb name
    $original_width = $arr_image_details[0];
    $original_height = $arr_image_details[1];
    if ($original_width > $original_height) {
        $new_width = $thumbnail_width;
        $new_height = intval($original_height * $new_width / $original_width);
    } else {
        $new_height = $thumbnail_height;
        $new_width = intval($original_width * $new_height / $original_height);
    }
    $dest_x = intval(($thumbnail_width - $new_width) / 2);
    $dest_y = intval(($thumbnail_height - $new_height) / 2);
    if ($arr_image_details[2] == IMAGETYPE_GIF) {
        $imgt = "ImageGIF";
        $imgcreatefrom = "ImageCreateFromGIF";
    }
    if ($arr_image_details[2] == IMAGETYPE_JPEG) {
        $imgt = "ImageJPEG";
        $imgcreatefrom = "ImageCreateFromJPEG";
    }
    if ($arr_image_details[2] == IMAGETYPE_PNG) {
        $imgt = "ImagePNG";
        $imgcreatefrom = "ImageCreateFromPNG";
    }
    if ($imgt) {
        $old_image = $imgcreatefrom("$updir" . $id . '_' . "$img");
        $new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
        imagecopyresized($new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height);
        $imgt($new_image, "$updir" . $id . '_' . "$thumb_beforeword" . "$img");
    }
}

이러한 기능 중 하나를 활용하면 원본 이미지의 화면 비율을 유지하는 썸네일이 제공됩니다.

위 내용은 썸네일을 만들 때 이미지 비율을 어떻게 유지하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.