Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: darkelda le le 06-12-2011 a 00:26:10

Titre: Resize thumbnails
Posté par: darkelda le le 06-12-2011 a 00:26:10

J'ai créé un issue sur GitHub : https://github.com/nicolasramy/CakePHP-Components/issues

Pour faire plus simple, j'ai une bonne petite classe qui crée facilement des thumbnails dans différentes tailles. Le Composant est de base pour CakePHP mais peut facilement être utilisé en externe.

Je vais essayé de partagé au maximum certains de mes composants cakephp qui peuvent être fort utile dans divers projets et donc réutilisé par cette communauté.

Seul hic avec mon composant c'est que pour le moment, il n'est compatible que pour GD2 et surtout que pour des images ayant une largeur très importante, cette dernière est souvent privilégiée ... ce qui est dommage dans certain cas...

Pour ceux qui veulent l'utiliser en standalone, il suffit de suivre le code suivant en enlevant "extends Object"

https://github.com/nicolasramy/CakePHP-Components/blob/master/app/Controller/Component/fileupload.php



Code:

<?php
class fileuploadComponent extends Object
{
   var $resolutions = array
   (
      'x-small'   => array('w' => 120,'h' => 60),
      'small'      => array('w' => 265,'h' => 150),
      'medium'   => array('w' => 320,'h' => 180),
      'large'      => array('w' => 530,'h' => 300),
      'vga'      => array('w' => 640,'h' => 480),
      'hd'      => array('w' => 1280,'h' => 720),
      'fullhd'   => array('w' => 1920,'h' => 1080)
   );

   var $fileTypes = array
   (
      'image/jpeg'   => 'jpg',
      'image/pjepg'   => 'jpg',
      'image/png'      => 'png',
      'image/x-png'   => 'png',
      'image/gif'      => 'gif'
   );


   /**
    * Check file type is image
    */
   function is_image($data)
   {
      $authorized = array
      (
         'image/jpeg',
         'image/pjepg',
         'image/png',
         'image/x-png',
         'image/gif'
      );

      return in_array($data,$authorized);
   }


   /**
    * Save file
    */
   function save($path, $file)
   {
      if ($this->is_image($file['type']) && !empty($file))
      {
         $name = uniqid() . md5($file['name']);

         /**
          * Store original uploaded file
          */
         if (!move_uploaded_file($file['tmp_name'], 'files/' . $path . '/original/' . $name))
         {
            return false;
         }


         /**
          * Create GD ressource from origin image type
          */
         if ($this->fileTypes[$file['type'] == 'jpg')
         {
            $image = imagecreatefromjpeg('files/' . $path . '/original/' . $name);
         }
         else if ($this->fileTypes[$file['type'] == 'png')
         {
            $image = imagecreatefrompng('files/' . $path . '/original/' . $name);
         }
         else if ($this->fileTypes[$file['type'] == 'gif')
         {
            $image = imagecreatefromgif('files/' . $path . '/original/' . $name);
         }
         else
         {
            return false;
         }


         /**
          * Generate thumbnail
          */
         if (!$this->thumbnail($path, $name, $image, $this->fileTypes[$file['type']))
         {
            return false;
         }

         return $name;
      }
      else
      {
         return false;
      }
   }


   /**
    * Generate thumbnails
    */
   function thumbnail($path, $name, $image, $type)
   {
      if ($image)
      {
         $w = imagesx($image);
         $h = imagesy($image);
         $r = $h / $w;

         foreach ($this->resolutions as $label => $resolution)
         {
            /**
             * Image is a squarre
             */
            if ($r == 1)
            {
               $tb_w = $resolution['h'];
               $tb_h = $resolution['h'];
            }
            else
            {
               $tb_w = ($w * $resolution['h']) / $h;
               $tb_h = $resolution['h'];
            }


            if ($type == 'jpg')
            {
               $tb = imagecreatetruecolor($tb_w, $tb_h);

               if (!imagecopyresampled($tb, $image, 0, 0, 0, 0, $tb_w, $tb_h, $w, $h))
               {
                  return false;
                  break;
               }

               imagejpeg($tb, 'files/' . $path . '/' . $label . '/' . $name, 85);
            }
            else if ($type == 'png')
            {
               $tb = imagecreate($tb_w, $tb_h);

               if (!imagecopyresampled($tb, $image, 0, 0, 0, 0, $tb_w, $tb_h, $w, $h))
               {
                  return false;
                  break;
               }

               imagepng($tb, 'files/' . $path . '/' . $label . '/' . $name, 2);
            }
            else if ($type == 'gif')
            {
               $tb = imagecreate($tb_w, $tb_h);

               if (!imagecopyresampled($tb, $image, 0, 0, 0, 0, $tb_w, $tb_h, $w, $h))
               {
                  return false;
                  break;
               }

               imagegif($tb, 'files/' . $path . '/' . $label . '/' . $name);
            }
            else
            {
               return false;
            }

         }
         return true;
      }
      else
      {
         return false;
      }
   }

}

Titre: Re:Resize thumbnails
Posté par: vieactu le le 07-12-2011 a 14:40:16

quel est le but final en fait ? ça aiderait à t'aider

Titre: Re:Resize thumbnails
Posté par: darkelda le le 07-12-2011 a 14:43:02

Citation:
Pour faire plus simple, j'ai une bonne petite classe qui crée facilement des thumbnails dans différentes tailles.

Citation:
Seul hic avec mon composant c'est que pour le moment, il n'est compatible que pour GD2 et surtout que pour des images ayant une largeur très importante, cette dernière est souvent privilégiée ... ce qui est dommage dans certain cas...


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.