1       Imagemagick  1

2       Käyttö konenäkösovelluksissa  2

3       Asennus ja käyttö komentoriviltä  2

3.1        Asennus  2

3.2        Käyttö komentoriviltä  3

4       Käyttö sovelluksesta  5

5       Magick++  7

Konfigurointi Visual Studio 2010  7

6       Magick.NET  9

6.1        ”ReadImage.cs” esimerkki 9

Lähteet                                                                                                                               6

 

1      Imagemagick

 

Imagemagick on ilmainen avoimen lähdekoodin kuvankäsittelyohjelma. Ohjelmassa ei ole kunnollista graafista käyttöliittymää vaan sen käyttö tapahtuu komentorivin kautta annettavilla komennoilla. Ohjelmassa on kuitenkin
”Imagemagick Display”-käyttöliittymä, jolla voi suorittaa yksinkertaisia muokkauksia kuville. Imagemagick on tarkoitettu lähinnä kuvien muokkauksen rutiininomaisiin toimenpiteisiin.

 

Komentorivin kautta voidaan tehdä hyvinkin monimutkaisia toimintoja. Muokkauksen esikatselu ei kuitenkaan ole mahdollista komentoriviltä tehtäessä. Komentoriviltä voidaan tehdä mm. seuraavia toimintoja:

  • Formaatin muokkaaminen
  • Koon, kiertymän ja asennon muokkaaminen.
  • Läpinäkyvyys
  • Piirtäminen
  • Efektejä ja suodattimia
  • Gif-animaatio
  • Tekstin lisäys
  • Kuvan tietojen tunnistus
  • Muotojen ja kuvioiden tunnistus
  • Värien muokkaus

 

Kattava listaus imagemagickin ominaisuuksista löytyy http://www.imagemagick.org/script/index.php.

 

 

Imagemagickin tärkein ominaisuus on kuitenkin Imagemagick-kirjasto, jonka avulla imagemagickin toimintoja voidaan käyttää suoraan ohjelmien kautta. Imagemagick-kirjastoon on erilaisia rajapintoja eri ohjelmointikielille:

  • MagickWand, rajapinta C-kieleen
  • Magick++, rajapinta C++ -kieleen.
  • JMagick, oliopohjainen rajapinta Java-kieleen.
  • LVOOP ImageMagick, oliopohjainen rajapinta Labwieviin.
  • Magick.Net, rajapinta C# -kieleen.

 

Imagemagick tukee erittäin suuria kuvia, jopa terapikseleitä. Se on myös ”Thread safe”, eli ohjelma voi käyttää sen kirjastoja turvallisesti samaan aikaan muiden aliohjelmien kanssa.

 

2      Käyttö konenäkösovelluksissa

 

Imagemagickia voidaan käyttää kuvien automaattiseen muokkaukseen ja kuvien ominaisuuksien tunnistamiseen konenäkösovelluksissa.

 

Käytännössä kuva luetaan kameralta, ja muokataan ohjelmasta käsin käyttämällä haluttua rajapintaa ja funktiota imagemagick-kirjastoon. Rapapinta palauttaa muokatun kuvan ja siitä halutut asiat.

 

3      Asennus ja käyttö komentoriviltä

 

3.1      Asennus

 

Imagemagick asennetaan sen omilta kotisivuilta käsin. Imagemagick tarjoaa kattavasti eri versioita seuraaville käyttöjärjestelmille: Unix, Mac OS X, iOS sekä Windows.  Oman version voi ladata joko Web-selaimella tai FTP-ohjelmalla. Sivustolla on hyvät ja laajat ohjeet siitä mikä versioista olisi järkevintä valita. 64-bittiselle Windows-käyttöjärjestelmälle suositellaan omaa versiotansa, mutta valittavissa on myös useita muita, joissa ominaisuudet vaihtelevat.

3.2      Käyttö komentoriviltä

 

Imagemagick on työkalu, jolla voidaan muokata kuvia komentorivin kautta.  Asennuksen jälkeen ohjelma suosittelee testaamaan sen toimivuutta muutamalla yksinkertaisella komennolla Windowsin komentorivillä. Testaamisessa voi käyttää avuksi ohjelmistossa Images-kansiossa olevia testikuvia, esim. kirjoittamalla komentoriville käskyt:

cd Images
convert screen.jpg win:

jolloin testikuvan pitäisi ilmestyä ruudulle.

 

Ohjelmistoa käytettään antamalla komentoriville komentoja, joita on paljon erilaisia. Komennot löytyvät ohjelmiston valmistajan nettisivuilta, http://www.imagemagick.org/script/index.php

Seuraavaksi esitellään muutama yleinen komento, ja niiden vaikutukset alkuperäiseen kuvaan. Esimerkissä 3.2.1 käydään läpi tiedostomuodon muuttaminen toiseksi Imagemagick:n avulla, esimerkissä 3.2.2 näytetään, miten kuvan kokoa voi muuttaa ja esimerkissä 3.2.3 esitellään, miten värillisestä kuvasta voi tehdä mustavalkoisen. Esimerkiksi esimerkin 3.2.2 mukaisesti tiedostossa kuvia olevaa kuvaa nimeltä krookus voi pienentää 28 %:ksi alkuperäisestä ja tallentaa uuden kuvan tiedostoon pikkukrokus.png antamalla komentorivillä seuraavat käskyt:

 

cd kuvia

magic krookus.jpg –resize 28% pikkukrokus.png

 

Ohjelmiston valmistajan kotisivuilta löytyy runsaasti esimerkkejä erilaisista tilanteista, jossa Imagemagick:iä voidaan käyttää hyödyksi.

 

 

 

 

 

 

 

 

Esimerkki 3.2.1. Tiedostomuodon  muuttaminen.

 

Imagemagickillä voidaan mm. helposti muuttaa tiedostomuotoa:

 

Esimerkki 3.2.2. Kuvien kokoon muuttaminen.

 

Esimerkki 3.2.3. Värikuvan muuttaminen harmaasävyiseksi Imagemagick-ohjelmiston avulla.

 

 

 

4      Käyttö sovelluksesta

 

Yleisin tapa käyttää Imagemagickia toisesta sovelluksesta käsin on ladata ja asentaa halutulle ohjelmointikielelle tehty Imagemagick-rajapinta eli .dll-tiedostot, referoida .dll-tiedostot ohjelmointiympäristöön ja käyttää niitä koodissa.

 

Helpompi tapa aloitteleville ohjelmoijille on käyttää imagemagickin komentorivikäskyjä ohjelmasta käsin. Tämä edellyttää että imagemagickista on asennettu toimiva versio. Ohjelman käyttö on hidasta, koska imagemagick käynnistyy, käsittelee yhden kuvan ja sulkee itsensä. Useiden kuvien käsittely voi kestää jopa minuutteja. Hyvänä puolena voidaan pitää erittäin yksinkertaista ohjelmointia.

 

Seuraava C#-kielinen esimerkki lukee kuvat ”kuva1.png”–”kuva10.png”, muuntaa ne ja tallentaa nimillä ”uus1.png”–”uus10.png”.
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Diagnostics;//Tämä tarvitaan jotta voidaan käyttää Process.Start- komentoa.

 

namespace ConsoleImageMagickExample

{

    class Program

    {

        static void Main(string[] args)

        {

 

            int i = 1;//Annetaan indeksi

            while (i <= 10)//suoritetaan ohjelmaa niin kauan kuin indeksi on pienempi tai yhtäsuuri kuin 10

            {

                String intputFileName = @"C:\magick\kuva" + i + ".png";//Luettavan kuvan nimi ja tiedostopolku.

                String outputFileName = @"C:\magick\uus" + i + ".png";//Muokatun kuvan nimi ja polku

 

                //String arguments sisältää komentorivin argumentit.

                string arguments = string.Format(@"{0} -bias " + i + "% -morphology Convolve LoG:0x2 {1}", intputFileName, outputFileName);

                var startInfo = new ProcessStartInfo

                {

                    Arguments = arguments,

                    FileName = @"C:\Program Files\ImageMagick-6.9.3-Q16\convert.exe"//Kertoo käynnistettävän tiedoston polun

                };

                startInfo.UseShellExecute = false;//Piilottaa käynnistyvän ohjelman jotta se ei "välky" päälle ja pois

 

                Process.Start(startInfo).WaitForExit();//Käynnistetään convert.exe ja odotetaan sen sammumista

                i++;//Kasvatetaan indeksiä yhdellä

            }

        }

    }

}

 

 

5      Magick++

Konfigurointi Visual Studio 2010

Imagemagickin saa konfiguroitua Visual Studio 2010:n.

  1. Tallentaessasi Imagemagickia lataa myös c ja c++ kirjastot

2. Kun olet avannut työn Visua Studiolla mene Project ja sen valikosta properties. Ikkunan avautuessa valitse configuration valikosta Active(Debug) ja mene Configuration manageriin ja vaihda Debug Releaseen. Vaihtoehtoisesti voit valita Cnfiguration valikosta Releasen.

 

 

 

Tämän jälkeen valitse vasemmanpuoleisen valikon c/c++ ja sen alavalikosta General. Täältä valitse Additional Include Directory, nyt valitse polku johon tallensit Imagemagickin ja valitse kansio ”include”.

 

Valitse Code Generation alavalikosta ja muuta Runtime Library kohta Multi-threaded (/MT):ksi

3. Valitse vasemmanpuoleisesta valikosta Linker ja sieltä alavalikko General. Tästä sivusta laitetaan Additional Library Directories ja laita taas polku johon tallensit Imagemagickin, mutta tällä kertaa laitetaan viimeiseksi poluksi ”lib”.

Tämän jälkeen mene alavalikkoon Input ja avaa Additional Dependencies. Tänne kirjoita CORE_RL_magick_.lib, CORE_RL_Magick++_.lib, CORE_RL_wand_.lib, X11.lib

4. Mikäli käytät c++ kieltä, muista laittaa seuraavat #include <Magick++.h> kirjasto ja using namespace Magick; nimiavaruus.

Jos käytät c kieltä, käytä #include <wand/magick_wand.h> kirjastoa.

 

6      Magick.NET

 

Magick.NET on rajapinta C#/VB -ohjelmointikielen ja Imagemagickin kirjastojen välille. Magick.NET:in avulla imagemagickin toimintoja voidaan käyttää C#- tai Visual Basic- kielisestä ohjelmasta. Magick.NET:in kotisivulta löytyy valmiitä lähdekoodeja joiden avulla voidaan rakentaa imagemagickia käyttävä ohjelma.

 

6.1      ”ReadImage.cs” esimerkki

 

Tässä esimerkissä käydään läpi valmiin esimerkin rakentaminen. Ohjelmointiympäristönä on Microsoft Visual Studio Express C# 2010 ja esimerkkinä käytetään ReadImage.cs -ohjelmapätkää:

https://magick.codeplex.com/SourceControl/latest#Magick.NET.Samples/Samples/Magick.NET/ReadImage.cs

 

  1. Avaa uusi C# Console application Visual Studiossa. Poista lähdekoodi.

2. Kopioi ReadImage.cs lähdekoodi Visual Studioon.

 3. Lisää koodin Main()-funktio.

4. Lataa linkistä rajapinta Magick.Net:iin: https://magick.codeplex.com/releases/view/620221 . Kopioi oikean .Net-version kansio ohjelmasi projektin ”bin”-kansioon.

 5. Lisää referensseihin äsken lataamassasi kansiossa oleva Magick.NET-(Q8/Q16/Q16-HDIR).dll -tiedosto.

6. Kokeile kääntää projekti, à Build Solution.

 7. Lisää referensseihin muut tarvittavat, esimerkin koodissa referensseihin lisättiin System.Drawing (Add reference à.NET à System.Drawing)

 8. Kokeile kääntää Projekti

 9. Jos kääntäjä herjaa “Could not load file or assembly 'Magick.NET-x86.DLL' or one of its dependencies”, kokeile asentaa VC2012 Runtime https://www.microsoft.com/en-in/download/details.aspx?id=30679

10. Viimeistään nyt ohjelman pitäisi kääntyä normaalisti

11. Valitse tietokoneen kovalevyltä jokin kuvatiedosto, ja kopioi sen polku koodiin ” SampleFiles.SnakewareJpg”- koodin tilalle.

12. Kutsu pääohjelmassa Luokan ReadImageSamples jotain funktiota, esim. ReadImageSamples.ReadBasicImageInformation();

13. Suorita ohjelma

14. Jos ohjelma kaatuu ja ilmoittaa alla olevan viestin kyse on Visual Studion ongelmasta Windowsin 64-bittisen version kanssa. Onglema saattaa korjaantua muokkaamalla Windowsin rekisteriä. Kokeile myös muuttaa Visual Studiosta: “Tools | Options | Projects and Solutions | Web Projects | Use the 64 bit version of IIS Express…”

  1. 15.  Esimerkin ohjelmakoodi näyttää tältä:

//=================================================================================================

// Copyright 2013-2016 Dirk Lemstra <https://magick.codeplex.com/>

//

// Licensed under the ImageMagick License (the "License"); you may not use this file except in

// compliance with the License. You may obtain a copy of the License at

//

//   http://www.imagemagick.org/script/license.php

//

// Unless required by applicable law or agreed to in writing, software distributed under the

// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either

// express or implied. See the License for the specific language governing permissions and

// limitations under the License.

//=================================================================================================

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using ImageMagick;

using System.Drawing;

 

namespace RootNamespace.Samples.MagickNET

{

    public static class ReadImageSamples

    {

        private static MemoryStream LoadMemoryStreamImage()

        {

            return new MemoryStream(LoadImageBytes());

        }

 

        private static byte[] LoadImageBytes()

        {

            return File.ReadAllBytes(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png");

        }

 

        public static void ReadImage()

        {

            // Read from file.

            using (MagickImage image = new MagickImage(@"C:\Users \Documents\Visual Studio 2010\Projects\FinalImage\kuva.png"))

            {

            }

 

            // Read from stream.

            using (MemoryStream memStream = LoadMemoryStreamImage())

            {

                using (MagickImage image = new MagickImage(memStream))

                {

                }

            }

 

            // Read from byte array.

            byte[] data = LoadImageBytes();

            using (MagickImage image = new MagickImage(data))

            {

            }

 

            // Read image that has no predefined dimensions.

            MagickReadSettings settings = new MagickReadSettings();

            settings.Width = 800;

            settings.Height = 600;

            using (MagickImage image = new MagickImage("xc:yellow", settings))

            {

            }

 

            using (MagickImage image = new MagickImage())

            {

                image.Read(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png");

                image.Read(data);

                image.Read("xc:yellow", settings);

 

                using (MemoryStream memStream = LoadMemoryStreamImage())

                {

                    image.Read(memStream);

                }

            }

        }

 

        public static void ReadBasicImageInformation()

        {

            // Read from file

            MagickImageInfo info = new MagickImageInfo(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png");

 

            // Read from stream

            using (MemoryStream memStream = LoadMemoryStreamImage())

            {

                info = new MagickImageInfo(memStream);

            }

 

            // Read from byte array

            byte[] data = LoadImageBytes();

            info = new MagickImageInfo(data);

 

            info = new MagickImageInfo();

            info.Read(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png");

            using (MemoryStream memStream = LoadMemoryStreamImage())

            {

                info.Read(memStream);

            }

            info.Read(data);

 

            Console.WriteLine(info.Width);

            Console.WriteLine(info.Height);

            Console.WriteLine(info.ColorSpace);

            Console.WriteLine(info.Format);

            Console.WriteLine(info.Density.X);

            Console.WriteLine(info.Density.Y);

            Console.WriteLine(info.Density.Units);

        }

 

        public static void ReadImageWithMultipleFrames()

        {

            // Read from file

            using (MagickImageCollection collection = new MagickImageCollection(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png"))

            {

            }

 

            // Read from stream

            using (MemoryStream memStream = LoadMemoryStreamImage())

            {

                using (MagickImageCollection collection = new MagickImageCollection(memStream))

                {

                }

            }

 

            // Read from byte array

            byte[] data = LoadImageBytes();

            using (MagickImageCollection collection = new MagickImageCollection(data))

            {

            }

 

            // Read pdf with custom density.

            MagickReadSettings settings = new MagickReadSettings();

            //settings.Density = new Density(144);

 

            using (MagickImageCollection collection = new MagickImageCollection(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png", settings))

            {

            }

 

            using (MagickImageCollection collection = new MagickImageCollection())

            {

                collection.Read(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png");

                using (MemoryStream memStream = LoadMemoryStreamImage())

                {

                    collection.Read(memStream);

                }

                collection.Read(data);

                collection.Read(@"C:\Users\Documents\Visual Studio 2010\Projects\FinalImage\kuva.png", settings);

            }

        }

    }

 

    public class Program

    {

        static void Main(string[] args)

        {

            ReadImageSamples.ReadBasicImageInformation();

            Console.ReadLine();

        }

    }

}

 

 

 

  • No labels
You must log in to comment.