PascalMagick/fr

From Free Pascal wiki
Jump to navigationJump to search

English (en) español (es) français (fr) Bahasa Indonesia (id) 日本語 (ja) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

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é :

  • Convertir une image d'un type à l'autre (ex PNG→JPEG)
  • Crée un montage de vignettes
  • Il gère la transparence (utile pour le web)
  • Peut générez des GIF à partir de plusieurs images
  • Crée une image à partir de plusieurs
  • Crée une bordure décorative à l'image
  • Décrire le format et les caractéristiques de l'image

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)

{
  Demonstration program for the ImageMagick Library

  This program was converted from c by: Felipe Monteiro de Carvalho

  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.
  
  Dez/2005
}
{Version 0.1}
program wanddemo;

{$mode objfpc}{$H+}

uses SysUtils, magick_wand, ImageMagick;

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;

var
  status: MagickBooleanType;
  wand: PMagickWand;
begin
  { Read an image. }
  
  MagickWandGenesis;

  wand := NewMagickWand;
  
  try
    status := MagickReadImage(wand, 'image.png');
    if (status = MagickFalse) then ThrowWandException(wand);

    { Turn the images into a thumbnail sequence. }

    MagickResetIterator(wand);

    while (MagickNextImage(wand) <> MagickFalse) do
     MagickResizeImage(wand, 106, 80, LanczosFilter, 1.0);

    { Write the image as MIFF and destroy it. }
  
    status := MagickWriteImages(wand, 'image.jpg', MagickTrue);
    if (status = MagickFalse) then ThrowWandException(wand);

  finally
    wand := DestroyMagickWand(wand);

    MagickWandTerminus;
  end;
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:

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

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

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:

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:

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

  • 12.07.06 PascalMagick version 0.4 released
  1. Last bugs fixed
  • 24.05.06 PascalMagick version 0.3 released
  1. Minor fixes on the bindings
  • 10.04.06 PascalMagick version 0.2 released
  1. MagickWand API fully translated
  2. Added a second demonstration program
  • 27.12.05 PascalMagick version 0.1 released
  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
  • 14.12.05 Began working on a pascal port for the c headers

Help

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