php 이미지 리사이징 질문드립니다.

php 이미지 리사이징 질문드립니다.

QA

php 이미지 리사이징 질문드립니다.

본문

디비에서 읽어온 이미지를 화면에 뿌릴때는 제가 정한 사이즈로 뿌리고 싶습니다.

 

자르기라기보단 비율을 줄이는게 맞겠네요. 

 

이에 관한 예제나 해법을 알고 계시면 알려주세요.

이 질문에 댓글 쓰기 :

답변 2

안녕하세요?

평정심 님 말씀대로 관리자모드 설정에서 조절하는 방법도 있겠지만

서버 내부의 이미지를 원하는 크기로 리사이징(확대 또는 축소)해서 보여주려면

다음과 같은 PHP 스크립트를 작성할 수 있겠네요 ^^

다만 이 방법은 웹호스팅의 설정에 따라 getimagesize() 함수가 외부서버에 대해 작동하지 않을 수 있고,

대용량 파일의 경우에는 제대로 작동하지 않을 가능성이 있습니다.

 


<?php
function resize_image($file, $dst_w, $dst_h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $ratio = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($ratio-$dst_w/$dst_h)));
        } else {
            $height = ceil($height-($height*abs($ratio-$dst_w/$dst_h)));
        }
        $newwidth = $dst_w;
        $newheight = $dst_h;
    } else {
        if ($dst_w/$dst_h > $ratio) {
            $newwidth = $dst_h*$ratio;
            $newheight = $dst_h;
        } else {
            $newheight = $dst_w/$ratio;
            $newwidth = $dst_w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $result = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($result, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    return $result;
}
$img = resize_image('PATH', WIDTH, HEIGHT); // 파일경로, 폭, 높이를 입력하세요
ob_start();
imagejpeg($img);
$output = base64_encode(ob_get_contents());
ob_end_clean();
?>
<img src="data:image/jpeg;base64,<?php echo $output; ?>"/>

안녕하세요?
채택해주셔서 감사합니다 ^^
PNG 파일의 경우에는 22, 29번째 행에 있는 jpeg를 png로 변경하시면
PNG에 해당하는 PHP 함수가 있기 때문에 정상작동합니다 :)
그리고 33번째 행도 png로 바꿔주시면 됩니다.
조금 더 간단하게 다양한 확장자를 처리하고 싶으시다면 아래 URL의 스크립트를 참고하세요~
switch 문을 이용하여 확장자를 해결하였습니다.
https://ourcodeworld.com/articles/read/197/how-to-resize-an-image-and-reduce-quality-in-php-without-imagick
그럼 뜻깊은 연말 되세요~! 감사합니다 ^-^


<?php
function resize_image($file, $dst_w, $dst_h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $ratio = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($ratio-$dst_w/$dst_h)));
        } else {
            $height = ceil($height-($height*abs($ratio-$dst_w/$dst_h)));
        }
        $newwidth = $dst_w;
        $newheight = $dst_h;
    } else {
        if ($dst_w/$dst_h > $ratio) {
            $newwidth = $dst_h*$ratio;
            $newheight = $dst_h;
        } else {
            $newheight = $dst_w/$ratio;
            $newwidth = $dst_w;
        }
    }
    
    $exploding = explode(".",$file);
    $ext = end($exploding);
    switch($ext){
        case "png":
            $src = imagecreatefrompng($file);
        break;
        case "jpeg":
        case "jpg":
            $src = imagecreatefromjpeg($file);
        break;
        case "gif":
            $src = imagecreatefromgif($file);
        break;
        default:
            $src = imagecreatefromjpeg($file);
        break;
    }
    
    $result = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($result, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    return array($result, $ext);
}
$img = resize_image('PATH', WIDTH, HEIGHT); // 파일경로, 폭, 높이를 입력하세요
ob_start();
switch($img[1]){
    case "png":
        $src = imagepng($img[0]);
    break;
    case "jpeg":
    case "jpg":
        $src = imagejpeg($img[0]);
    break;
    case "gif":
        $src = imagegif($img[0]);
    break;
    default:
        $src = imagejpeg($img[0]);
    break;
}
$output = base64_encode(ob_get_contents());
ob_end_clean();
?>
<img src="data:image/<?php echo $img[1]; ?>;base64,<?php echo $output; ?>"/>


이와 같은 방법으로 JPG와 PNG 모두 잘 작동하는 것을 확인했습니다 ^-^

답변을 작성하시기 전에 로그인 해주세요.
전체 82
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT