Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Si votre BLOB contient une image (gif, bmp ) pour la mettre dans un fichier (.gif, .bmp ) voici une fonction
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
Hors ligne
Merci Chef
J'espere seulement que cela servira à qq'un
Hors ligne
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
Hors ligne
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
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
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
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 :
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
Pages: 1