J'ai un site Web qui prend l'image téléchargée d'un utilisateur, et fait trois copies - une copie «pleine» pour imprimer avec (réduite à 1500x1125), une copie de «Web» à afficher en ligne (pas encore codé), et enfin une vignette.CodeIgniter/PHP/GD2 La manipulation d'image joue
Alors, voici le code - _imageformat() est passé les paramètres (que j'ai confirmé être correct) de classe Télécharger CI:
function _imageformat($fullpath, $shortpath, $width, $height)
{// Nous format maintenant l'image.
// Tout d'abord, nous vérifions si elle est portrait ou paysage si (largeur $> = hauteur $) // Il est paysage (ou carré) { // Maintenant, créez l'image complète d'impression $ fullimage = $ this -> _ resize ('l', $ chemin complet, $ chemin court, $ largeur, $ hauteur); } else // C'est le portrait { // Maintenant, crée l'image d'impression complète $ fullimage = $ this -> _ redimensionner ('p', $ chemin complet, $ chemin court, $ largeur, $ hauteur); }
}
fonction _resize ($ type, fullpath de $, shortpath de $, $ largeur, hauteur de $) { // Configurer l'image par défaut des options de configuration de manipulation $ config [ 'de image_library'] = 'gd2'; $ config ['image_source'] = $ chemin complet; $ config ['maintain_ratio'] = VRAI;
// Shave the '.jpg' from the end to append some nice suffixes we'll use
$newimage = substr($fullpath, 0, -4).'_full'.".jpg";
$config['new_image'] = $newimage;
if ($type == 'l') // If it's landscape
{
$config['width'] = 1500;
$config['height'] = 1125;
}
else if ($type == 'p') // If it's portrait
{
$config['width'] = 1125;
$config['height'] = 1500;
}
// Load the image library with the specified parameters, and resize the image!
$this->load->library('image_lib', $config);
$this->image_lib->resize();
// Create a thumbnail from the full image
$config['source_image'] = $newimage;
$config['new_image'] = substr($fullpath, 0, -9)."_thumb".".jpg";
$config['maintain_ratio'] = TRUE;
$config['width'] = 150;
$config['height'] = 150;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
return $newimage;
}
ce qui devrait se produire: Dans mon dossier téléchargements, il y a trois images - le fichier uploadé d'origine (nous l'appellerons image.jpg), le fichier redimensionnée (nommé image_full. jpg), et la vignette (nommée image_thumb.jpg).
Ce qui se passe: Dans mon dossier téléchargements, il n'y a que DEUX images - le fichier uploadé d'origine (image.jpg) et le fichier redimensionné (de image_full.jpg). Aucune vignette n'est jamais créée.
Ce qui est intéressant, cependant, ** est que si je place le code pour la création Miniature premier, il génère l'image miniature mais ** PAS l'image _Full (redimensionné).
Il me semble donc qu'il ne fonctionnera jamais $this->image_lib->resize()
deux fois. Pourquoi pas? Est-ce une erreur d'amateur que je fais, ou ai-je manqué quelque chose d'évident ?! : P
Merci!
Jack
Edit: Je dois signaler que oui, je sais que je suis deux fois le chargement de la bibliothèque image_lib
. J'ai compris que c'était le seul moyen de lui transmettre de nouveaux paramètres. J'ai également essayé, après avoir redimensionné l'image complète, en appelant $this->_thumbnail()
qui a chargé la bibliothèque là encore. Mais toujours le même problème s'est produit.J'ai également essayé d'utiliser $this->image_lib->clear()
- toujours pas de chance.