Differenze tra le versioni di "Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick"

Da Gambas-it.org - Wikipedia.
Riga 6: Riga 6:
 
Mostriamo di seguito un semplice esempio pratico per creare da una immagine iniziale una sua copia ridimensionata come un ''thumbnail'':
 
Mostriamo di seguito un semplice esempio pratico per creare da una immagine iniziale una sua copia ridimensionata come un ''thumbnail'':
 
  Library "libMagickWand-6.Q16:6.0.0"
 
  Library "libMagickWand-6.Q16:6.0.0"
 +
 +
Private Const MagickPathExtent As Integer = 4096
 +
 +
Public Struct MagickWand
 +
  id As Long
 +
  name[MagickPathExtent] As Byte
 +
  images As Pointer
 +
  image_info As Pointer
 +
  exception As Pointer
 +
  insert_before As Integer
 +
  image_pending As Integer
 +
  debug_ As Integer
 +
  signature As Long
 +
End Struct
 
   
 
   
 
  Private Enum MagickFalse = 0, MagickTrue
 
  Private Enum MagickFalse = 0, MagickTrue
Riga 21: Riga 35:
 
  <FONT Color=gray>' ''MagickWand *NewMagickWand(void)''
 
  <FONT Color=gray>' ''MagickWand *NewMagickWand(void)''
 
  ' ''Returns a wand required for all other methods in the API.''</font>
 
  ' ''Returns a wand required for all other methods in the API.''</font>
  Private Extern NewMagickWand() As Pointer
+
  Private Extern NewMagickWand() As MagickWand
 
    
 
    
 
  <FONT Color=gray>' ''MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)''
 
  ' ''Reads an image or image sequence.''</font>
 
  ' ''Reads an image or image sequence.''</font>
  Private Extern MagickReadImage(wand As Pointer, filename As String) As Boolean
+
  Private Extern MagickReadImage(wand As MagickWand, filename As String) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)''
 
  ' ''Scales an image to the desired dimensions with a filter.''</font>
 
  ' ''Scales an image to the desired dimensions with a filter.''</font>
  Private Extern MagickResizeImage(wand As Pointer, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean
+
  Private Extern MagickResizeImage(wand As MagickWand, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)''
 
  <FONT Color=gray>' ''MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)''
 
  ' ''Writes an image or image sequence.''</font>
 
  ' ''Writes an image or image sequence.''</font>
  Private Extern MagickWriteImages(wand As Pointer, filename As String, adjoin As Boolean) As Boolean
+
  Private Extern MagickWriteImages(wand As MagickWand, filename As String, adjoin As Boolean) As Boolean
 
   
 
   
 
  <FONT Color=gray>' ''MagickWand *DestroyMagickWand(MagickWand *wand)''
 
  <FONT Color=gray>' ''MagickWand *DestroyMagickWand(MagickWand *wand)''
 
  ' ''Deallocates memory associated with an MagickWand.''</font>
 
  ' ''Deallocates memory associated with an MagickWand.''</font>
  Private Extern DestroyMagickWand(wand As Pointer) As Pointer
+
  Private Extern DestroyMagickWand(wand As MagickWand) As Pointer
 
   
 
   
 
  <FONT Color=gray>' ''void MagickWandTerminus(void)''
 
  <FONT Color=gray>' ''void MagickWandTerminus(void)''
Riga 47: Riga 61:
 
    
 
    
 
   Dim bo As Boolean
 
   Dim bo As Boolean
   Dim magickwand As Pointer
+
   Dim mwand As MagickWand
 
   Dim fileimmagine, nuovofile As String   
 
   Dim fileimmagine, nuovofile As String   
 
    
 
    
Riga 55: Riga 69:
 
   MagickWandGenesis()
 
   MagickWandGenesis()
 
    
 
    
   magickwand = NewMagickWand()
+
   mwand = NewMagickWand()
 
    
 
    
   bo = MagickReadImage(magickwand, fileimmagine)
+
   bo = MagickReadImage(mwand, fileimmagine)
 
   If bo = MagickFalse Then
 
   If bo = MagickFalse Then
 
     Error.Raise("Impossibile caricare il file immagine !")
 
     Error.Raise("Impossibile caricare il file immagine !")
     Chiude(magickwand)
+
     Chiude(mwand)
 
   Endif
 
   Endif
 
    
 
    
 
  <FONT Color=gray>' ''Ridimensiona l'immagine:''</font>
 
  <FONT Color=gray>' ''Ridimensiona l'immagine:''</font>
   MagickResizeImage(magickwand, 106, 80, LanczosFilter, 1.0)
+
   MagickResizeImage(mwand, 128, 64, LanczosFilter, 1.0)
 
        
 
        
   bo = MagickWriteImages(magickwand, nuovofile, MagickTrue)
+
   bo = MagickWriteImages(mwand, nuovofile, MagickTrue)
 
   If bo = MagickFalse Then
 
   If bo = MagickFalse Then
 
     Error.Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !")
 
     Error.Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !")
     Chiude(magickwand)
+
     Chiude(mwand)
 
   Endif
 
   Endif
 
    
 
    
   Chiude(magickwand)
+
   Chiude(mwand)
 
    
 
    
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Private''' Procedure Chiude(mw As Pointer)
+
  '''Private''' Procedure Chiude(mw As MagickWand)
 
    
 
    
 
  <FONT Color=gray>' ''Libera la memoria e chiude la libreria "ImageMagick":''</font>
 
  <FONT Color=gray>' ''Libera la memoria e chiude la libreria "ImageMagick":''</font>

Versione delle 16:55, 17 nov 2022

Il sistema ImageMagick consente di creare, modificare e convertire immagini bitmap. Può altresì leggere e scrivere immagini di oltre 200 formati.

Per poter fruire in Gambas delle risorse, è necessario avere installata nel sistema e richiamare la seguente libreria condivisa: "libMagickWand-6.Q16.so.6.0.0 ".


Mostriamo di seguito un semplice esempio pratico per creare da una immagine iniziale una sua copia ridimensionata come un thumbnail:

Library "libMagickWand-6.Q16:6.0.0"

Private Const MagickPathExtent As Integer = 4096

Public Struct MagickWand
  id As Long
  name[MagickPathExtent] As Byte
  images As Pointer
  image_info As Pointer
  exception As Pointer
  insert_before As Integer
  image_pending As Integer
  debug_ As Integer
  signature As Long
End Struct

Private Enum MagickFalse = 0, MagickTrue
Private Enum UndefinedFilter = 0, PointFilter, BoxFilter, TriangleFilter, HermiteFilter,
  HanningFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter,
  CubicFilter, CatromFilter, MitchellFilter, JincFilter, SincFilter, SincFastFilter,
  KaiserFilter, WelshFilter, ParzenFilter, BohmanFilter, BartlettFilter, LagrangeFilter,
  LanczosFilter, LanczosSharpFilter, Lanczos2Filter, Lanczos2SharpFilter, RobidouxFilter,
  RobidouxSharpFilter, CosineFilter, SplineFilter, LanczosRadiusFilter, SentinelFilter
 
' void MagickWandGenesis(void)
' Initializes the MagickWand environment.
Private Extern MagickWandGenesis()
 
' MagickWand *NewMagickWand(void)
' Returns a wand required for all other methods in the API.
Private Extern NewMagickWand() As MagickWand
 
' MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename)
' Reads an image or image sequence.
Private Extern MagickReadImage(wand As MagickWand, filename As String) As Boolean

' MagickBooleanType MagickResizeImage(MagickWand *wand, const size_t columns,const size_t rows,const FilterType filter)
' Scales an image to the desired dimensions with a filter.
Private Extern MagickResizeImage(wand As MagickWand, columns As Long, rows As Long, filter As Integer, blur As Float) As Boolean

' MagickBooleanType MagickWriteImages(MagickWand *wand, const char *filename,const MagickBooleanType adjoin)
' Writes an image or image sequence.
Private Extern MagickWriteImages(wand As MagickWand, filename As String, adjoin As Boolean) As Boolean

' MagickWand *DestroyMagickWand(MagickWand *wand)
' Deallocates memory associated with an MagickWand.
Private Extern DestroyMagickWand(wand As MagickWand) As Pointer

' void MagickWandTerminus(void)
' Terminates the MagickWand environment.
Private Extern MagickWandTerminus()


Public Sub Main()
 
  Dim bo As Boolean
  Dim mwand As MagickWand
  Dim fileimmagine, nuovofile As String  
 
  fileimmagine = "/percorso/del/file/immagine"
  nuovofile = "/percorso/del/file/immagine/ridimensionata"
  
  MagickWandGenesis()
  
  mwand = NewMagickWand()
  
  bo = MagickReadImage(mwand, fileimmagine)
  If bo = MagickFalse Then
    Error.Raise("Impossibile caricare il file immagine !")
    Chiude(mwand)
  Endif
  
' Ridimensiona l'immagine:
  MagickResizeImage(mwand, 128, 64, LanczosFilter, 1.0)
     
  bo = MagickWriteImages(mwand, nuovofile, MagickTrue)
  If bo = MagickFalse Then
    Error.Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !")
    Chiude(mwand)
  Endif
 
  Chiude(mwand)
  
End

Private Procedure Chiude(mw As MagickWand)
 
' Libera la memoria e chiude la libreria "ImageMagick":
  DestroyMagickWand(mw)
  Wait 0.01
  MagickWandTerminus()
  
End


Riferimenti