[A peu près résolu] [PHP] Pb création d'image avec libgd

Edit: Oups désolé, j’avais pas vu la sous-partie “webdev”

J’ai une classe, qui lors de l’instanciation, me crée $im, qui est une ressource image de libgd. je veux pouvoir récupérer cette image par petit bout. Concrétement, je veux avoir une partie en GIF, et une autre en JPG.

J’ai mon index.php
[codebox]<?php
require ‘kss_header.php’;
$ch = new Kss_header(0);
?>[/codebox]

J’instancie ma class kss_reader. J’ai des +sieurs méthodes getBanner(), qui me découperont l’image. Pour l’instant ça me renvoie juste l’image entière.

[codebox]function getBanner()
{
header(“Content-type: image/jpeg”);
imagejpeg($this->im,NULL,90);
}[/codebox]

Et donc, dans mon index.php, à un moment j’ai

[codebox][/codebox]

Il me dit que le header ne peut pas être modifié, ce que je conçois très bien, puisque le header du .php en lui même sera un truc du genre "Content: HTML…"
Là, il m’affiche le contenu du jpeg, en dur. Comment lui faire comprendre que getBanner() me renvoie une image?

J’espère m’être bien fait comprendre.
Merci !

<img src="<?php $ch->getBanner();?>"/>est l’adresse de l’image, là tu envoies le contenu.

mais encore ? B)

Pasqu’avant en fait, je faisais

, avec exactement la même chose, imagejpeg() à la fin etc etc. Là, la seule chose différente, c’est que j’instancie un objet, pasque le background est choisi au pif dans un répertoire, et que j’veux pouvoir en tirer 2 images différentes (j’ai besoin de transparence, et le png est trop gros :’( )

Tu devrais avoir ça plutôt <img src="image.php" /> et un fichier image.php contenant <?php $ch->getBanner();?>

oui, mais!

si je fais s’que tu m’dis, j’obtiendrai UNE image. Moi ce que je veux, c’est pouvoir en créer 2 à la suite de manipulation dessus: une partie en GIF, une partie en JPEG.
Le problême aussi, c’est que je choisi une image et une citation au hasard. Donc si j’crée 2 fichiers php pour ma bordure + le centre, il faudrait que j’indique quel fichier prendre au deux. J’imagine très bien une solution en passant des paramétres, mais j’trouve ça un peu bricolage B)

Comment tu compte faire pour afficher deux images avec une seule balise ?

edit:N’ai rien dit, n’avais pas bien compris le but du jeu.

Tu dois repasser une deuxième fois à coup de fonctions images de php sur ta première ressource pour y superposer ton gif transparent, tu auras ensuite une ressource image que tu n’auras plus qu’à traiter comme tu veux (l’envoyer au browser, la sauver quelque part et mettre le chemin dans ta balise).

Pour mieux expliquer:

quand j’instancie mon objet kss_header(), $this->im, l’image obtenu est celle là.

Mais, problêmes:

  • le jpg gére pas la transparence, donc c’est chiant
  • le png est trop gros, en comparaison, ça me créerai un fichier de 200 Ko, 60 seulement en jpeg
  • le gif, 256 couleurs, c’est vraiment pas assez.

Donc! J’ai pensé qu’on pouvait créer l’image, et avoir +sieurs méthodes, qui bosserai sur $this->im, par exemple :
getBanner_Center(), qui me renverrai un jpeg, en découpant le centre
getBanner_Top(), me renverrai un gif, en découpant le haut
etc.

Si j’ai crée un objet, c’est pasque l’image à gauche est choisie au hasard, et la quote aussi. je voulais donc travailler à partir de l’image totale, finie, sans rappeler la bdd.

Mais voilà, j’arrive pas à les afficher B)

A chaud, je te conseillerais plutôt de mettre l’image principale de ta bannière dans un div et le gif dans une balise img positionnée à l’intérieur de ce div en spécifiant les noms des images au hasard plutôt que de recréer des images temporaires à chaque chargement de pages. Tu économises des ressources et ça te prendra moins de temps de créer un petit script qui tire au hasard les images (et l’emplacement du gif) que de manipuler des ressources images.

Oui créer les images en dur oui c’est possible. Mais déjà, j’vais avoir plein de citation différentes, ça fera plein d’image différentes. combiné à des images de gauche différentes, ben j’vais me retrouver avec plein plein d’images à la fin.
Enfin, ce n’est pas vraiment un pb la taille, et oui ça économisera en ressource serveurs (quoique j’m en tape, c’est free B))

Mais n’empéche que ça doit être possible en faisant comme je fais. Je vois le pb de header et patati pata, mais je vois pas comment le résoudre, et c’est plutot ça qui m’embéte. C’est plus par curiosité intellectuelle que j’essaie de résoudre ça, pasque j’avais déjà pensé à des solutions ^^ c’est un site perso donc j’ai l’temps B)

Nan mais c’est pas vraiment que c’est important de faire souffrir les serveurs de free, c’est juste que ça mettrait plus de temps à s’afficher pour les gens qui viennent sur le site.
Pour le reste, tu dois absolument travailler sur ta première ressource image et y apporter les transformations nécessaires (redessiner ton gif dessus) pour au final sortir une seule image; pas besoin de créer deux ressources différentes.

Regardes du côté d’ImageMagick et de la fonction Composite:
http://www.imagemagick.org/script/index.php

Je ne comprends pas s’que tu veux m’dire avec le gif par au dessus. Manipuler les images n’est pas le pb. L’image que tu vois au dessu est crée à partir d’un png (le background), d’un autre (le perso de gauche), le texte est appliqué dessus, et après j’applique un mask en regardant pixel par pixel le channel alpha du background d’origine, pour découper correctement le perso par rapport à la bordure.

C’est le fichier finale qui est le pb.

Mais bon j’vais trouver.

Bon alors, j’ai à moitié résolu le pb:
au début de mon index.php :

<?php include 'kss_header.php'; $ch = new Kss_header(0); $ch->getBanner(); $ch->getBanner3(); ?>

et je crée un fichier
imagegif($im_petit,“banner_top.php”);
J’ai du virer les header, ça me semble louche, mais FF voulait pas avec (ie si, va savoir charles).

j’affiche comme ça .

Alors ça marche impec en local, mais pas sur free…