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 :

Conversion de BLOB en JPG


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Conversion de BLOB en JPG
    Salut !

    J'ai un problème :
    Je dois afficher des JPG, seulement ces images sont pour l'instant sur une base de données au format BLOB.
    La solution que j'ai retenue est la fonction file_put_contents(), seulement celli-ci me créer bien les fichiers, ils ont des tailles différentes (entre 900ko et 1500ko),
    je pense donc que les fichiers obtenus sont 'en partis' bien créer à partir de mes différents BLOB.
    Mais après plusieurs tentatives, les fichiers restent endommagés, je n'arrive pas à les ouvrir.
    Je suis carrément bloquer.

    Quelqu'un aurait-il une idée ?

    Merci d'avance.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql = "SELECT IMAGE FROM IMAGE_IMMOBILIER WHERE ID_IMMOBILIER = '645852'";
    $q = $pdo->prepare($sql);
    $q->execute();
     
    $q->bindColumn(1, $cover, PDO::PARAM_LOB);
    $x = 1;
    while($q->fetch())
    {
    	 file_put_contents($x.".jpg", $cover);
    	 $x ++;
    }

  2. #2
    Membre averti Avatar de demenvil
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste développeur
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Points : 389
    Points
    389
    Par défaut
    Salut,
    Tu veux faire quoi ?
    Les télécharger par la suite ou juste les afficher ?

    Il y a aussi un tuto sur ce site pour cela : http://beaussier.developpez.com/arti...hp/mysql/blob/

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Merci de ta réponse rapide.

    Je souhaite seulement les afficher pour le moment. L'utilisateur a une liste de biens, lorsqu'il click sur l'un d'entre eux, il arrive sur la page en question qui récupère
    les fichiers BLOB de la base. Enfin il consulte les images.

    Merci par avance

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Si le but est juste de les afficher pas la peine de les mettre dans un fichier intermédiaire. Tu peux les afficher directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($result = $q->fetch())
    {
    	 echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['IMAGE'] ).'"/>';
    }
    Un blob est en principe la données binaire brute. Si en enregistrant cette données dans un fichier , tu n'obtiens pas une image valide , c'est que la donnée d'origine est corrompue ou erronée.

    Pour un jpg , le début du fichier devrait ressembler à :
    ÿØÿà�JFIF�
    Dernière question :
    Pourquoi stocker les images en base plutôt que sur le système de fichier classique ? Ça peut se justifier dans certains cas , mais c'est souvent une erreur de conception que de procéder ainsi.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Grunk,

    Appartement c'est pour des raisons de sécurité et de facilité de gestion que la base conçus comme ça, je suis arrivé dans l'entreprise c’était déjà comme ça.

    Voici un début de fichier généré par file_put_contents() : FFD8FFE000104A4649460 ... C'est donc mauvais...
    Même avec votre code cela ne fonctionne pas, il m'affiche des images "sans liens"...

    Ce qui est bizarre c'est que les BLOB sont correct. A partir d'autre langages on peut les récupérer.

    Les JPG ont étés convertis en BLOB et inséré dans la base a partir du langage PowerBuilder.
    Peut-être qu'il encode sa spécialement ?

    Je désespère...

    Merci par avance pour votre aide.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Quand tu fais un SELECT IMAGE FROM IMAGE_IMMOBILIER WHERE ID_IMMOBILIER = '645852' tu obtiens comme résultats dans ta variable un truc qui ressemble à : FFD8FFE0001 ?
    Ca voudrais dire que le binaire de l'image aurais été convertis en une chaine hexadecimal , ca parait étrange.

    Si c'est déjà utilisé dans d'autre langage dans la société , il faut regarder comme il procède.

    Mais normalement le blob contient le contenu du fichier (en gros tu fais un file_get_contents , sur le fichier et tu le met dans le blob)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Grunk,

    Merci de vos réponse rapides.

    Voici le début de mon BLOB : 0xFFD8FFE000104A4649460
    et le fichier généré : FFD8FFE000104A4649460

    Lorsque file_put_contents() créer le fichier, elle enlève seulement le 0x au début du fichier...

    Y aurait-il une autre façon de faire ? Une autre fonction pour afficher les BLOB ?
    Serait-ce un bug PHP ?

    ...

    Merci par avance.

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Non c'est pas un bug PHP , c'est le contenu du blob qui n'est pas standard. En principe on ne met pas une chaine hexadecimal mais du binaire dans un blob.

    Tu peux essayer de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents("fichier.jpg",hex2bin($data))
    Pour convertir la chaine hexadecimal en binaire.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Grunk....

    Omfg ... Dommage je peux te mettre que un pouce vert j'ten aurait mis 100 ...

    Bien vus en tout cas ... depuis le rebut le problème venait de la ... en tout cas bravo à toi et merci infiniment, tu me sort de la merde !!

    Merci a tous pour votre aide, et merci encore Grunk. Si vous faites des BLOB via PowerBuilder il seront en hexadecimal attention !

    A +

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

Discussions similaires

  1. Librairie GD et GD2 pour conversion de pdf en jpg
    Par cybergud dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/06/2014, 17h56
  2. conversion champ blob en double
    Par roland34 dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/02/2013, 19h41
  3. Conversion image PDf en JPG/BMP?
    Par rpd05 dans le forum Imagerie
    Réponses: 4
    Dernier message: 20/05/2012, 15h13
  4. conversion d une image jpg,tif en image bmp
    Par b.yassine dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/12/2005, 12h53
  5. conversion string--> blob
    Par zimzoum10 dans le forum Débuter
    Réponses: 13
    Dernier message: 23/02/2005, 17h41

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