2010-12-02 4 views
0

Im en utilisant le code suivant pour prendre une image, convertir en niveaux de gris, puis enregistrer l'image en niveaux de gris:l'écriture de nouvelles données d'image dans un fichier après la conversion en niveaux de gris php

$imagename = "$imagename"; // path to previously uploaded color jpeg 

     $im = ImageCreateFromJpeg($imagename); 

    $imgw = imagesx($im); 
    $imgh = imagesy($im); 

    for ($i=0; $i<$imgw; $i++) 
    { 
      for ($j=0; $j<$imgh; $j++) 
      { 

        $rgb = ImageColorAt($im, $i, $j); 

        $rr = ($rgb >> 16) & 0xFF; 
        $gg = ($rgb >> 8) & 0xFF; 
        $bb = $rgb & 0xFF; 

        $g = round(($rr + $gg + $bb)/3); 

        $val = imagecolorallocate($im, $g, $g, $g); 

        imagesetpixel ($im, $i, $j, $val); 
      } 
    } 

    $grayimgpath = "step2cache/".$saltname."_gray.jpg"; //$saltname is a randomly generated image name 



$fh = fopen($grayimgpath, 'w') or die("can't open file"); 
fwrite($fh, $im); 
fclose($fh); 

Le problème est, quand je accéder à ce fichier, son vide, 15 octets.

Que manque-t-il ici?

Répondre

2

Vous essayez d'écrire dans le fichier une image traite pas des données d'image réelle. Essayez ceci:

imagejpeg($im, $grayimgpath); 
2

Vous ne pouvez pas écrire un objet image dans un fichier. Il y a des fonctions dans la bibliothèque GD pour cela. Ainsi, au lieu de fopen et fwrite, vous devez utiliser imagejpeg avec le nom de fichier dans le deuxième paramètre:

imagejpeg($im, $grayimgpath); 
+0

pourquoi est-ce? juste curieux – mrpatg

+0

'$ im' n'est pas un contenu binaire d'un fichier, c'est un objet PHP contenant une structure interne définie par GD. Lorsque vous l'écrivez dans le fichier, vous écrivez sa représentation textuelle, probablement la même chose que '(string) $ im'. – NOtherDev

+0

qui avait vraiment traversé mon esprit, merci pour la clarification – mrpatg

Questions connexes