Knihovna ImageMagick - seznámení a ukázka použití v C++.
17.1.2019
ImageMagick je knihovna pro práci s grafickými soubory. Ve srovnání s jinými podobnými knihovnami má některé výhody a specifika. Takovéto hodnocení je samozřejmě vždy trochu subjektivní a závisí na tom, co konkrétně od té které knihovny potřebujeme a očekáváme.
Pro (neprogramující) uživatele poskytuje nástroj volaný z příkazové řádky, pomocí kterého lze aplikovat nejrůznější filtry úpravy grafických souborů.
Popis a dokumentaci samozřejmě najdeme na výše uvedených stránkách. V dalším se budu zabývat knihovnou a jejím programátorským rozhraním.
Velkým plusem je široký výběr programovacích jazyků, pro které knihovna poskytuje rozhraní. Jejich výčet samozřejmě najdete na webu, mě osobně se líbí především možnost využití v C++ a PHP - ukázky kódu které v dalších příspěvcích na tomto webu budu uvádět, budou právě v C++ a PHP.
Knihovna poskytuje rozsáhlý výběr funkcí pro úpravy a nejrůznější efekty a filtry grafických souborů. Za velké plus považuji to, že na rozdíl od jiných podobných knihoven při uložení úprav do souboru jsou v tomto souboru zachovány EXIF informace.
Instalace a nastavení překladače
Příslušné balíčky by měly být k disposici ve standardních repositářích hlavních Linuxových distribucí. Pro vývoj v C++ použijeme knihovnu Magick++, kterou konkrétně v Ubuntu získáme instalací balíčku libmagick++-dev s jeho závislostmi. Pro využití v PHP pak nainstalujeme (kromě samotného balíku php) balík php-imagick.
Samozřejmě na webu knihovny najdeme aktuální verze pro různé jazyky a platformy.
Jednoduchý kód v C++
Následující jednoduchá ukázka kódu používající Magick++ načte zadaný soubor obrázku, převede na stupně šedé a zapíše do jiného souboru. Tento upravený obrázek je pak zobrazen v samostatném okně.
#include <Magick++.h> int main(int argc, char** argv) { Magick::InitializeMagick(*argv); Magick::Image image; try { image.read("karty.jpg"); image.grayscale(Magick::UndefinedPixelIntensityMethod); image.write("karty-gs.jpg"); image.display(); } catch(Magick::Exception& e) { printf("%s\n", e.what()); } printf("hotovo"); getchar(); return 0; }
Uvedený kód sestavíme pomocí GCC (resp. G++) příkazem:
g++ magick-cpp.cpp -g `pkg-config --libs --cflags Magick++` -omagick-cpp
Jak je z uvedeného kódu zřejmé, knihovna je napsaná objektově a využívá standardní knihovny jazyka C++ (namespace std) včetně použití výjimek pro detekci chyb. Zde použitá třída výjimky Magick::Exception je odvozena od standardní třídy std::exception.
Nové články
Souborové operace na Linuxu v jazyce C
Využívejte Midnight Commander naplno
Procesor a jádra, běh na určeném jádru v C.
picom - kompozitor pro odlehčená Linuxová prostředí
Kontakt
739 219 991
live:radekchalupa_1