Probleme librairie imagine avec des images haute resolution

Par xenos92, il y a 8 ans


Bonjour,

J'espere trouver de l'aide à mon probleme je suis bloqué depuis un bon moment et malgré de nombreuses recherches je ne trouve pas comment faire...
J'utilise le framwork Codeigniter et la librairies imagine pour creer des miniatures d'images a la volée dans mon site.
Le probleme est que mon code de creation de miniature bug si je poste une image haute resolution ... (exemple 3000x4000).
Comment faire pour resoudre ce probleme, d'ou vient cette limitation ?

Ce que je fais

Voici la class de ma librairies image qui effectue le cropping a la volée :
Image.php :around

class Image{ static function crop($image,$width,$height) { $info = pathinfo($image); //Je creer mes miniatures dans un dossier min $folder = $info['dirname'].'/min/'; if(!is_dir($folder)) { mkdir($folder,0777); } //Je rajoute les parametres au nom de mon image $dest = $folder.$info['filename']."_$width"."x$height.".$info['extension']; if(file_exists($dest)) { //return base_url($dest.'?'.rand()); return base_url($dest); } require_once (APPPATH."libraries/imagine.phar"); $imagine = new Imagine\Gd\Imagine(); $size = new Imagine\Image\Box($width,$height); $options = array( 'quality' => 100, ); $imagine->open($image)->thumbnail($size,'outbound')->save($dest,$options); return base_url($dest); } }

Dans une page html comment je l'appelle :

<img src="<?php echo Image::crop($r->image,340,200).'?'.rand();?>" alt="image">

Lorsqu'une image est trop grande ( je ne saurais dire a partir de quelle taille d'ailleurs) mon script plante carrement, la miniature n'existe pas et du coup toute ma page est stoppé a partir de l'erreur de la miniature ... ce qui est assez pénible.

10 réponses

Carouge10, il y a 8 ans

Bonjour,
Es-tu sur que cela viens de ton script ?

  • Cela peut venir de la configuration de la librairie (ce que je ne pense pas)
  • Cela peut venir du temps d'exécution de ton script.

As-tu regarder du côter des logs pour savoir s'il y avait quelque chose ?

betaWeb, il y a 8 ans

Salut,

Je rejoins @Carouge10, regarde tes logs d'erreurs.
De plus, j'ai une petite remarque : si tu as 10 images sur ta page et que tu appelles ta classe pour chacune d'elle, en fonction de la taille de tes images ça va faire une sacré charge pour ton serveur ! C'est dynamique ou tu as possibilité d'enregistrer les dites images déjà croppées ?

xenos92, il y a 8 ans

Bonjour merci pour vos réponses,
@Carouge10 excuse ma question, je suis encore débutant ou puis-je voir ces fameux logs ? Oui je pense aussi que ca doit venir du temps d'execution mais comment faire ?
@betaWeb Oui dans mon script les images sont crees dans un dossier min si elles n'existent pas sinon elles sont recuperées

Carouge10, il y a 8 ans

Tu travailles en local ou en ligne ?
Wamp, xamp....

xenos92, il y a 8 ans

Je travaille sur Mamp en local

Carouge10, il y a 8 ans

Danc le dossier de Mamp, tu vas avoir dedans un dossier "logs" avec des fichiers.
Regarde dans "php_error"

xenos92, il y a 8 ans

Merci ;)
Ca m'affiche ceci :

[19-Oct-2017 20:43:44 Europe/Berlin] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 48000001 bytes) in phar:///Applications/MAMP/htdocs/app/armee_project/application/libraries/imagine.phar/Gd/Image.php on line 2
Carouge10, il y a 8 ans

Maintenant dans "/bin/php/votre_version_de_php/, ouvrez le fichier php.ini
Dans ce fichier trouver la ligne contenant "memory_limit =" vers la ligne 417 pour moi.
Redémarrer Mamp et vérifier si l'erreur apparait toujours

xenos92, il y a 8 ans

Mon memory_limit est de 128M

EDIT : Ah ba nickel je l'ai passé a 256M et ca à l'air de fonctionner ;)
Super merci @Carouge10 j'ai appris un truc ce soir :)

Carouge10, il y a 8 ans

Essaye de le doublé pour voir