ImageMagick

ImageMagick® är ett programpaket för att skapa, redigera och komponera bitmappsbilder. Den kan läsa, konvertera och skriva bilder i olika format (över 100) inklusive DPX , EXR , GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, och TIFF. Använd ImageMagick för att översätta, vända och spegel, rotera, skala, luta och omvandla bilder, justera bildens färger, använda olika specialeffekter, eller rita text, linjer, polygoner, ellipser och Bezier kurvor.

ImageMagick är gratis programvara som levereras som en färdig att köra binär distribution eller som källkod som du fritt kan använda, kopiera, ändra och distribuera i både öppna och proprietära program. Det distribueras under Apache 2.0 licensen, som godkänts av OSI och rekommenderas för användning av OSSCC.

http://www.imagemagick.org/

ImageMagick är ett mycket användbart program när man ska batch-köra stora mängder bilder. Jag har själv använt den i många jobb som jag har gjort. Personligen tycker jag dock att programmet tar mycket CPU kraft och att den inte är helt lämplig i publika server sammanhang. Det finns då andra och snabbare program som jag kanske kommer att skriva om vid ett senare tillfälle.

Installera

Windows

För windows-datorer rekommenderar jag att installera ett färdigkompilerat program som du hittar här:

http://www.imagemagick.org/script/binary-releases.php#windows

Tidigare har jag haft stora problem att få Perl::Magick att fungera på Windows NT servrar. Jag vet inte om detta varit en bugg i ActivePerls ppm och om detta är ändrat eller fixat nu. Här var lösningen för mig då, runt 2000 när jag hade ett jobb som berörde detta:

  1. Image-Magick.ppd filen och den korresponderande x86-mappen måste ha sökvägen "C:\", inte "C:\TEMP" eller något annat. (PPM programmet kommer att leta efter "\.\x86\Image-Magick.tar.gz" som på grund av den föregående backslashen inte är relativt det aktiva "directory" som programmet körs ifrån.)
  2. CORE*.dll filer måste alla vara placerade i "C\perl\bin", annars kommer programmet inte att fungera. Alla IM*.dll filer måste vara placerade i "C:\imagemagick" mappen, oberoende av det eventuella värdet %MAGICK_HOME%. Dock verkade det spela mindre roll vart X*.dll filerna var placerade.

Som du kanske märker verkar detta vara en bugg och slarvigt skrivna installations script som förhoppningsvis är fixade vid det här laget.

Ubuntu och Debian

(Lättare än så här kan det inte bli)

sudo apt-get install imagemagick

Mac OS X

Ladda hem en förkompilerad version och packa upp

http://www.imagemagick.org/download/binaries/

cd Downloads/ImageMagick-6.5.5/
sudo cp bin/* /usr/local/bin/
sudo cp -fr include/* /usr/local/include/
sudo cp -fr include/* /usr/local/include/
sudo cp -fr lib/ImageMagick* /usr/local/lib/
sudo cp -fr lib/lib* /usr/local/lib/
sudo cp -fr lib/pkgconfig/* /usr/local/lib/pkgconfig/
sudo cp -fr share/doc/ImageMagick* /usr/local/share/doc/
sudo cp -fr share/man/man1/* /usr/local/share/man/man1/

Eller som shell-script

#!/bin/sh
echo "Installerar filer"
sudo cp bin/* /usr/local/bin/
sudo cp -fr include/* /usr/local/include/
sudo cp -fr lib/ImageMagick* /usr/local/lib/
sudo cp -fr lib/lib* /usr/local/lib/
sudo cp -fr lib/pkgconfig/* /usr/local/lib/pkgconfig/
sudo mkdir /usr/local/share/doc
sudo cp -fr share/doc/ImageMagick* /usr/local/share/doc/
sudo cp -fr share/ImageMagick* /usr/local/share/
sudo mkdir -p /usr/local/share/man/man1
sudo cp -fr share/man/man1/* /usr/local/share/man/man1/
### Detta funkar nog inte utan måste köras rad för rad i terminalen
#echo "Fixar sökvägar"
#export MAGICK_HOME="/usr/local"
#export PATH="/usr/local/bin:$PATH"
#export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib"

Koppla ihop så att det funkar, skriv i terminalen

export MAGICK_HOME="/usr/local"
export PATH="/usr/local/bin:$PATH"
export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib"

Av-installera

#/bin/sh
sudo rm /usr/local/bin/animate
sudo rm /usr/local/bin/Wand-config
sudo rm /usr/local/bin/compare
sudo rm /usr/local/bin/composite
sudo rm /usr/local/bin/conjure
sudo rm /usr/local/bin/convert
sudo rm /usr/local/bin/display
sudo rm /usr/local/bin/identify
sudo rm /usr/local/bin/import
sudo rm /usr/local/bin/Magick-config
sudo rm /usr/local/bin/Magick++-config
sudo rm /usr/local/bin/MagickCore-config
sudo rm /usr/local/bin/MagickWand-config
sudo rm /usr/local/bin/mogrify
sudo rm /usr/local/bin/montage
sudo rm /usr/local/bin/stream
sudo rm -fr /usr/local/include/ImageMagick
sudo rm -fr /usr/local/lib/ImageMagick-*
sudo rm -fr /usr/local/lib/libMagick++*
sudo rm -fr /usr/local/lib/libMagickCore.*
sudo rm -fr /usr/local/lib/libMagickWand.*
sudo rm -fr /usr/local/lib/pkgconfig/ImageMagick*
sudo rm -fr /usr/local/lib/pkgconfig/Magick*
sudo rm -fr /usr/local/lib/pkgconfig/Wand.*
sudo rm -fr /usr/local/share/doc/ImageMagick-*
sudo rm -fr /usr/local/share/ImageMagick-*
sudo rm -fr /usr/local/share/man/man1/animate.1
sudo rm -fr /usr/local/share/man/man1/Wand-config.1
sudo rm -fr /usr/local/share/man/man1/compare.1
sudo rm -fr /usr/local/share/man/man1/composite.1
sudo rm -fr /usr/local/share/man/man1/conjure.1
sudo rm -fr /usr/local/share/man/man1/convert.1
sudo rm -fr /usr/local/share/man/man1/display.1
sudo rm -fr /usr/local/share/man/man1/identify.1
sudo rm -fr /usr/local/share/man/man1/ImageMagick.1
sudo rm -fr /usr/local/share/man/man1/import.1
sudo rm -fr /usr/local/share/man/man1/Magick-config.1
sudo rm -fr /usr/local/share/man/man1/Magick++-config.1
sudo rm -fr /usr/local/share/man/man1/MagickCore-config.1
sudo rm -fr /usr/local/share/man/man1/MagickWand-config.1
sudo rm -fr /usr/local/share/man/man1/mogrify.1
sudo rm -fr /usr/local/share/man/man1/montage.1
sudo rm -fr /usr/local/share/man/man1/stream.1

Kompilera själv

Ladda hem (notera att det idag säkert finns nyare versioner än ImageMagick-6.3.1-2):

wget ftp://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/ImageMagick-6.3.1-2.tar.gz

Packa upp:

tar xvzphf ImageMagick-6.3.1-2.tar.gz
cd ImageMagick-6.3.1/
./configure

eller

./configure --with-modules=yes
------------------------------------------------------------------------
ImageMagick is configured as follows. Please verify that this configuration
matches your expectations.

Host system type : i686-pc-linux-gnu

Option                        Value
-------------------------------------------------------------------------
Shared libraries  --enable-shared=yes           yes
Static libraries  --enable-static=yes           yes
Module support    --with-modules=yes            yes
GNU ld            --with-gnu-ld=yes             yes
Quantum depth     --with-quantum-depth=16       16

Delegate Configuration:
BZLIB             --with-bzlib=yes              yes
DPS               --with-dps=yes                no
FlashPIX          --with-fpx=no         no
FreeType 2.0      --with-ttf=yes                yes
GhostPCL          None                          pcl6 (unknown)
Ghostscript       None                          gs (8.15.3)
Ghostscript fonts --with-gs-font-dir=default    /usr/share/ghostscript/fonts/
Ghostscript lib   --with-gslib=no               no
Graphviz          --with-gvc=yes                no
JBIG              --with-jbig=yes               no
JPEG v1           --with-jpeg=yes               yes
JPEG-2000         --with-jp2=yes                yes
LCMS              --with-lcms=yes               no
Magick++          --with-magick-plus-plus=yes   yes
PERL              --with-perl=yes               /usr/bin/perl
PNG               --with-png=yes                yes
TIFF              --with-tiff=yes               yes
Windows fonts     --with-windows-font-dir=      none
WMF               --with-wmf=yes                no
X11               --with-x=                     yes
XML               --with-xml=yes                yes
ZLIB              --with-zlib=yes               yes

X11 Configuration:
X_CFLAGS     = -I/usr/X11R6/include
X_PRE_LIBS   = -lSM -lICE
X_LIBS       = -L/usr/X11R6/lib
X_EXTRA_LIBS =

Options used to compile and link:
PREFIX      = /usr/local
EXEC-PREFIX = /usr/local
VERSION     = 6.2.6
CC          = gcc
CFLAGS      = -g -O2 -Wall -pthread
CPPFLAGS    = -I/usr/local/include
PCFLAGS     =
DEFS        = -DHAVE_CONFIG_H
LDFLAGS     = -L/usr/local/lib -L/usr/X11R6/lib -lfreetype -lz -L/usr/lib
LIBS        = -lMagick -ltiff -lfreetype -ljpeg -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz -lpthread -lm -lpthread
CXX         = g++
CXXFLAGS    = -pthread

Ha koll på vad det är som fattas på slutet. Försök att installera så mycket som möjligt med YaST (om SuSE) eller apt-get (om Ubuntu eller Debian).

make
make check

om allt är OK

make install

Ev problem med:
"... error while loading shared libraries ..."
Se till att: "/usr/local/lib" finns med i "/etc/ld.so.conf".

Kör kommandot:

/sbin/ldconfig

Några användbara exempel från komandoraden

Konvertera alla *-jpg bilder i en mapp till 25% mindre bilder med prefixet thumb-*
for img in *.jpg
do
convert -sample 25%x25% $img thumb-$img
done

Konverterar alla tif bilder till en översiktskarta
convert 'vid:*.tif' dir.pnKonverterar *.tif till animation
convert -delay 20 *.tif dna.gifeller
convert -delay 20 *.tif dna.png(ger nummrerade pngs dna.png.1 dna.png.1 osv)

Skriv text på bilden:

convert -font helvetica -draw "text 100,100 Cockatoo" dir.png dir.annotate.png

Filter:

convert -swirl 180 dna.png.1 swirl.png
convert -implode 99 dna.png.1 implode_pos99.png
convert -implode -99 dna.png.1 implode_neg99.png
convert -implode 50 dna.png.1 implode_pos50.png
convert -implode -50 dna.png.1 implode_neg50.png
convert -implode 10 dna.png.1 implode_pos10.png
convert -implode -10 dna.png.1 implode_neg10.png
convert -charcoal 10 dna.png.1 charcoal_f10.png
convert -paint 10 dna.png.1 paint_f10.png
convert -wave 10x200 dna.png.1 wave_f100.png
http://www.linbox.com/ucome.rvt/any/doc_distrib/ImageMagick-5.1.1/www/montage.html

Skapa ett motage av alla tif bilder som är mest 256 px bred och 192 px på höjden,
omgiven av en röd rand, och separerade med 10 px:
montage -geometry 256x192"+1"0"+1"0 -bordercolor red *.tif montage.pngmer på:
http://www.cit.gu.edu.au/~anthony/graphics/imagick6/


Photo CD

2048x3072

convert IMG0001.PCD[5] test1.jpg

1024x1536

convert IMG0001.PCD[4] test1.jpg

512x768

convert IMG0001.PCD[3] test1.jpg

256x384

convert IMG0001.PCD[2] test1.jpg

128x192

convert IMG0001.PCD[1] test1.jpg

64x96 (?)

convert IMG0001.PCD[0] test1.jpg

Skärpefilter

-unsharp <radius>{x<sigma>}{+<amount>}{+<threshold>}

A general rule of thumb for choosing sigma might be:

if radius < 1, then sigma = radius
else sigma = sqrt(radius)

Photoshop ImageMagick
radius: 1.5 radius: 1.5
sigma:ingen sigma: sqrt(1.5) = 1.2247
amount: 100% amount: 1.0
thesh.: 5 thesh.: 0.02 (0.02 * 255)
convert -unsharp 1.5x1.0+1.0+0.02 IMG0012.PCD[5] test_us3.png-unsharp 1.5x1.34+1.2247+0.02 (ganska grusig)
-unsharp 1.5x1.0+1.2247+0.02 (inte så mycket effekt, dock inte grusig)
-unsharp 1.5x1.0+1.2247+0.0039 (skarp men brusig)

Perl modulen Image::Magick

En enkel resize med ett uppskärpnings filter

#!/usr/bin/perl
use Image::Magick;
$bild = "bild.jpg";
$geo = '512x512';

$image = Image::Magick->new;
$x = $image->Read($bild);
# För skärpa:
$x = $image->Resize( geometry=> ${geo}, blur => '<1' );
# Enkel:
$x = $image->Resize( geometry=> ${geo} );
$x = $image->Write('heap_bild_sharp.jpg');
undef $image;
}

Ping(), för att plocka ut bredd, höjd, storlek och format

use Image::Magick;
$image = Image::Magick->new;
($width, $height, $size, $format) = $image->Ping($filename);
# Syntax:
geometry=>geometry,
width=>integer, height=>integer, filter=>{Point, Box,
Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic,
Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, blur=>double
Ett perl-script som demonstrerar olika filter
http://www.dylanbeattie.net/magick/filters/result.html
#!/bin/perl

print << "ENDBLOCK";

<html>
<head>
<title>ImageMagick Filters</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>ImageMagick Resize Filters</h1>
<p>This
page demonstrates the results of resampling three images using the
various resize filters and blur settings available in ImageMagick, and
the file size of the resulting thumbnail images. Click the image
filename at the top of each section to see the fullsize image.</p>
<p>Results
produced using PerlMagick 5.4.0 under Windows 2000, using this <a
href="filters.pl">Perlmagick script</a></p>
<p><a href="http://www.dylanbeattie.net/magick/">Home</a></p>
<hr>
<h1>The Results</h1>

ENDBLOCK
use Image::Magick;

print "<table cellpadding=\"5\" border=\"1\">";
print "<tr><td>Filter:</td>";
my $colcount = 1;
for (my $blur = 0.125; $blur <= 4; $blur *= 2) {
print "<td>Blur $blur</td>";
$colcount++;
}
my $filesize;
my $quality = 85;
foreach $imagefile (glob("*.jpg *.gif")) {

print("<tr><td colspan=\"$colcount\"><a
href=\"$imagefile\">$imagefile</a> (Click for original
image)</td></tr>");
foreach $filter (Point, Box,
Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic,
Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc) {
print "<tr><td>$filter</td>";
for (my $blur = 0.125; $blur <=4; $blur *= 2) {
warn("Writing filtered/$filter\_$blur\_$imagefile\n");
my $image = new Image::Magick;
$image->Read($imagefile);
$image->Resize(geometry=>'128x128', filter=>"$filter", blur=>$blur);
$image->Set(quality=>$quality);
$image->Write("jpg:filtered/$filter\_$blur\_$imagefile");
$filesize = ((stat("filtered/$filter\_$blur\_$imagefile"))[7])/1024;
$filesize = int($filesize*100)/100;

print "<td bgcolor=\"#cccccc\"><img
src=\"filtered/$filter\_$blur\_$imagefile\"><br>$filesize
Kb</td>";
undef $image;            
}
print "</tr>";
}
}

 

Relaterade dokument

SVG Grafik

JPEG Tools

Exif-Data

 

Sammanställd och författad av Hans E Andersson 2005

 


"ImageMagick", Hans E Andersson: 2005-10-18 18:03:49, ändrad: 2011-04-22 00:13:22

 

Copyright © 2005 - 2019 HEAP. Alla rätter förbehållna. Integritetspolicy