• Librairie image complète Codeigniter

    image de l'aticle Librairie image complète Codeigniter

    Codeigniter : Framework PHP.

    Voici une class complète pour pouvoir utiliser et télécharger des images sur votre serveur à partir du bureau comme bon vous semble pour l'administrateur d'un site ou pour les utilisateur front-office :

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
    /*
     * Prend un tableau de configuration
     * Retourne false si erreur
     * Retourne chemin de l'image si true
     */
    class Img {
        
        public $dir,
            $miniatures = TRUE,
            $file_size = 4000,
            $image_type = 'jpeg',
            $file_type = 'image/jpeg',
            $max_size = 4000,
            $quality = '100',
            
            $big_width = 800,
            $big_height = 600,
            $min_width = 200,
            $min_height = 150,
            
            $crop = FALSE;
            
        private $_filename,
            $_row_name,
            
            $_path_app,
            
            $_micortime,
            
            $_CI,
            
            $_lenght_filename = 80;
            
            private $_error = array();
        
        function __construct($config = array())
        {
            $this->_CI =& get_instance();
            $this->_CI->load->helper('text');
            $this->_CI->load->helper('url');
            
            $this->initialize($config);
            
            $this->_path_app = substr(FCPATH, 0, -1);
            $this->_micortime = str_replace('.', '',$this->_microtime_float()).'-';
        }
        
        function initialize($config)
        {
            if (count($config) > 0)
            {
                foreach ($config AS $key => $val)
                {
                    $this->$key = $val;
                }
            }
        }
        
        function set_filename($value)
        {
            $this->_filename = substr($this->_micortime.strtolower(url_title(convert_accented_characters(($value)))), 0, $this->_lenght_filename).'.jpg';
        }
        function get_filename()
        {
            return $this->_filename;
        }
        function get_image_path()
        {
            return (($this->_filename !== FALSE && $this->_filename !== TRUE) ? "{$this->dir}/{$this->_filename}" : '');
        }
        function get_miniature_path()
        {
            return (($this->_filename !== FALSE && $this->_filename !== TRUE) ? "{$this->dir}/miniatures/{$this->_filename}" : '');
        }
        
        function set_rowname($value)
        {
            $this->_row_name = $this->_micortime.strtolower(url_title(convert_accented_characters(($value))));
        }
        
        function get_error()
        {
            $str = '';
            foreach ($this->_error as $value)
            {
                $str .= $value."<br>";
            }
            return $str;
        }
        
        function do_upload($filename_post)
        {
            if (empty($_FILES[$filename_post]['name']))
                return TRUE;
            // echo $this->_path_app."/assets/img/{$this->dir}{$this->_filename}"; die();
            
            // UPLOAD IMAGES
            $this->_CI->load->library('upload');
            $this->_CI->load->library('image_lib');
            
            $configFiles = array (
                'file_ext'         =>     '.jpg',
                'file_size'        =>     $this->file_size,
                'is_image'         =>     '1',
                'image_width'      =>     '800',
                'image_height'     =>     '600',
                'image_type'       =>     $this->image_type,
                'allowed_types' =>     'gif|jpg|png', // array('gif', 'jpg', 'png'),
                'max_size'        =>     $this->max_size,
                'file_name'        =>     $this->_filename,
                'file_type'        =>     $this->file_type,
                'raw_name'         =>     $this->_row_name,
                'upload_path'      =>     $this->_path_app."/assets/img/{$this->dir}",
                'quality'         =>     $this->quality
            );
            
            $this->_CI->upload->initialize($configFiles);
            if (is_file($this->_path_app."/assets/img/{$this->dir}/{$this->_filename}"))
                unlink($this->_path_app."/assets/img/{$this->dir}/{$this->_filename}");
                
            if ( ! $this->_CI->upload->do_upload($filename_post))
            {
                $this->_set_error($this->_CI->upload->display_errors());
                return false;
            }
            
            if ($this->miniatures)
            {
                $this->_CI->upload->set_upload_path($this->_path_app."/assets/img/{$this->dir}/miniatures");
                
                if (is_file($this->_path_app."/assets/img/{$this->dir}/miniatures/{$this->_filename}"))
                    unlink($this->_path_app."/assets/img/{$this->dir}/miniatures/{$this->_filename}");
                    
                if ( ! $this->_CI->upload->do_upload($filename_post))
                {
                    $this->_set_error($this->_CI->upload->display_errors());
                    return false;
                }
            }
            
            $config['width'] = $this->big_width;
            $config['height'] = $this->big_height;
            $config['create_thumb'] = FALSE;
            $config['maintain_ratio'] = TRUE;
            $config['image_library'] = 'gd2';
            $config['source_image'] = $this->_path_app."/assets/img/{$this->dir}/{$this->_filename}";
            $config['new_image'] = $this->_path_app."/assets/img/{$this->dir}/{$this->_filename}";
            
            $this->_CI->image_lib->initialize($config);
            
            if ($this->crop)
            {
                if ( !$this->_CI->image_lib->crop())
                {
                    $this->_set_error($this->_CI->image_lib->display_errors());
                    return false;
                }
            }
            else
            {
                if ( !$this->_CI->image_lib->resize())
                {
                    $this->_set_error($this->_CI->image_lib->display_errors());
                    return false;
                }
            }
            
            if ($this->miniatures)
            {
                $this->_CI->image_lib->clear();
                
                // $config['image_library'] = 'gd2';
                $config['source_image'] = $this->_path_app."/assets/img/{$this->dir}/miniatures/{$this->_filename}";
                $config['new_image'] = $this->_path_app."/assets/img/{$this->dir}/miniatures/{$this->_filename}";
                $config['width'] = $this->min_width;
                $config['height'] = $this->min_width;
                $this->_CI->image_lib->initialize($config);
            
                // echo ($this->_path_app."/assets/img/{$this->dir}/miniatures/{$this->_filename}");
                
                if ($this->crop)
                {
                    $ratio = $this->_get_ratio($this->_path_app."/assets/img/{$this->dir}/{$this->_filename}",
                            $config['width'],
                            $config['height']);
                            
                    $config['x_axis'] = $ratio['width'];
                    $config['y_axis'] = $ratio['height'];
                    if ( !$this->_CI->image_lib->crop())
                    {
                        $this->_set_error($this->_CI->image_lib->display_errors());
                        return false;
                    }
                }
                else
                    if ( !$this->_CI->image_lib->resize())
                    {
                        $this->_set_error($this->_CI->image_lib->display_errors());
                        return false;
                    }
            }
            
            return "{$this->dir}/{$this->_filename}";
        }
        
        private function _microtime_float()
        {
            list($usec, $sec) = explode(" ", microtime());
            return ((float)$usec + (float)$sec);
        }
        private function _get_ratio($image_path)
        {
            list($width, $height) = getimagesize($image_path, $config_width, $config_height);
                        
            //Récupère les proportions
            $p_h = $height/$config_height;
            $p_w = $width/$config_width;
            $p_x = 0;
            $p_y = 0;
            if ($p_w<$p_h)
            {
                $h = $height/$p_w;
                $w = $width;
                $p_y = ($height-$config_height)/2;
            }
            else
            {
                $w = $width/$p_h;
                $h = ($height);
                $p_x = ($width-$config_width)/2;
            }
            
            return array('width' => $p_x, 'height' => $p_y);
        }
        
        private function _set_error($error)
        {
            $this->_error[] = $error;
        }
    }

    Pour l'utiliser dans votre contrôleur, rien de plus simple :

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    /*
    * Attention, le dossier des images de la librairie se trouve à la base de l'application codeigniter dans le dossier
    * "assets/img/". Ceci est modifiable qu'en dur dans la librairie
    */

    class Pages extends CI_Controller {

        private $_config_Img = array (
                    'dir' => 'pages', // le dossier vers lequel envoyer l'image (obligatoire)
                    'miniatures' => TRUE, // si true mettre un dossier "miniatures" dans le dossier parent
                    'file_size' => '3000',
                    'image_type' => 'jpeg',
                    'file_type' => 'image/jpeg',
                    'max_size' => 4000, // taille maximum de l'image à uploader, si dépasse abandont et retourne erreur
                    'quality' => '100',
                    'big_width' => 580, // largeur de la grande image lors du redimensionnement
                    'big_height' => 286, // hauteur de la grande image lors du redimensionnement
                    'min_width' => 130, // largeur de la grande image lors du redimensionnement
                    'min_height' => 63, // hauteur de la grande image lors du redimensionnement
                    'crop' => FALSE // si true rogne l'image lors du redimmensionnement
                );
        
        function __construct()
        {
            parent::__construct();
        }
    function save()
        {
    // Chargement de la librairie pour la rendre disponible
            $this->load->library('img');
                
    // Initialisation de la librairie
            $this->img->initialize($this->_config_Img);

    // Je récupère le nom de la page que je suis en train de créer :
    $name_page = $this->input->post('name_pages', TRUE);
    // La librairie se charge de nettoyer le nom de l'image et d'enlever tous les caratères superflux
           $this->img->set_filename($name_page);
            $this->img->set_rowname($name_page);

    // Ici on commence l'upload de l'image vers le serveur, si == false, erreur à afficher
    if (($dir_file = $this->img->do_upload("image_pages")) == FALSE)
            {
                  $error_message = $this->img->get_error();
            }

    // Si tout c'est bien passé, on récupère le path des images avec leur nom
    $big_image_path = $this->img->get_image_path(); $miniature_image_path = $this->img->get_miniature_path();
    }
    }

Laissez un commentaire

* Votre e-mail ne sera jamais utilisé ou donné à un tiers

Recherche

Catégories

Newsletters

Archives