La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  Resize thumbnails
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: Resize thumbnails  (Lu 1135 fois)
Resize thumbnails
« sur: le 06-12-2011 a 00:26:10 »
darkelda
Membre récent
*

Hors-Ligne

Sexe: Male
Messages: 46





Voir le Profil    WWW    E-Mail
Répondre avec citation

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;
      }
   }

}

Rapporter au modérateur  

Webmaster/Développeur indépendant
SIRET : 533 914 107 00024


www.darkelda.com

Re:Resize thumbnails
« Répondre #1 sur: le 07-12-2011 a 14:40:16 »
vieactu
Superactif
****

Hors-Ligne

Messages: 503





Voir le Profil
Répondre avec citation

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

Rapporter au modérateur  
Re:Resize thumbnails
« Répondre #2 sur: le 07-12-2011 a 14:43:02 »
darkelda
Membre récent
*

Hors-Ligne

Sexe: Male
Messages: 46





Voir le Profil    WWW    E-Mail
Répondre avec citation

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...

Rapporter au modérateur  

Webmaster/Développeur indépendant
SIRET : 533 914 107 00024


www.darkelda.com
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg