2010-08-26 5 views
1

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.

Répondre

2

Vous devez charger la bibliothèque qu'une seule fois et l'initialiser avec différentes configs:

$this->load->library('image_lib'); 

// full image stuff 
$this->image_lib->initialize($config); 
$this->image_lib->resize(); 

// thumbnail stuff 
$this->image_lib->initialize($config); 
$this->image_lib->resize();