Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 22-10-2007 14:03:39

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

[TRUC] Convertir un BLOB en fichier

Si votre BLOB contient une image (gif, bmp ) pour la mettre dans un fichier (.gif, .bmp ) voici une fonction

Code: pb

global type f_get_chemin_image from function_object
end type

forward prototypes
global subroutine f_get_chemin_image (string as_cle, ref string as_chemin_image)
end prototypes

global subroutine f_get_chemin_image (string as_cle, ref string as_chemin_image);Blob     lbl_blob, lbl_chunk
Integer   li_filenum
Long    ll_bloblen
Integer   li_loops
Integer   li_counter
Long    ll_bytes_read
Long    ll_chunk = 32000
Integer   li_sqlcode

SELECTBLOB IMAGE 
INTO  :lbl_blob 
FROM  TABLE_IMAGE 
WHERE CLE = :as_cle 
USING sqlca ; 
li_sqlcode = sqlca.sqlcode
If sqlca.sqlcode = 0 Then 
  ll_bloblen = len(lbl_blob)
  as_chemin_image = 'c:\'  + as_cle + ".gif"
  If not fileexists(as_chemin_image) Then

    li_FileNum = FileOpen(as_chemin_image, StreamMode!, Write!, LockWrite!, Append!)
    
    IF ll_bloblen > ll_chunk THEN 
    
      IF Mod(ll_bloblen,ll_chunk) = 0 THEN
        li_loops = ll_bloblen/ll_chunk 
      ELSE
        li_loops = (ll_bloblen/ll_chunk) + 1 
      END IF 
    ELSE 
      li_loops = 1 
    END IF
    
    
    ll_bytes_read = 1
    FOR li_counter = 1 to li_loops 
       If li_counter < li_loops Then
         lbl_chunk = BlobMid(lbl_blob, ll_bytes_read, ll_chunk)
         ll_bytes_read += ll_chunk
       Else
         lbl_chunk = BlobMid(lbl_blob, ll_bytes_read, ll_bloblen - ll_chunk* li_counter)
       End If
       FileWrite(li_filenum, lbl_chunk)
    Next
    
    FileClose(li_filenum)
  End if   
End if

end subroutine

Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#2 22-10-2007 18:25:01

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [TRUC] Convertir un BLOB en fichier

+250 pepites


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 22-10-2007 19:50:57

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [TRUC] Convertir un BLOB en fichier

Merci Chef
J'espere seulement que cela servira à qq'un


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#4 24-11-2008 10:40:54

sebdec  
Membre Geek
Lieu: Boulogne Billancourt
Date d'inscription: 23-04-2007
Messages: 21
Pépites: 84
Banque: 0

Re: [TRUC] Convertir un BLOB en fichier

Bonjour!

Je cherche en ce moment à stocker des images dans une bdd anywhere 6.
cette fonction permet a priori d'extraire une image d'un champ blob pour la réafficher.

Mais comment procéder à l'inverse? Comment partir d'une image pour en faire un blob "insertable" dans une table?

Merci pour vos lumières, et bonne journée

Hors ligne

 

#5 24-11-2008 10:43:05

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [TRUC] Convertir un BLOB en fichier


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 24-11-2008 10:47:39

sebdec  
Membre Geek
Lieu: Boulogne Billancourt
Date d'inscription: 23-04-2007
Messages: 21
Pépites: 84
Banque: 0

Re: [TRUC] Convertir un BLOB en fichier

J'avais bien lu ces 2 topics avant de poster, mais l'un fait une liaison sur un doc word, et l'autre ne transcrit pas une image en blob, mais indique simplement qu'il faut passer par un blob...
Je me trompe?

Hors ligne

 

#7 10-12-2008 13:45:49

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [TRUC] Convertir un BLOB en fichier

Rassures toi JCZ, ça sert au moins à moi ;)

Cette fonction fort pratique me sert à sauvegarder une image JPG à partir d'un BLOB.
Il semblerait que la sauvegarde au format JPG ne pose aucun problèmes ! (En fait, si j'ai bien saisi, ça fonctionne pour n'importe quel contenu ?)

Dernière modification par Nyphel (10-12-2008 13:59:39)

Hors ligne

 

#8 10-12-2008 14:01:55

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [TRUC] Convertir un BLOB en fichier

Juste pour information, pour les versions récentes de Powerbuilder, vous pouvez remplacer l'appel de la fonction FileWrite (limité à la sauvegarde de blocs 32766 bytes) par FileWriteEx pour sauvegarder le blob en une seule fois.

Cela vous permet de simplifier énormément le code en retirant la boucle qui découpe le blob en morceau pour réaliser la sauvegarde.

Hors ligne

 

#9 10-12-2008 14:17:19

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [TRUC] Convertir un BLOB en fichier

En effet, si je reprends la même fonction en lui passant par arguments le blob à écrire et le chemin de destination, j'aboutis simplement à ceci :

Code: pb

Integer li_filenum
li_FileNum = FileOpen(as_picture_target, StreamMode!, Write!, LockReadWrite!, Replace!, EncodingANSI!)
FileWriteEx(li_filenum, ab_picture_data)
FileClose(li_filenum)


En fin de compte, l'écriture du Blob revient donc à une écriture de texte brut. Je pensais qu'il était nécessaire de passer par une étape de remaniement du contenu blob pour obtenir des données textuelles, mais je ne m'étais pas suffisamment informé

Dernière modification par Nyphel (10-12-2008 14:17:35)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22