Differenze tra le versioni di "Creare una GIF animata con le funzioni esterne del API di Libgd"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "La libreria '''GD''' consente anche di creare un file di formato GIF contenente una immagine animata. Per poter fruire in Gambas delle risorse della libreria ''GD'', è neces...")
 
Riga 36: Riga 36:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
   Dim immago, flin, ex, prev As Pointer
+
   Dim imago, flin, ex, prev As Pointer
 
   Dim i As Integer
 
   Dim i As Integer
 
   
 
   
 
     ex = fopen("/tmp/file.gif", "wb")
 
     ex = fopen("/tmp/file.gif", "wb")
     If IsNull(ex) Then Error.Raise("Impossibile creare il file di formato GIF !")
+
     If ex = 0 Then Error.Raise("Impossibile creare il file di formato GIF !")
 
      
 
      
 
  <FONT Color=gray>' ''Inserisce la prima immagine:''</font>
 
  <FONT Color=gray>' ''Inserisce la prima immagine:''</font>
     immago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/primo/file.png''</font>", "rb"))
+
     imago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/primo/file.png''</font>", "rb"))
     If IsNull(immago) Then Error.Raise("Impossibile creare la GIF animata!")
+
     If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
    
 
    
     gdImageGifAnimBegin(immago, ex, 1, -1)
+
     gdImageGifAnimBegin(imago, ex, 1, -1)
 
    
 
    
     prev = immago
+
     prev = imago
 
    
 
    
 
     For i = 0 To 47
 
     For i = 0 To 47
 
      
 
      
 
  <FONT Color=gray>' ''Inserisce le altre immagini:''</font>
 
  <FONT Color=gray>' ''Inserisce le altre immagini:''</font>
       immago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/secondo/file.png''</font>", "rb"))
+
       imago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/secondo/file.png''</font>", "rb"))
       If IsNull(immago) Then Error.Raise("Impossibile creare la GIF animata!")
+
       If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
      
 
      
       gdImageGifAnimAdd(immago, ex, 1, 0, 0, 10, 1, prev)
+
       gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
 
      
 
      
       prev = immago
+
       prev = imago
 
        
 
        
       immago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/terzo/file.png''</font>", "rb"))
+
       imago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/terzo/file.png''</font>", "rb"))
       If IsNull(immago) Then Error.Raise("Impossibile creare la GIF animata!")
+
       If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
      
 
      
       gdImageGifAnimAdd(immago, ex, 1, 0, 0, 10, 1, prev)
+
       gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
 
      
 
      
       prev = immago
+
       prev = imago
 
        
 
        
       immago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/quarto/file.png''</font>", "rb"))
+
       imago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/quarto/file.png''</font>", "rb"))
       If IsNull(immago) Then Error.Raise("Impossibile creare la GIF animata!")
+
       If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
      
 
      
       gdImageGifAnimAdd(immago, ex, 1, 0, 0, 10, 1, prev)
+
       gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
 
      
 
      
       prev = immago
+
       prev = imago
 
        
 
        
       immago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/primo/file.png''</font>", "rb"))
+
       imago = gdImageCreateFromPng(fopen("<FONT Color=gray>''/percorso/del/primo/file.png''</font>", "rb"))
       If IsNull(immago) Then Error.Raise("Impossibile creare la GIF animata!")
+
       If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
      
 
      
       gdImageGifAnimAdd(immago, ex, 1, 0, 0, 10, 1, prev)
+
       gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
 
      
 
      
       prev = immago
+
       prev = imago
 
      
 
      
 
     Next
 
     Next
Riga 89: Riga 89:
 
      
 
      
 
  <FONT Color=gray>' ''Va in chiusura:''</font>
 
  <FONT Color=gray>' ''Va in chiusura:''</font>
     gdImageDestroy(immago)
+
     gdImageDestroy(imago)
 
     fclose(ex)
 
     fclose(ex)
 
      
 
      

Versione delle 17:28, 21 dic 2016

La libreria GD consente anche di creare un file di formato GIF contenente una immagine animata.

Per poter fruire in Gambas delle risorse della libreria GD, è necessario installare e richiamare la libreria dinamica e condivisa: "libgd.so.3.0.0"


Mostriamo di seguito un semplice esempio, nel quale da quattro file immagine di formato PNG si genererà una GIF animata:

Library "libgd:3.0.0"

' gdImagePtr gdImageCreateFromPng (FILE * fd)
Private Extern gdImageCreateFromPng(fd As Pointer) As Pointer

' void gdImageGifAnimBegin(gdImagePtr im, FILE *outFile, int GlobalCM, int Loops)
Private Extern gdImageGifAnimBegin(im As Pointer, outFile As Pointer, GCM As Integer, Loops As Integer)

' void gdImageGifAnimAdd(gdImagePtr im, FILE *outFile, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm)
Private Extern gdImageGifAnimAdd(im As Pointer, outFile As Pointer, LCM As Integer, LeftOfs As Integer, TopOfs As Integer, Delay As Integer, Disposal As Integer, previm As Pointer)

' void gdImageGifAnimEnd(FILE *outFile)
Private Extern gdImageGifAnimEnd(outFile As Pointer)

' void gdImageDestroy (gdImagePtr im)
Private Extern gdImageDestroy(gdImage As Pointer)


Library "libc:6"

' FILE *fopen(const char *filename, const char *mode)
' Opens the filename pointed to by filename using the given mode.
Private Extern fopen(filename As String, mode As String) As Integer

' int fclose(FILE *stream)
' Closes the stream. All buffers are flushed.
Private Extern fclose(flstream As Pointer) As Integer


Public Sub Main()
 
 Dim imago, flin, ex, prev As Pointer
 Dim i As Integer

   ex = fopen("/tmp/file.gif", "wb")
   If ex = 0 Then Error.Raise("Impossibile creare il file di formato GIF !")
   
' Inserisce la prima immagine:
   imago = gdImageCreateFromPng(fopen("/percorso/del/primo/file.png", "rb"))
   If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
 
   gdImageGifAnimBegin(imago, ex, 1, -1)
 
   prev = imago
 
   For i = 0 To 47
   
' Inserisce le altre immagini:
     imago = gdImageCreateFromPng(fopen("/percorso/del/secondo/file.png", "rb"))
     If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
   
     gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
   
     prev = imago
     
     imago = gdImageCreateFromPng(fopen("/percorso/del/terzo/file.png", "rb"))
     If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
   
     gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
   
     prev = imago
     
     imago = gdImageCreateFromPng(fopen("/percorso/del/quarto/file.png", "rb"))
     If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
   
     gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
   
     prev = imago
     
     imago = gdImageCreateFromPng(fopen("/percorso/del/primo/file.png", "rb"))
     If imago = 0 Then Error.Raise("Impossibile creare la GIF animata!")
   
     gdImageGifAnimAdd(imago, ex, 1, 0, 0, 10, 1, prev)
   
     prev = imago
   
   Next
   
   
' Genera in fine il file della GIF animata:
   gdImageGifAnimEnd(ex)
   
   
' Va in chiusura:
   gdImageDestroy(imago)
   fclose(ex)
   
End



Riferimenti