darkelda
Membre récent

Hors-Ligne
Sexe: 
Messages: 46

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