IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Afficher une image depuis un stockage binaire sans passer par un fichier temporaire


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Afficher une image depuis un stockage binaire sans passer par un fichier temporaire
    Bonsoir à tous,

    Après avoir pas mal cherché, j'ai beaucoup avancé et je penses ne pas être loin mais ... Je sèche car cela ne marche pas (on s'en doutait que j'allais écrire cela)

    Le besoin :
    J'ai un fichier binaire contenant n images présent sur un répertoire réseau (pas sur mon serveur).
    Au moment où j'affiche ma page, je connais :
    - le nom de ce fichier (qui peut changer)
    - le chemin réseau
    - l'offset où se trouve l'image à afficher (position de début + taille)

    De mes recherches je suis arrivé à créer 2 php:
    - aff.php qui affiche bêtement mon image (<img src='image.php' />)
    - image.php qui va être mon leurre et devenir mon objet image (ceci car je ne souhaite pas passer par un fichier temporaire)


    Vous verez que dans image.php je mets mon lien en dur mais c'est pour le test.

    Le code :

    Aff.php :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html lang='fr'>
    	<head>
    		<meta charset='utf-8' http-equiv='CACHE-CONTROL' content='NO-CACHE'>
    		<link href='style/style.css' rel='stylesheet' type='text/css'>
    	</head>
    	<body style="padding-top:30px;">
    		<div id='User' class='User'>
    			<img src='image.php' />
    		</div>
    	</body>
    </html>

    et mon image.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    	//$maRefImg = $_GET['idPhoto']; --> quand déjà avec une image en dur cela marchera je verrai :)
    	$maRefImg="\\\\monserveur\\002000012014090104C0001.4186399;13107;12875;tif;";
    	$mesParam=array();
            $mesParam=explode(';',$maRefImg);
    	$monImg=file_get_contents($mesParam[0],NULL,NULL,$mesParam[1],$mesParam[2]);
            header('Content-Type: image/tiff');
            echo pg_unescape_bytea($monImg);
    ?>

    Quand je lance aff.php mon image ne s'affiche pas.

    Auriez-vous une solution? est-ce que je me plante royalement dans ma démarche?

    Merci à tous

    Pour vérifier au moins que mon binaire et donc mon extraction de tif est ok j'ai modifié mon php "image.php" avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    //$maRefImg = $_GET['idPhoto']; --> quand déjà avec une image en dur cela marchera je verrai
    $maRefImg="\\\\monserveur\\002000012014090104C0001.4186399;13107;12875;tif;";
    $mesParam=array();
    $mesParam=explode(';',$maRefImg);
    $monImg=file_get_contents($mesParam[0],NULL,NULL,$mesParam[1],$mesParam[2]);
    header('Content-Type: image/tiff');
    echo pg_unescape_bytea($monImg);
    file_put_contents("test.tif", $monImg);
    ?>
    mon tif se crée bien et est lisible via windows


  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu lances directement image.php tu obtiens quoi ?
    Pour ton deuxième test, est ce que tu arrives a lire l'image obtenue avec un navigateur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour Sabotage,

    Pour répondre au mieux à la question :

    - Si je lance directement image.php j'obtient le message "Firefox ne peut trouver le fichier à l'adresse http://172.16.105.41/www.oox/ajax/image.php" --> j'en conclus qu'il ne vois pas image.php comme une image. (172.16.105.41 = mon serveur apache)
    - Si je lance aff.php j'obtient un petit carré sans image dedans --> confirme ce qui est plus haut image.php est pas vu comme une image
    - Si je lance image.php en modifiant mon code comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <s>header('Content-type: image/tiff');
    	echo pg_unescape_bytea($monImg);</s>echo ($monImg);
    J'obtiens une ligne de caractère binaires? : "II*�b� -���--5%(NCR,PARMS=2,REAL_HEIGHT=642,REAL_LENGTH=1378��nn�K.>6 c025024542920 d809140000570- 1006054- E�J�-bb����0��8h4 @w A��x��%B1�V����cW�����p�����}���m���n�Ķ� B�v�۸ւk�yv�X�.�MU0�a �d|�,wv�� a�Æ��9~�t”����Ӽ3�}��M �����5[oA��p�bt�SA�UU ��4���_p���N-���)���pᮟraw��������k�eYB!�....etc" --> Oui ...hum .... effectivement cela ne ressemble pas du tout à ce que je vois quand j'ouvre mon tif (généré plus haut) avec un notepad

    Pour le tif oui je l'ouvre bien avec l'aperçu Windows

    Près pour d'autre test si besoin

    Merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour le tif oui je l'ouvre bien avec l'aperçu Windows
    J'avais dit avec ton navigateur.
    Windows pourrait etre plus souple que ton navigateur.

    Firefox ne peut trouver le fichier à l'adresse
    Ce message signifie que l'url n'est pas bonne.
    Quand on a un fichier incorrect, Firefox le dit explicitement.

    Pourquoi tu utilises pg_unescape_bytea ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Effectivement, mon tif ne s'affiche pas dans le navigateur.
    De mes recherches, je comprend que seul les png, gif et jpeg peuvent s'afficher dans un navigateur (balise img)

    Je m'oriente donc a trouver comment convertir cette image en png pour pouvoir l'afficher? par exemple via magick?

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    J'ai modifié mon code "image.php" afin de convertir mon TIF en png

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
     
     
    	//Récupération de l'image dans le binaire (l'image est de format TIF)
    	$maRefImg="#>\\\\monserveur\\002000012014090104C0001.4186399;13107;12875;tif;";
    	$mesParam=array();
        $mesParam=explode(';',$maRefImg);
    	$mesParam[0]=str_replace("#>","",$mesParam[0]);
    	$monImg=file_get_contents($mesParam[0],NULL,NULL,$mesParam[1],$mesParam[2]);
    	file_put_contents("test2.tif", $monImg);
     
    	//Convertion du TIF en PNG afin de pouvoir l'afficher dans un navigateur
    	$_C="D:\\webroot\\www.img\\test2";
    	$_Tif=$_C.".tif";
    	$_Png=$_C.".png";
    	$image=new Imagick();
    	$image->pingImage($_Tif);
    	$image->readImage($_Tif);
    	$image->setImageFormat("png");
    	$image->writeImage($_Png);
    ?>

    Cela fonctionne très bien. J'ai bien une image PNG qui se crée.
    Maintenant, si on reviens à mon besoin, c'et le php "aff.php" qui comporte la balise <IMG src="image.php"> donc comment je peux faire pour qu'au lieu d'enregistrer mon PNG en dur, de faire un echo.
    C'est a dire remplacer le code comme suit :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <s>$image->writeImage($_Png);</s>echo $image;

    Mais cela ne fonctionne pas.

    Merci pour vos réponses

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    Je n'utilise pas ImageMagick mais le echo semble autorisé. Par contre ils utilisent un header() avant. Le code que l'on trouve dans la doc est de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $image = new Imagick($_Tif);
    $image->setImageFormat("png");
    header("Content-Type: image/png");
    echo $image;

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses.
    J'ai trouvé. Il fallait mettre le header effectivement Nightfall + vider l'objet

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    	ob_clean();
    	header ('Content-Type: image/png');
    	$maRefImg = $_GET['Img'];
    	$mesParam=array();
        $mesParam=explode(';',$maRefImg);
    	$mesParam[0]=str_replace("#>","",$mesParam[0]);
    	$mesParam[0] = str_replace("/","\\",$mesParam[0]);
     
    	$Img=explode('.',$mesParam[0]);
    	$ImgName="Temp".$Img[1].$mesParam[1].$mesParam[2];
    	$monImg=file_get_contents($mesParam[0],NULL,NULL,$mesParam[1],$mesParam[2]);
    	file_put_contents($ImgName.".tif", $monImg);
    	$_C="D:\\webroot\\www.gg\\ajax\\".$ImgName.".tif";
     
    	$image=new Imagick();
    	$image->pingImage($_C);
    	$image->readImage($_C);
    	$image->setImageFormat("png");
     
    	echo $image;
    	unlink($_C);
    ?>
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une image depuis un pointeur
    Par Lumbermatt dans le forum OpenCV
    Réponses: 1
    Dernier message: 04/07/2007, 16h28
  2. Afficher une image depuis un fichier
    Par Bourak dans le forum MFC
    Réponses: 1
    Dernier message: 23/06/2007, 15h01
  3. afficher une image depuis un combobox
    Par ghosthacker dans le forum MFC
    Réponses: 5
    Dernier message: 11/06/2007, 10h35
  4. Afficher une image depuis ma base de données MySQL
    Par hnoumbo dans le forum Outils
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  5. [Image] Afficher une image depuis serveur distant
    Par grinder59 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/05/2006, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo