Resize images with PHP, support PNG, JPG

前端 未结 7 1401
囚心锁ツ
囚心锁ツ 2020-12-08 01:37

I am using this class:

class ImgResizer {

function ImgResizer($originalFile = \'$newName\') {
    $this -> originalFile = $originalFile;
}
function resiz         


        
7条回答
  •  爱一瞬间的悲伤
    2020-12-08 01:58

    I took the P. Galbraith's version, fixed the errors and changed it to resize by area (width x height). For myself, I wanted to resize images that are too big.

    function resizeByArea($originalFile,$targetFile){
    
        $newArea = 375000; //a little more than 720 x 480
    
        list($width,$height,$type) = getimagesize($originalFile);
        $area = $width * $height;
    
    if($area > $newArea){
    
        if($width > $height){ $big = $width; $small = $height; }
        if($width < $height){ $big = $height; $small = $width; }
    
        $ratio = $big / $small;
    
        $newSmall = sqrt(($newArea*$small)/$big);
        $newBig = $ratio*$newSmall;
    
        if($width > $height){ $newWidth = round($newBig, 0); $newHeight = round($newSmall, 0); }
        if($width < $height){ $newWidth = round($newSmall, 0); $newHeight = round($newBig, 0); }
    
        }
    
    switch ($type) {
        case '2':
                $image_create_func = 'imagecreatefromjpeg';
                $image_save_func = 'imagejpeg';
                $new_image_ext = '.jpg';
                break;
    
        case '3':
                $image_create_func = 'imagecreatefrompng';
             // $image_save_func = 'imagepng';
             // The quality is too high with "imagepng"
             // but you need it if you want to allow transparency
                $image_save_func = 'imagejpeg';
                $new_image_ext = '.png';
                break;
    
        case '1':
                $image_create_func = 'imagecreatefromgif';
                $image_save_func = 'imagegif';
                $new_image_ext = '.gif';
                break;
    
        default: 
                throw Exception('Unknown image type.');
    }
    
        $img = $image_create_func($originalFile);
        $tmp = imagecreatetruecolor($newWidth,$newHeight);
        imagecopyresampled( $tmp, $img, 0, 0, 0, 0,$newWidth,$newHeight, $width, $height );
    
        ob_start();
        $image_save_func($tmp);
        $i = ob_get_clean();
    
        // if file exists, create a new one with "1" at the end
        if (file_exists($targetFile.$new_image_ext)){
          $targetFile = $targetFile."1".$new_image_ext;
        }
        else{
          $targetFile = $targetFile.$new_image_ext;
        }
    
        $fp = fopen ($targetFile,'w');
        fwrite ($fp, $i);
        fclose ($fp);
    
        unlink($originalFile);
    }
    

    If you want to allow transparency, check this : http://www.akemapa.com/2008/07/10/php-gd-resize-transparent-image-png-gif/

    I tested the function, it works fine!

提交回复
热议问题