2011-09-16 2 views
0

je l'ai écrit ce code:problème de génération d'image avec PHP forment une classe

class Generate{ 
    private $canvas; 
    function __construct($width, $height){ 
     $this->canvas = imagecreatetruecolor($width, $height); 
    } 
    public function bg($r=0,$g=0,$b=0){ 
     $color = imagecolorallocate($this->canvas, $r, $g, $b); 
     imagefill($this->canvas, 0, 0, $color); 
    } 
    public function gen(){ 
     header('Content-Type: image/png'); 
     imagepng($this->canvas, NULL, 9); 
     imagedestroy($this->canvas); 
    } 
} 

et a appelé avec ceci:

$G = new Generate(100, 100); 
$G->bg(255, 255, 255); 
$G->gen(); 

sa belle image de production quand je commente la tête dans le gen () et réglez-le pour enregistrer l'image. Comme ceci:

imagepng($this->canvas, 'img.png', 9); 

mais je veux qu'il envoie l'en-tête (sortie l'image) mais il me donne une erreur. quelqu'un peut s'il vous plaît dites-moi ce que je fais mal? pouvez-vous même envoyer des en-têtes avec une classe PHP?

ce code fonctionne très bien quand je ne l'utilise pas POO

+0

Vous voulez donc sauvegarder l'image et la sortir aussi? – sberry

+1

Vous ne nous avez pas dit ce qui se passe lorsque vous ne le commentez pas. –

+0

@ sberry2A non seulement sortie ... – Ameer

Répondre

2

La réponse à votre question est oui, vous le pouvez. Vous pouvez envoyer les en-têtes à tout moment avant d'envoyer une sortie au client, ce que je soupçonne être votre problème.

Vous pouvez également vérifier l'encodage dans lequel vous enregistrez votre fichier. Si vous enregistrez votre fichier au format UTF-8, veillez à le sauvegarder sans marque d'octet. Cela compte comme sortie, et sera toujours le premier caractère dans votre fichier, ce qui signifie que tout appel à header() va générer un avertissement.

+0

non vous vous êtes trompé ... le point n'est pas l'en-tête() c'est pourquoi son donner un erreur ... ce code fonctionne très bien si je n'utilise pas OOP – Ameer

+0

Votre question est: "pouvez-vous même envoyer des en-têtes avec-dans une classe PHP?" La réponse est oui. Peut-être devriez-vous clarifier un peu plus votre question ou, à tout le moins, fournir le message d'erreur spécifique que vous obtenez? –

+0

hmmm ... je vais le changer – Ameer

2

Le code fonctionne parfaitement pour moi lorsque je le lance comme vous l'avez posté; Etes-vous sûr que vous ne perdez pas votre image blanche 100x100 sur fond blanc? Essayez de changer la couleur pour, par exemple, 127,255,255 (une belle aqua) et voir si elle se présente.

Questions connexes