Pular para o conteúdo principal

Redimensionar imagem no php



Achei uma classe legal para redimensionar imagem.

Para usá-la faça assim:



// redimensiona a imagem se ela for maior que o tamanho limite

$resizeObj = new resize();

$resizeObj->setImage('./img_old_5.png');

if($resizeObj->getWidth()>300 || $resizeObj->getHeight()>400){

    $resizeObj->resizeImage(300, 400);

    $resizeObj->saveImage('./redimensionado.jpg', 80);

}



A classe está abaixo:



# ========================================================================#

#

#  Author:    Rajani .B

#  Version:     1.0

#  Date:      07-July-2010

#  Purpose:   Resizes and saves image

#  Requires : Requires PHP5, GD library.

#  Usage Example:

#                     include("classes/resize_class.php");

#                     $resizeObj = new resize('images/cars/large/input.jpg');

#                     $resizeObj -> resizeImage(150, 100, 0);

#                     $resizeObj -> saveImage('images/cars/large/output.jpg', 100);

#

#

# ========================================================================#



Class resize {



    // *** Class variables

    private $image;

    private $width;

    private $height;

    private $imageResized;



    public function getWidth() {

        return $this->width;

    }



    public function getHeight() {

        return $this->height;

    }



    function __construct($fileName="") {

        if(file_exists($fileName)){

            $this->setImage($fileName);

        }

    }

   

    public function setImage($fileName){

        // *** Open up the file

        $this->image = $this->openImage($fileName);



        // *** Get width and height

        $this->width = @imagesx($this->image);

        $this->height = @imagesy($this->image);

    }



    private function openImage($file) {

        // *** Get extension

        $extension = strtolower(strrchr($file, '.'));



        switch ($extension) {

            case '.jpg':

            case '.jpeg':

                $img = @imagecreatefromjpeg($file);

                break;

            case '.gif':

                $img = @imagecreatefromgif($file);

                break;

            case '.png':

                $img = @imagecreatefrompng($file);

                break;

            default:

                $img = false;

                break;

        }

        return $img;

    }



    public function resizeImage($newWidth, $newHeight, $option="auto") {

        // *** Get optimal width and height - based on $option

        $optionArray = $this->getDimensions($newWidth, $newHeight, $option);



        $optimalWidth = $optionArray['optimalWidth'];

        $optimalHeight = $optionArray['optimalHeight'];





        // *** Resample - create image canvas of x, y size

        $this->imageResized = @imagecreatetruecolor($optimalWidth, $optimalHeight);

        @imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);





        // *** if option is 'crop', then crop too

        if ($option == 'crop') {

            $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);

        }

    }



    private function getDimensions($newWidth, $newHeight, $option) {



        switch ($option) {

            case 'exact':

                $optimalWidth = $newWidth;

                $optimalHeight = $newHeight;

                break;

            case 'portrait':

                $optimalWidth = $this->getSizeByFixedHeight($newHeight);

                $optimalHeight = $newHeight;

                break;

            case 'landscape':

                $optimalWidth = $newWidth;

                $optimalHeight = $this->getSizeByFixedWidth($newWidth);

                break;

            case 'auto':

                $optionArray = $this->getSizeByAuto($newWidth, $newHeight);

                $optimalWidth = $optionArray['optimalWidth'];

                $optimalHeight = $optionArray['optimalHeight'];

                break;

            case 'crop':

                $optionArray = $this->getOptimalCrop($newWidth, $newHeight);

                $optimalWidth = $optionArray['optimalWidth'];

                $optimalHeight = $optionArray['optimalHeight'];

                break;

        }

        return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

    }



    private function getSizeByFixedHeight($newHeight) {

        $ratio = $this->width / $this->height;

        $newWidth = $newHeight * $ratio;

        return $newWidth;

    }



    private function getSizeByFixedWidth($newWidth) {

        $ratio = $this->height / $this->width;

        $newHeight = $newWidth * $ratio;

        return $newHeight;

    }



    private function getSizeByAuto($newWidth, $newHeight) {

        if ($this->height < $this->width) {

        // *** Image to be resized is wider (landscape)

            $optimalWidth = $newWidth;

            $optimalHeight = $this->getSizeByFixedWidth($newWidth);

        } elseif ($this->height > $this->width) {

        // *** Image to be resized is taller (portrait)

            $optimalWidth = $this->getSizeByFixedHeight($newHeight);

            $optimalHeight = $newHeight;

        } else{

        // *** Image to be resizerd is a square {

            if ($newHeight < $newWidth) {

                $optimalWidth = $newWidth;

                $optimalHeight = $this->getSizeByFixedWidth($newWidth);

            } else if ($newHeight > $newWidth) {

                $optimalWidth = $this->getSizeByFixedHeight($newHeight);

                $optimalHeight = $newHeight;

            } else {

                // *** Sqaure being resized to a square

                $optimalWidth = $newWidth;

                $optimalHeight = $newHeight;

            }

        }



        return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

    }



    ## --------------------------------------------------------



    private function getOptimalCrop($newWidth, $newHeight) {



        $heightRatio = $this->height / $newHeight;

        $widthRatio = $this->width / $newWidth;



        if ($heightRatio < $widthRatio) {

            $optimalRatio = $heightRatio;

        } else {

            $optimalRatio = $widthRatio;

        }



        $optimalHeight = $this->height / $optimalRatio;

        $optimalWidth = $this->width / $optimalRatio;



        return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);

    }



    ## --------------------------------------------------------



    private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight) {

        // *** Find center - this will be used for the crop

        $cropStartX = ( $optimalWidth / 2) - ( $newWidth / 2 );

        $cropStartY = ( $optimalHeight / 2) - ( $newHeight / 2 );



        $crop = $this->imageResized;

        //imagedestroy($this->imageResized);

        // *** Now crop from center to exact requested size

        $this->imageResized = @imagecreatetruecolor($newWidth, $newHeight);

        imagecopyresampled($this->imageResized, $crop, 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight, $newWidth, $newHeight);

    }



    ## --------------------------------------------------------



    public function saveImage($savePath, $imageQuality="100") {

        // *** Get extension

        $extension = strrchr($savePath, '.');

        $extension = strtolower($extension);



        switch ($extension) {

            case '.jpg':

            case '.jpeg':

                if (imagetypes() & IMG_JPG) {

                    @imagejpeg($this->imageResized, $savePath, $imageQuality);

                }

                break;



            case '.gif':

                if (imagetypes() & IMG_GIF) {

                    @imagegif($this->imageResized, $savePath);

                }

                break;



            case '.png':

                // *** Scale quality from 0-100 to 0-9

                $scaleQuality = round(($imageQuality / 100) * 9);



                // *** Invert quality setting as 0 is best, not 9

                $invertScaleQuality = 9 - $scaleQuality;



                if (imagetypes() & IMG_PNG) {

                    @imagepng($this->imageResized, $savePath, $invertScaleQuality);

                }

                break;



            // ... etc



            default:

                // *** No extension - No save.

                break;

        }



        @imagedestroy($this->imageResized);

    }

}

Comentários

Postagens mais visitadas deste blog

Lista de órgãos emissores de RG

Para quem quiser normalizar os órgãos emissores de RG, aí vai uma lista retirada do site da FGV: SSP - Secretaria de Segurança Pública PM - Polícia Militar PC - Policia Civil CNT - Carteira Nacional de Habilitação DIC - Diretoria de Identificação Civil CTPS - Carteira de Trabaho e Previdência Social FGTS - Fundo de Garantia do Tempo de Serviço IFP - Instituto Félix Pacheco IPF - Instituto Pereira Faustino IML - Instituto Médico-Legal MTE - Ministério do Trabalho e Emprego MMA - Ministério da Marinha MAE - Ministério da Aeronáutica MEX - Ministério do Exército POF - Polícia Federal POM - Polícia Militar SES - Carteira de Estrangeiro SJS - Secretaria da Justiça e Segurança SJTS - Secretaria da Justiça do Trabalho e Segurança ZZZ - Outros (inclusive exterior)

Função php que gera número romano

/**  * Funcao que serve para transformar o numero em romano  * @param integer $integer Recebe algum numero inteiro  * @return string Retorna a string do numero romano  */ function fRomano($integer) {     $table = array('M'=>1000, 'CM'=>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC'=>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX'=>9, 'V'=>5, 'IV'=>4, 'I'=>1);     $return = '';     while($integer > 0) {         foreach($table as $rom=>$arb) {             if($integer >= $arb) {                 $integer -= $arb;                 $return .= $rom;                 break;             }         }     }     return $return; }