Ir para conteúdo
Fórum Script Brasil
  • 0

Class para manipulação de imagens


vini_loock

Pergunta

<?php
    /*----------------------------------------------------------------------------------------------------//
    //----------------------------Class de tratamento de imagem - PHP-------------------------------------//
    //----------------------------------------------------------------------------------------------------//
    //-----Todos os direitos reservados - Vinicius Siuta Borges-------------------------------------------//
    //-----Contato: viniciussiutaborges@hotmail.com-------------------------------------------------------//
    //--------||--: viniciussiutaborges@gmail.com---------------------------------------------------------//
    //----------------------------------------------------------------------------------------------------*/
    class Images{
        
        private $file, $file_name, $file_ext, $file_width, $file_height;
        private $ext_validas = array('jpg', 'jpeg', 'png', 'gif', 'wbmp');
        private $create, $create_tc;
        private $error = array();
        private $tmp_dir = 'temp', $tmp_name;
        
        public function __construct($file){
            $this->start($file);
        }
        
        public function start($file){
            if(is_file($file)){
                $info = pathinfo($file);
                $this->file = $file;
                $this->file_name = $info['filename'];
                $this->file_ext = $info['extension'];
                list($this->file_width, $this->file_height) = getimagesize($this->file);
            }
            return false;
        }
        
        public function valida(){
            if(in_array($this->file_ext, $this->ext_validas)){
                return true;
            }
            return false;
        }
        
        public function setImage($file){
            $this->start($file);
        }
        
        public function getImage(){
            return $this->file;
        }
        
        public function getError(){
            return $this->error;
        }
        
        public function getTempFile(){
            return $this->tmp_dir.'/'.$this->tmp_name.$this->file_name.'.'.$this->file_ext;
        }
        
        private function create(){
            switch($this->file_ext){
                case 'jpg':
                case 'jpeg':
                    $this->create = imagecreatefromjpeg($this->file);
                break;
                case 'gif':
                    $this->create = imagecreatefromgif($this->file);
                break;
                case 'png':
                    $this->create = imagecreatefrompng($this->file);
                break;
                case 'wbmp':
                    $this->create = imagecreatefromwbmp($this->file);
                break;
                default:
                    $this->error[] = 'Erro ao criar imagem';
                break;
            }
        }
        
        public function resize($width = null, $height = null, $type = 'relative', $finish = 'salvar', $qualidade = 80){
            $this->create();
            switch($type){
                case 'to_width':
                    $this->resize_toWidth($width);
                break;
                case 'to_height':
                    $this->resize_toWidth($width);
                break;
                case 'relative':
                    $this->resize_relative($width, $height);
                break;
            }
            $this->finaliza($finish);
        }
            
            private function resize_relative($width, $height){
                $porcentagem = ($width*100)/$this->file_width;
                $new_height = ($this->file_height*$porcentagem)/100;
                if($new_height > $height){
                    $porcentagem = ($height*100)/$this->file_height;
                    $width = ($this->file_width*$porcentagem)/100;
                }else{
                    $height = $new_height;
                }
                $this->create_tc = imagecreatetruecolor($width, $height);
                @imagecopyresampled($this->create_tc, $this->create, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
            }
            
            private function resize_toWidth($width){
                $porcentagem = ($width*100)/$this->file_width;
                $height = ($this->file_height*$porcentagem)/100;
                $this->create_tc = imagecreatetruecolor($width, $height);
                @imagecopyresampled($this->create_tc, $this->create, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
            }
            
            private function resize_toHeight($height){
                $porcentagem = ($height*100)/$this->file_width;
                $width = ($this->file_height*$porcentagem)/100;
                $this->create_tc = imagecreatetruecolor($width, $height);
                @imagecopyresampled($this->create_tc, $this->create, 0, 0, 0, 0, $width, $height, $this->file_width, $this->file_height);
            }
        
        public function crop($width = 0, $height = 0, $top = 0, $left = 0, $finish = 'salvar', $qualidade = 80){
            $this->create();
            $this->create_tc = imagecreatetruecolor($width, $height);
            @imagecopyresampled($this->create_tc, $this->create, 0, 0, $left, $top, $width, $height, $width, $height);
            $this->finaliza($finish, $qualidade);
        }
        
        public function flip($direction = 'horizontal', $finish = 'salvar', $qualidade = 80){
            $this->create();
            if($direction == 'horizontal'){
                $this->flip_horizontal();
            }else{
                $this->flip_vertical();
            }
            $this->finaliza($finish, $qualidade);
        }
            
            private function flip_horizontal(){
                $this->create_tc = imagecreatetruecolor($this->file_width, $this->file_height);
                for($i = 0; $i < $this->file_width; $i++){
                    @imagecopy($this->create_tc, $this->create, $i, 0, $this->file_width-$i-1, 0, 1, $this->file_height);
                }
            }
            
            private function flip_vertical(){
                $this->create_tc = imagecreatetruecolor($this->file_width, $this->file_height);
                for($i = 0; $i < $this->file_height; $i++){
                    @imagecopy($this->create_tc, $this->create, 0, $i, 0, $this->file_height-$i-1, $this->file_width, 1);
                }
            }
        
        public function finaliza($finish = 'salvar', $qualidade = 80){
            if($finish == 'salvar'){
                $this->salva($qualidade);
            }else{
                $this->mostra($qualidade);
            }
        }
            private function geraNome(){
                $this->tmp_name = date('YmdHis').rand(0,999);
            }
        
            private function mostra($qualidade){
                switch($this->file_ext){
                    case 'jpg':
                    case 'jpeg':
                        imagejpeg($this->create_tc, null, $qualidade);
                        header("Content-type: image/jpeg");
                        imagedestroy($this->create_tc);
                    break;
                    case 'png':
                        imagepng($this->create_tc, null, $qualidade);
                        header("Content-type: image/jpeg");
                        imagedestroy($this->create_tc);
                    break;
                    case 'gif':
                        imagegif($this->create_tc, null, $qualidade);
                        header("Content-type: image/jpeg");
                        imagedestroy($this->create_tc);
                    break;
                    case 'wbmp':
                        imagewbmp($this->create_tc, null, $qualidade);
                        header("Content-type: image/jpeg");
                        imagedestroy($this->create_tc);
                    break;
                    default:
                        $this->error[] = 'Erro ao exibir imagem';
                    break;
                }
            }
            
            private function salva($qualidade){
                $this->geranome();
                switch($this->file_ext){
                    case 'jpg':
                        imagejpeg($this->create_tc, $this->tmp_dir.'/'.$this->tmp_name.$this->file_name.'.'.$this->file_ext, $qualidade);
                        imagedestroy($this->create_tc);
                    break;
                    case 'png':
                        imagepng($this->create_tc, $this->tmp_dir.'/'.$this->tmp_name.$this->file_name.'.'.$this->file_ext, $qualidade);
                        imagedestroy($this->create_tc);
                    break;
                    case 'gif':
                        imagegif($this->create_tc, $this->tmp_dir.'/'.$this->tmp_name.$this->file_name.'.'.$this->file_ext, $qualidade);
                        imagedestroy($this->create_tc);
                    break;
                    default:
                        $this->error[] = 'Erro ao salvar imagem';
                        return false;
                    break;
                }
            }
    }
?>

Editado por vini_loock
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...