Differenze tra le versioni di "Convertire un file immagine SVG in un file immagine di altro formato con le funzioni esterne delle librerie librsvg e libgdk pixbuf"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Utilizzando alcune funzioni esterne delle librerie ''librsvg'' e ''libgdk pixbuf'' di GNOME è possibile convertire un file immagine SVG in un file immagine di altro formato....")
 
Riga 9: Riga 9:
 
  Library "librsvg-2:2.40.13"
 
  Library "librsvg-2:2.40.13"
 
   
 
   
  <FONT Color=gray>'' 'RsvgHandle * rsvg_handle_new_from_file (const gchar *file_name, GError **error)''
+
  <FONT Color=gray>' ''RsvgHandle * rsvg_handle_new_from_file (const gchar *file_name, GError **error)''
 
  ' ''Loads the SVG specified by file_name.''</font>
 
  ' ''Loads the SVG specified by file_name.''</font>
 
  Private Extern rsvg_handle_new_from_file(file_name As String, gerror As Pointer) As Pointer
 
  Private Extern rsvg_handle_new_from_file(file_name As String, gerror As Pointer) As Pointer
 
   
 
   
  <FONT Color=gray>'' 'GdkPixbuf * rsvg_handle_get_pixbuf (RsvgHandle *handle)''
+
  <FONT Color=gray>' ''GdkPixbuf * rsvg_handle_get_pixbuf (RsvgHandle *handle)''
 
  ' Returns the pixbuf loaded by handle.''</font>
 
  ' Returns the pixbuf loaded by handle.''</font>
 
  Private Extern rsvg_handle_get_pixbuf(handle As Pointer) As Pointer
 
  Private Extern rsvg_handle_get_pixbuf(handle As Pointer) As Pointer
Riga 20: Riga 20:
 
  Library "libgdk_pixbuf-2.0"
 
  Library "libgdk_pixbuf-2.0"
 
   
 
   
  <FONT Color=gray>'' 'gboolean gdk_pixbuf_save (GdkPixbuf *pixbuf, const char *filename, const char *type, GError **error, ...)''
+
  <FONT Color=gray>' ''gboolean gdk_pixbuf_save (GdkPixbuf *pixbuf, const char *filename, const char *type, GError **error, ...)''
 
  ' Saves pixbuf to a file in format type. By default, "jpeg", "png", "ico" and "bmp" are possible file formats to save in.''</font>
 
  ' Saves pixbuf to a file in format type. By default, "jpeg", "png", "ico" and "bmp" are possible file formats to save in.''</font>
 
  Private Extern gdk_pixbuf_save(pixbuf As Pointer, filename As String, type As String, gerror As Pointer, altro As Pointer) As Boolean
 
  Private Extern gdk_pixbuf_save(pixbuf As Pointer, filename As String, type As String, gerror As Pointer, altro As Pointer) As Boolean
 
   
 
   
  <FONT Color=gray>'' 'void g_object_unref (gpointer object)''
+
  <FONT Color=gray>' ''void g_object_unref (gpointer object)''
 
  ' Decreases the reference count of object.''</font>
 
  ' Decreases the reference count of object.''</font>
 
  Private Extern g_object_unref(gobject As Pointer)
 
  Private Extern g_object_unref(gobject As Pointer)
Riga 34: Riga 34:
 
   Dim bo As Boolean
 
   Dim bo As Boolean
 
    
 
    
  <FONT Color=gray>'' 'Carica il file immagine SGV da convertire:''</font>
+
  <FONT Color=gray>' ''Carica il file immagine SGV da convertire:''</font>
 
   rsvg = rsvg_handle_new_from_file("<FONT Color=gray>''/percorso/del/file/immagine.svg''</font>", 0)
 
   rsvg = rsvg_handle_new_from_file("<FONT Color=gray>''/percorso/del/file/immagine.svg''</font>", 0)
 
    
 
    
 
   pbf = rsvg_handle_get_pixbuf(rsvg)
 
   pbf = rsvg_handle_get_pixbuf(rsvg)
 
    
 
    
  <FONT Color=gray>'' 'Converte il file immagine SGV nel nuovo file immagine di formato PNG:''</font>
+
  <FONT Color=gray>' ''Converte il file immagine SGV nel nuovo file immagine di formato PNG:''</font>
 
   bo = gdk_pixbuf_save(pbf, "<FONT Color=gray>''/percorso/del/file/immagine.png''</font>", "png", 0, 0)
 
   bo = gdk_pixbuf_save(pbf, "<FONT Color=gray>''/percorso/del/file/immagine.png''</font>", "png", 0, 0)
 
   If Not bo Then Error.Raise("ERRORE !")
 
   If Not bo Then Error.Raise("ERRORE !")
 
    
 
    
 
    
 
    
  <FONT Color=gray>'' 'In fine libera la memoria occupata dalle due librerie esterne utilizzate:''</font>
+
  <FONT Color=gray>' ''In fine libera la memoria occupata dalle due librerie esterne utilizzate:''</font>
 
   g_object_unref(pbf)
 
   g_object_unref(pbf)
 
   g_object_unref(rsvg)
 
   g_object_unref(rsvg)

Versione delle 05:50, 1 feb 2018

Utilizzando alcune funzioni esterne delle librerie librsvg e libgdk pixbuf di GNOME è possibile convertire un file immagine SVG in un file immagine di altro formato. Tali formati possibili sono di base "jpeg", "png", "ico" e "bmp", ma possono essere installati altri formati.

In particolare la libreria "librsvg" è utilizzata per effettuare il rendering di immagini di formato SVG, mentre la libreria "libgdk pixbuf" è utilizzata per caricare e gestire immagini.

E' necessario avere installate nel sistema e richiamare in Gambas le librerie dinamiche condivise: "libgdk_pixbuf-2.0" e "librsvg-2.so.2.40.13"


Mostriamo di seguito un esempio, nel quale sarà caricato un file immagine SVG che sarà convertito in formato PNG:

Library "librsvg-2:2.40.13"

' RsvgHandle * rsvg_handle_new_from_file (const gchar *file_name, GError **error)
' Loads the SVG specified by file_name.
Private Extern rsvg_handle_new_from_file(file_name As String, gerror As Pointer) As Pointer

' GdkPixbuf * rsvg_handle_get_pixbuf (RsvgHandle *handle)
' Returns the pixbuf loaded by handle.
Private Extern rsvg_handle_get_pixbuf(handle As Pointer) As Pointer


Library "libgdk_pixbuf-2.0"

' gboolean gdk_pixbuf_save (GdkPixbuf *pixbuf, const char *filename, const char *type, GError **error, ...)
' Saves pixbuf to a file in format type. By default, "jpeg", "png", "ico" and "bmp" are possible file formats to save in.
Private Extern gdk_pixbuf_save(pixbuf As Pointer, filename As String, type As String, gerror As Pointer, altro As Pointer) As Boolean

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Public Sub Main()
 
 Dim rsvg, pbf As Pointer
 Dim bo As Boolean
  
' Carica il file immagine SGV da convertire:
  rsvg = rsvg_handle_new_from_file("/percorso/del/file/immagine.svg", 0)
  
  pbf = rsvg_handle_get_pixbuf(rsvg)
  
' Converte il file immagine SGV nel nuovo file immagine di formato PNG:
  bo = gdk_pixbuf_save(pbf, "/percorso/del/file/immagine.png", "png", 0, 0)
  If Not bo Then Error.Raise("ERRORE !")
  
  
' In fine libera la memoria occupata dalle due librerie esterne utilizzate:
  g_object_unref(pbf)
  g_object_unref(rsvg)
  
End


Riferimenti