Sign in Join
Wiki copytemporary

PascalMagick/fr

Bahasa Indonesia · English · Español · Français · Português · Русский · 中文(中国) · 日本語

Au sujet d'ImageMagick

ImageMagick est une suite libre de logiciels de développement pour crée, éditer et compose des bitmaps. Il supporte un nombre énorme de format d'image (plus de 200 !) dont PNG, JPEG, JPEG-2000, GIF, TIFF, DPX, EXR, WebP, Postscript, PDF, et SVG. Les images peuvent être redimensionner, mise en miroir, tourner, déformer, cisailler et transformer. Vous pouvez ajuster les couleurs d'image, appliquer différents effets ou dessiner du texte, des lignes, des polygones, des ellipses et des courbes de Bézier.

Cette suite tourne sur la majorité des OS (il est préinstaller sur plusieurs distibutions Linux) et peut également être utiliser en ligne de commande.

ImageMagick dipose également de ces fonctionalité :

Au fait, l'es unités de l'API sont disponibles dans 21 langages (dont le pascal)

ImageMagick Book

ImageMagick Tricks This fast paced and practical tutorial is packed with examples of photo manipulations, logo creation, animations, and complete web projects. With this book up your sleeve, you'll be creating spellbinding images from code in no time.

MagickWand

L'API MagickWand est l'interface recommandée par l'équipe d'ImageMagick. C'est une couche entre L'application et MagickCore, l'API de bas niveau

Licence

ImageMagick est sous une licence du style BSD mais compatible avec la GPL.

Vous lire la licence ici.

Installation

Installation de imagemagick.pas

Par défaut ImageMagick est fournit avec un FPC réçent dans l'unité ImageMagick.

Si non alors utiliser fppkg : fppkg install imagemagick

Via svn FPC : svn checkout http://svn.freepascal.org/svn/fpc/trunk/packages/imagemagick imagemagick Placer alors le dossier "imagemagick" dans celui des paquets FPC (sous Linux /usr/share/fpcsrc/3.0.0/packages/). (FIXME : Non testé)

Sinon elle est ici (méthode déconseillé). Si vous installer via cette méthode sachez que aucun paquet n'est fournie. Bien que l'installation soit dans les sources de FPC je vous conseille de crée un Lazarus Packages (en, la version française est de toute façon actuellement en anglais et elle est meilleure, à rediger vers fr après amélioration) et d'inclure ce qui est dans "wand" et "magick" (dans FPC les 2 parties sont mélangée dans un seul dossier)

Installation des binaires

Si ImageMagick n'est pas installée chez vous allez directement sur leur page de téléchargement

Si vous vous êtes sous Debian installer le paquet imagemagick.

Démo

Placer dans dossier le programme et des PNG (extension .png et non .PNG si vous êtes sous Linux à cause de la sensibilité à la casse). Au lancement il va redimensionner les PNG vers du 106 par 80 et les convertir en jpeg (.jpg)

pascal
{
  Demonstration program for the ImageMagick Library
pascal
This program was converted from c by: Felipe Monteiro de Carvalho
pascal
Usage: Just execute the program. It will resize the image.png image
on it??s directory to fit (106, 80) and convert it to a jpg.
pascal
Dez/2005
pascal
}
{Version 0.1}
program wanddemo;
pascal
{$mode objfpc}{$H+}
pascal
uses SysUtils, magick_wand, ImageMagick;
pascal
procedure ThrowWandException(wand: PMagickWand);
var
  description: PChar;
  severity: ExceptionType;
begin
  description := MagickGetException(wand, @severity);
  WriteLn(Format('An error ocurred. Description: %s', [description]));
  description := MagickRelinquishMemory(description);
  Abort;
end;
pascal
var
  status: MagickBooleanType;
  wand: PMagickWand;
begin
  { Read an image. }
pascal
MagickWandGenesis;
pascal
wand := NewMagickWand;
pascal
try
  status := MagickReadImage(wand, 'image.png');
  if (status = MagickFalse) then ThrowWandException(wand);
pascal
{ Turn the images into a thumbnail sequence. }
pascal
MagickResetIterator(wand);
pascal
while (MagickNextImage(wand) <> MagickFalse) do
 MagickResizeImage(wand, 106, 80, LanczosFilter, 1.0);
pascal
{ Write the image as MIFF and destroy it. }
pascal
status := MagickWriteImages(wand, 'image.jpg', MagickTrue);
if (status = MagickFalse) then ThrowWandException(wand);
pascal
finally
  wand := DestroyMagickWand(wand);
pascal
MagickWandTerminus;
pascal
end;
pascal
end.

Bug Reporting/Feature Request

Tests are necessary to verify if the bindings work with all versions of ImageMagick.

You can post Bug Reports / Feature Requests here:


Bug 1

There is an error in pixel_iterator.inc The correct declaration is function NewPixelIterator(wand: PMagickWand): PPixelIterator; cdecl; external WandExport;

also the following declarations should be added function PixelGetNextIteratorRow(iterator: PPixeliterator; var wandCount : Cardinal) : PPPixelWand; cdecl; external WandExport;

function PixelGetPreviousIteratorRow(iterator: PPixeliterator; var wandCount : Cardinal) : PPPixelWand; cdecl; external WandExport;

Cheers, Todd.

Status: Fixed on 0.3


Bug 2

There is a problem in "magick_wand.pas" and "ImageMagick.pas": the compiler option "{$PACKRECORDS C}" must be in the "{$ifdef FPC}[...]{$endif}". Otherwise the units do not compile with Delphi (Delphi 7 in my case).

Best wishes, Marc Geldon (PRO IT SYSTEMS)


Bug 3

your definition of "MagickGetImagePage" in magick_image.inc:

pascal
function MagickGetImagePage(wand: PMagickWand; width, height: PCardinal; x, y: Integer): MagickBooleanType; cdecl; external WandExport;

correct definition (x and y are "PInteger"!):

pascal
function MagickGetImagePage(wand: PMagickWand; width, height: PCardinal; x, y: PInteger): MagickBooleanType; cdecl; external WandExport;

Best wishes, Marc Geldon (PRO IT SYSTEMS)


Bug 4

ImageMagick 6.2.7 (don't know exactly what version) introduced a few changes in MagickWand record and others. Also, a few variable definitions were incorrectly declared, and some function imports missed the "cdecl", so they didn't work (like NewMagickWand()). I've fixed all this issues. Can I upload the changes somewhere?

Best regards, Arcnor

Hello, you can send it to me, and I´ll apply the changes. My e-mail is felipemonteiro.carvalho@gmail.com By the way, did you correct bugs 2 and 3 also? thanks a lot --Sekelsenmat 05:07, 8 June 2006 (CEST)


Bug 5

MagickNewImage parameters convention is cdecl.

Correct definition of MagickNewImage in magick_image.inc:

pascal
function MagickNewImage(wand: PMagickWand; const columns, rows: Cardinal;
 const background: PPixelWand): MagickBooleanType; cdecl; external WandExport;

Bug 6

MagickCompositeImage : Composite_wand is a PMagickWand constant.

Correct definition of MagickCompositeImage in magick_image.inc:

pascal
function MagickCompositeImage(wand: PMagickWand; const composite_wand: PMagickWand; 
 const compose: CompositeOperator; const x, y: Integer): MagickBooleanType; cdecl; external WandExport;

--RuBBeR 18:03, 3 July 2006 (CEST)

'''Status: Bugs 2-6 fixed on v0.4. Thanks to all (Arcnor)

Change Log

  1. Last bugs fixed
  1. Minor fixes on the bindings
  1. MagickWand API fully translated
  2. Added a second demonstration program
  1. About 80% of the MagickWand API is translated
  2. The basic demonstration program is working well
  3. Only the very minimum necessary MagickCode headers were translated

Help

Please send help requests to the Lazarus Forum or the Lazarus mailling list.


From the Free Pascal wiki, page "PascalMagick/fr", as it stood on 2016-11-20 after a change by MiniApp, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.