Sign in Join
Wiki copytemporary

PascalMagick/pt

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

Sobre

Sobre o ImageMagick

ImageMagick é uma suite aberta desenvolvida para criar, editar e compor imagens de bitmap. Ele tem suporte a uma grande variedade de formatos (mais de 90) inclusive GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF e DPX. As imagens podem ser cortadas, as cores podem ser mudadas, vários efeitos podem ser aplicados, as imagens podem ser giradas ou combinadas e texto, linhas, polígonos, elipses e curvas Bézier podem ser adicionadas às imagens, esticadas ou giradas.

A Suite corre em todos os grandes sistemas operativos e pode ser também utilizada através da linha de comandos. O pacote da linha de comandos é dos pacotes standart do Linux, sendo distribuidos com muitas das distros.

Features :

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.

About MagickWand

The MagickWand API is the recommended interface by the ImageMagick team. It is an easy to use programming interface for using the suite.

About MagickCore

The MagickCore API is a low-level interface for ImageMagick.

About PascalMagick

This port is a translation of the c header files for both MagickWand and Magick Core.

Screenshot

Authors

Felipe Monteiro de Carvalho

Ángel Eduardo García

License

BSD-style and compatible with the GPL.

You can read the Licence here.

Download

PascalMagick 0.4 is available here: http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=174103&release_id=431432

Status: Magick Wand headers are complete and working on both Windows and Linux.

Installation

The current version of PascalMagick works on Windows and Linux. Beta testers are necessary for the Mac OS X version.

To start with, install ImageMagick binaries from the official website: http://www.imagemagick.org/script/binary-releases.php

Now download and unzip PascalMagick package (Instructions on the Download section above).

To check that everything is working, open the PascalMagick/wand/wanddemo.lpi project. Now go to the Project --> "Compiler Options dialog" and change the "Other Units" field to point to "../magick", so it can find the PascalMagick/magick/ImageMagick.pas file. After this you can compile and run the test program.

If the program is working, it will load the image.png image located on the same directory as he is, resize it and then save it as a jpg called image.jpg.

One Extra step is necessary on Linux: Rename the image.PNG to image.png due to case issues.

Demonstration program 1

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 its 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.

Subversion

You can download the subversion version of this project using this command:

svn checkout http://svn.freepascal.org/svn/fpc/trunk/packages/base/imagemagick imagemagick

You can also download the full fpc 2.1.1 repository and it will be included.

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/pt", as it stood on 2015-02-08 after a change by BlaiseP, 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.