Program/Php

php 이미지 압축 리사이즈 하기

soccerda 2021. 2. 15. 18:39
반응형

이슈 png의 경우 투명 이미지를 처리하기 위해서 alpha 처리가 필요하다.

 

다른 포맷은 문제가 없지만 PNG 파일은 imagecreatetruecolor 메소드를 사용하면 투명처리된 부분이 검정으로 바뀜.

 

그래서 다른 포맷과 다른 처리 절차가 필요함.

 

파일 압축 메소드

public static function compress($source, $destination, $quality) {
    $info = getimagesize($source);
    
    if ($info['mime'] == 'image/jpeg'){
        $image = imagecreatefromjpeg($source);
        imagejpeg($image, $destination, $quality);          
    }elseif ($info['mime'] == 'image/gif'){
        $image = imagecreatefromgif($source);
        imagegif($image, $destination, $quality);          
    }elseif ($info['mime'] == 'image/png'){
        $image = imagecreatefrompng($source);
        $dst = imagecreatetruecolor($info[0], $info[1]);
        
        imagealphablending($dst, false);
        imagesavealpha($dst, true);
        $transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
        imagefilledrectangle($dst, 0, 0, $info[0], $info[1], $transparent);
        imagecopyresampled($dst, $image, 0, 0, 0, 0, $info[0], $info[1], $info[0], $info[1]);
        imagepng($dst, $destination, $quality); 
        imagedestroy($dst);
    }     
               
        return $destination;
}

 

 

이미지 리사이즈

function resize_image($file, $newfile, $persent) {
    list($width, $height) = getimagesize($file);
    if(strpos(strtolower($file), ".jpg")){
        $src = imagecreatefromjpeg($file);
    }else if(strpos(strtolower($file), ".png")){
        $src = imagecreatefrompng($file);
    }else if(strpos(strtolower($file), ".gif")){
        $src = imagecreatefromgif($file);
    }
    
    $dst = imagecreatetruecolor($width*$persent, $height*$persent);
    
    if(strpos(strtolower($file), ".png")){
        imagealphablending($dst, false);
        imagesavealpha($dst, true);
        $transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
        imagefilledrectangle($dst, 0, 0, $width*$persent, $height*$persent, $transparent);
    }
    
    
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $width*$persent, $height*$persent, $width, $height);
    
    if(strpos(strtolower($newfile), ".jpg")){
        imagejpeg($dst, $newfile);
    }else if(strpos(strtolower($newfile), ".png")){   
        imagepng($dst, $newfile);
    }else if(strpos(strtolower($newfile), ".gif")){
        imagegif($dst, $newfile);       
    }
 	imagedestroy($dst)
}

 

반응형