Differenze tra le versioni di "Ridimensionare un'immagine mediante le funzioni esterne del API di ImageMagick"
Da Gambas-it.org - Wikipedia.
Riga 48: | Riga 48: | ||
Dim bo As Boolean | Dim bo As Boolean | ||
Dim magick_wand As Pointer | Dim magick_wand As Pointer | ||
− | Dim | + | Dim fileimmagine, nuovofile As String |
− | + | fileimmagine = "<FONT Color=gray>''/percorso/del/file/immagine''</font>" | |
nuovofile = "<FONT Color=gray>''/percorso/del/file/immagine/ridimensionata''</font>" | nuovofile = "<FONT Color=gray>''/percorso/del/file/immagine/ridimensionata''</font>" | ||
Riga 57: | Riga 57: | ||
magick_wand = NewMagickWand() | magick_wand = NewMagickWand() | ||
− | bo = MagickReadImage(magick_wand, | + | bo = MagickReadImage(magick_wand, fileimmagine) |
If bo = MagickFalse Then | If bo = MagickFalse Then | ||
− | |||
Error.Raise("Impossibile caricare il file immagine !") | Error.Raise("Impossibile caricare il file immagine !") | ||
+ | Chiude() | ||
Endif | Endif | ||
Riga 66: | Riga 66: | ||
MagickResizeImage(magick_wand, 106, 80, LanczosFilter, 1.0) | MagickResizeImage(magick_wand, 106, 80, LanczosFilter, 1.0) | ||
− | bo = MagickWriteImages(magick_wand, | + | bo = MagickWriteImages(magick_wand, 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() | ||
Endif | Endif | ||
+ | Chiude() | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Private''' Procedure Chiude(mw As Pointer) | ||
<FONT Color=gray>' ''Libera la memoria e chiude la libreria "ImageMagick":''</font> | <FONT Color=gray>' ''Libera la memoria e chiude la libreria "ImageMagick":''</font> | ||
− | DestroyMagickWand( | + | DestroyMagickWand(mw) |
Wait 0.01 | Wait 0.01 | ||
MagickWandTerminus() | MagickWandTerminus() |
Versione delle 12:25, 7 giu 2017
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 dinamica condivisa: "libMagickWand-6.Q16.so.2.0.0" (o altra versione).
Mostriamo di seguito un semplice esempio pratico per creare da una immagine iniziale una sua copia ridimensionata come un thumbnail:
Library "libMagickWand-6.Q16:2.0.0" 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 Pointer ' MagickBooleanType MagickReadImage(MagickWand *wand,const char *filename) ' Reads an image or image sequence. Private Extern MagickReadImage(wand As Pointer, 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 Pointer, 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 Pointer, filename As String, adjoin As Boolean) As Boolean ' MagickWand *DestroyMagickWand(MagickWand *wand) ' Deallocates memory associated with an MagickWand. Private Extern DestroyMagickWand(wand As Pointer) As Pointer ' void MagickWandTerminus(void) ' Terminates the MagickWand environment. Private Extern MagickWandTerminus() Public Sub Main() Dim bo As Boolean Dim magick_wand As Pointer Dim fileimmagine, nuovofile As String fileimmagine = "/percorso/del/file/immagine" nuovofile = "/percorso/del/file/immagine/ridimensionata" MagickWandGenesis() magick_wand = NewMagickWand() bo = MagickReadImage(magick_wand, fileimmagine) If bo = MagickFalse Then Error.Raise("Impossibile caricare il file immagine !") Chiude() Endif ' Ridimensiona l'immagine: MagickResizeImage(magick_wand, 106, 80, LanczosFilter, 1.0) bo = MagickWriteImages(magick_wand, nuovofile, MagickTrue) If bo = MagickFalse Then Error.Raise("Impossibile creare il nuovo file dell'immagine ridimensionata !") Chiude() Endif Chiude() End Private Procedure Chiude(mw As Pointer) ' Libera la memoria e chiude la libreria "ImageMagick": DestroyMagickWand(mw) Wait 0.01 MagickWandTerminus() End