Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

GráficosSonidoVídeo

Instalar Image Analyzer con WineInstalar MAGIX Photo Designer con Wine

Instalar ImageMagick desde cero




Instalar ImageMagick desde cero




Copyright

Copyright © José Luis Lara Carrascal  2015-2024   http://manualinux.es



Sumario

Introducción
Instalación
ImageMagick 6
Iniciamos ImageMagick
Enlaces



Introducción  

ImageMagick
es un conjunto de programas de línea de comandos, orientado a la edición, creación, conversión y composición de archivos de imagen. Soporta más de 200 formatos gráficos y uno de sus componentes, convert, es el programa utilizado por defecto en los manuales de esta web, para crear los iconos que el paquete no proporciona de forma nativa. Además de estar referenciado también, en manuales como el del filtro IM para Gimp. Era evidente que más tarde, o más temprano, ImageMagick tenía que estar documentado en este sitio web.



Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado ImageMagick para la elaboración de este documento.

* GCC - (13.2.0) o Clang - (17.0.6)
* Gawk - (5.3.0)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.11)
   LibX11 - (1.8.7)
   LibXext - (1.3.6)
   LibXt - (1.3.0)
* Cairo - (1.18.0)
* DjVULibre - (3.5.28)
* Fftw3 - (3.3.10)
* Fontconfig - (2.15.0)
* Freetype2 - (2.13.2)
* Ghostscript - (10.02.1)
* Gperftools - (2.13)
* Graphviz - (10.0.1)
* Libbzip2 - (1.0.8)
* Libheif - (1.17.6)
* Libjbig - (2.1)
* Libjpeg-turbo - (3.0.2)
* Libjxl - (0.10.0)
* Liblcms - (2.16)
* Libpng - (1.6.43)
* LibRaw - (0.21.2)
* Librsvg - (2.57.1)
* LibTIFF - (4.6.0)
* Libwebp - (1.3.2)
* Libwmf - (0.2.8.4)
* Libxml2 - (2.11.7)
* Libzip - (1.10.1)
* Libzstd - (1.5.5)
* Liquid Rescale Library - (0.4.2)
* OpenCL Headers - (2023.12.14)
* OpenCL ICD Loader - (2023.12.14)
* OpenEXR - (3.2.1)
* OpenJPEG - (2.5.0)
* Pango - (1.50.14)
* XZ Utils - (5.6.0)
* Zlib - (1.3.1)

Intérpretes de Lenguaje de Programación

* Perl - (5.38.0)



Descarga

ImageMagick-7.1.1-29.tar.xz

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'

Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang y, por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
OpenMP
$ export {C,CXX}FLAGS+=" -ftree-parallelize-loops=$(nproc)"
LTO
$ export AR=gcc-ar RANLIB=gcc-ranlib NM=gcc-nm
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 g1 -fprofile-generate=/var/pgo/imagemagick'
2) Ejecutar 'make check' en el directorio de compilación.
3) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick -Wno-error=coverage-mismatch'
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm -polly-omp-backend=LLVM'
OpenMP
$ export {C,CXX}FLAGS+=' -fopenmp=libomp -fopenmp-version=50'
$ export LDFLAGS+=" -L$(llvm-config --libdir) -lomp -ltsan"
LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto'
ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma.
Unified LTO
LTO >> ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin'
ThinLTO >> LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full'
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD.
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/imagemagick; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick'
CSPGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-use=/var/pgo/imagemagick -fcs-profile-generate=/var/pgo/imagemagick'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión y mezcla con el perfil PGO, del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/imagemagick; llvm-profdata merge $PGODIR/default_*.profraw $PGODIR/default.profdata --output=$PGODIR/cspgo.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick/cspgo.profdata'

Parámetros adicionales

Parámetros adicionales de eliminación de avisos en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para Mold
$ export LDFLAGS+=' -fuse-ld=mold'

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO/PGO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang CXX=clang++

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf ImageMagick-7.1.1-29.tar.xz
$ cd ImageMagick-7.1.1-29
$ ./configure --prefix=/usr --sysconfdir=/etc --with-libstdc=/opt/gcc13/lib64 \
--with-modules --with-fftw --with-gslib --with-rsvg --with-perl --with-gvc \
--with-tcmalloc --with-jxl --disable-static --enable-opencl --libdir=/usr/lib64
$ find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g'

Explicación de los comandos

--prefix=/usr
: Instala el programa en el directorio principal /usr.

--sysconfdir=/etc : Instala los archivos de configuración en /etc/ImageMagick-7, en lugar de /usr/etc/ImageMagick-7.

--with-libstdc=/opt/gcc13/lib64 : Le indicamos la ruta de instalación de Libstdc++, en el caso de que utilicemos otra versión de GCC diferente a la principal del sistema.

--with-modules : Compila el soporte de módulos compartidos en lugar de integrarlos de forma estática en los binarios ejecutables del paquete.

--with-fftw : Activa el soporte de FFTW.

--with-gslib : Activa el soporte de Libgs de Ghostscript.

--with-rsvg : Activa el soporte de imágenes en formato SVG mediante el uso de Librsvg. Si no añadimos esta opción, se utilizará Cairo para compilar el soporte de este formato de imagen.

--with-perl : Activa la compilación e instalación de PerlMagic.

--with-gvc : Activa el soporte de Graphviz.

--with-tcmalloc : Activa el soporte del asignador de memoria, TCMalloc, para optimizar el uso de la misma en operaciones multihilo.

--with-jxl : Activa el soporte del formato de compresión JPEG XL, mediante el uso de Libjxl.

--disable-static : Desactiva la compilación de las librerías estáticas, al no ser necesarias para la ejecución de los programas.

--enable-opencl : Activa el soporte de OpenCL en algunas de las operaciones del programa. Requiere de un controlador de gráficos que lo soporte también.

--libdir=/usr/lib64 : Instala las librerías en /usr/lib64, en sistemas de 64 bits multiarquitectura. La ubicación y el nombre de este directorio, puede variar en función de la distribución que cada usuario use.

find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' : Modificamos los archivos Makefile creados para evitar que los binarios se enlacen contra la librería Libgomp de GCC, en el caso de que utilicemos Clang para compilar el paquete, y se enlacen sólo contra la librería Libomp proporcionada por LLVM. También modificamos los archivos de configuración que se instalan para Pkg-config, para que aparezca de forma correcta esta librería en los mismos.

Compilación

$ make

Parámetros de compilación opcionales

V=1 : Muestra más información en el proceso de compilación.

-j$(nproc) : Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

Instalación como root

$ su
# make install-strip
# ldconfig -v

Estadísticas de Compilación e Instalación de ImageMagick

Estadísticas de Compilación e Instalación de ImageMagick
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Tarjeta gráfica AMD Radeon RX 580 2048SP
Controlador de gráficos AMDGPU 23.0.0
Sistema de archivos XFS
Versión del Kernel 6.7.6-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BORE
Versión de Glibc 2.39
Enlazador dinámico LLD 17.0.6
Compilador Clang 17.0.6 + Ccache 4.9.1
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm -polly-omp-backend=LLVM -fopenmp=libomp -fopenmp-version=50 -flto -funified-lto -fprofile-use=/var/pgo/imagemagick/cspgo.profdata -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt
Parámetros de compilación V=1 -j12
Tiempo de compilación 24"
Tiempo de instalación 1' 01"
Tiempo total consumido 1' 25"
Archivos instalados 800
Mostrar/Ocultar la lista de archivos instalados
Enlaces simbólicos creados 18
Mostrar/Ocultar la lista de enlaces simbólicos creados
Ocupación de espacio en disco 22,5 MB

Aplicaciones instaladas

Aplicaciones instaladas
Ejecutable
Descripción
magick Es el nuevo programa principal y único binario ejecutable a partir de la versión 7 de ImageMagick. El resto de ejecutables que existían en la versión 6, se han convertido en enlaces simbólicos que apuntan a éste, mostrando las opciones particulares de cada uno cuando los ejecutamos, y preservando la compatibilidad nominal con los de la versión 6. Digamos que se adopta el mismo modo de funcionamiento que el otro proyecto derivado de ImageMagick, GraphicsMagick. Todos los comandos siguientes en esta tabla se pueden invocar también desde este mismo comando: magick animate, magick convert, magick compare, etc.

Un ejemplo:

magick -resize 1024 fondo-120.jpg fondo-120a.jpg
magick-script Nuevo comando introducido a partir de la versión 7 de ImageMagick que sirve para crear scripts de ejecución, encabezados con la variable de entorno con el nombre del programa. Un ejemplo:

#!/bin/env magick-script
-size 100x100 xc:red ( rose: -rotate -90 ) +append  -write show:
animate
Anima una secuencia de imágenes en cualquier servidor X. Es el programa de ImageMagick utilizado para visualizar animaciones en formato GIF. También se puede utilizar para visualizar un directorio de imágenes en modo presentación. Un ejemplo:

animate -delay 200 ~/Fondos/*.jpg

El retardo (-delay 200) se mide siempre en milisegundos. 
compare Compara matemática y visualmente la diferencia entre una imagen y el resultado de su manipulación. Si por ejemplo, aplicamos un filtro de nitidez con convert a una imagen, este programa puede comparar la imagen original con la imagen resultante del comando anterior, dando lugar a una imagen como resultado con las zonas de la imagen original afectadas por la aplicación del filtro de color rojo. Un ejemplo:

convert ejemplo.jpg -sharpen 0x1 resultado.jpg
compare ejemplo.jpg resultado.jpg diferencias.png

Y la comparación matemática se obtiene con el siguiente comando (admite también otros):

compare -verbose -metric mae imagen.jpg resultado.jpg diferencias.png
composite Comando que superpone una imagen sobre otra. El ejemplo que pongo a continuación lo extraigo del manual de FF Multi Converter, en el que se crea una imagen transparente con convert de 256x256 píxeles y posteriormente se fusiona con el icono del paquete, centrando éste en el medio con el comando composite con la opción 'gravity center'.

convert -size 256x256 canvas:none -alpha transparent fondo.png
composite -gravity center share/ffmulticonverter.png fondo.png \
share/ffmulticonverter.png

conjure Comando que lee y ejecuta scripts escritos en el lenguaje de programación, Magick Scripting Language (MSL). 
convert Era el programa más utilizado de ImageMagick hasta la versión 7, por lo menos en esta web. Permite convertir entre diferentes formatos de imagen, redimensionar imágenes, aplicar filtros, etc. El programa siempre requiere de una imagen de entrada y otra de salida. Para leer de la entrada estándar o enviar a la salida estándar tiene que añadirse el guión (-) detrás del comando. Un ejemplo:

convert -resize 1024 fondo-120.jpg fondo-120a.jpg
display Muestra una imagen o secuencia de imágenes a pantalla completa o en una ventana. Si lo ejecutamos sin argumentos se mostrará la ventana de ImageMagick, desde la que podremos acceder al menú del mismo, que en ningún momento llega a las posibilidades que ofrece la línea de comandos.

Este programa no soporta pseudotransparencias, con lo que su uso como setter para poner imágenes en el fondo de la pantalla queda muy limitado. 
identify Muestra información del formato y las características de una imagen o grupo de imágenes.
import Realiza una captura de pantalla del escritorio, una ventana determinada, o una zona rectangular seleccionada de la pantalla. Varios ejemplos:

1) Capturar cualquier zona de la pantalla seleccionándola con el puntero del ratón o haciendo clic en el fondo o en una ventana, guardando la imagen en formato JPEG con una calidad del 90 %. Si es una ventana, con el parámetro -frame, capturaremos también el marco de la misma.

import -frame -quality 90 /home/jose/Capturas/captura-001.jpg

2) Capturar el escritorio, guardando la imagen en formato JPEG con una calidad del 90 %.

import -window root -quality 90 /home/jose/Capturas/captura-001.jpg
mogrify Comando que posee las mismas características que convert, pero con una diferencia muy importante, siempre trabaja sobre la imagen original.
montage Comando de composición de imágenes, dando lugar a una imagen en mosaico, a la que se le pueden añadir marcos, nombres de imagen, color de fondo, etc. Básicamente, la función de este comando nos sirve para crear hojas de contacto, de un determinado directorio de imágenes. Un ejemplo:

montage -resize 320 -background '#336699' -geometry +4+4 ~/Fondos/*.jpg montaje.jpg

El parámetro -resize determina el tamaño de las imágenes incluidas en la composición final, -background el color de fondo y -geometry la disposición en columnas y filas de las imágenes.
stream Comando utilizado para extraer píxeles de una imagen, o una determinada porción de la misma.

Directorio de configuración personal

~/.config/ImageMagick Es el directorio de configuración personal de ImageMagick en nuestro home.

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

$ su -c "make uninstall"

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

ImageMagick-7.1.1-29-scripts.tar.gz

$ su
# tar zxvf ImageMagick-7.1.1-29-scripts.tar.gz
# cd ImageMagick-7.1.1-29-scripts
# ./Desinstalar_ImageMagick-7.1.1-29

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf ImageMagick-7.1.1-29-scripts.tar.gz
# cd ImageMagick-7.1.1-29-scripts
# ./Respaldar_ImageMagick-7.1.1-29

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_ImageMagick-7.1.1-29



ImageMagick 6

Como la mayoría de paquetes de código fuente que necesitan de ImageMagick para ser compilados, no son compatibles con ImageMagick 7, instalaremos la última versión de la serie anterior, para poder compilar su suporte allí donde sea necesario.

Preliminares

1) Editamos el archivo /etc/ld.so.conf y añadimos /opt/imagemagick-6/lib64

include ld.so.conf.d/*.conf

/opt/gcc-4.4.3/lib
/usr/X11R7/lib
/opt/e17/lib
/usr/lib
/opt/imagemagick-6/lib64

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado ImageMagick para la elaboración de este documento.

* GCC - (13.2.0) o Clang - (17.0.6)
* Gawk - (5.3.0)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.11)
   LibX11 - (1.8.7)
   LibXext - (1.3.6)
   LibXt - (1.3.0)
* Cairo - (1.18.0)
* DjVULibre - (3.5.28)
* Fftw3 - (3.3.10)
* Fontconfig - (2.15.0)
* Freetype2 - (2.13.2)
* Ghostscript - (10.02.1)
* Gperftools - (2.13)
* Graphviz - (10.0.1)
* Libbzip2 - (1.0.8)
* Libheif - (1.17.6)
* Libjbig - (2.1)
* Libjpeg-turbo - (3.0.2)
* Liblcms - (2.16)
* Libpng - (1.6.43)
* LibRaw - (0.21.2)
* Librsvg - (2.57.1)
* LibTIFF - (4.6.0)
* Libwebp - (1.3.2)
* Libwmf - (0.2.8.4)
* Libxml2 - (2.11.7)
* Libzstd - (1.5.5)
* Liquid Rescale Library - (0.4.2)
* OpenCL Headers - (2023.12.14)
* OpenCL ICD Loader - (2023.12.14)
* OpenEXR - (3.2.1)
* OpenJPEG - (2.5.0)
* Pango - (1.50.14)
* XZ Utils - (5.6.0)
* Zlib - (1.3.1)

Intérpretes de Lenguaje de Programación

* Perl - (5.38.0)



Descarga

ImageMagick-6.9.13-7.tar.xz

Optimizaciones

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
$ export {C,CXX}FLAGS+=' -fipa-pta'
OpenMP
$ export {C,CXX}FLAGS+=" -ftree-parallelize-loops=$(nproc)"
LTO
$ export AR=gcc-ar RANLIB=gcc-ranlib NM=gcc-nm
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto'
En versiones inferiores a GCC 10, sustituir auto por el número de núcleos que tenga nuestro procesador. Si sólo tiene uno, utilizar el parámetro -flto
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick-6'
2) Ejecutar 'make check' en el directorio de compilación.
3) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6 -Wno-error=coverage-mismatch'
Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm -polly-omp-backend=LLVM'
OpenMP
$ export {C,CXX}FLAGS+=' -fopenmp=libomp -fopenmp-version=50'
$ export LDFLAGS+=" -L$(llvm-config --libdir) -lomp -ltsan"
LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto'
ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma.
Unified LTO
LTO >> ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin'
ThinLTO >> LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full'
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD.
PGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick-6'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/imagemagick-6; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6'
CSPGO
1) Fase inicial de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-use=/var/pgo/imagemagick-6 -fcs-profile-generate=/var/pgo/imagemagick-6'
2) Ejecutar 'make check' en el directorio de compilación.
3) Conversión y mezcla con el perfil PGO, del perfil de optimización a un formato legible por Clang.
$ PGODIR=/var/pgo/imagemagick-6; llvm-profdata merge $PGODIR/default_*.profraw $PGODIR/default.profdata --output=$PGODIR/cspgo.profdata
4) Fase final de compilación e instalación del paquete.
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6/cspgo.profdata'

Parámetros adicionales

Parámetros adicionales de eliminación de avisos en el proceso de compilación
$ export {C,CXX}FLAGS+=' -w'

Parámetros adicionales de eliminación de errores específicos en el proceso de compilación
Clang 15 y superiores
$ export {C,CXX}FLAGS+=' -Wno-implicit-function-declaration'

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc13/lib64"
Cada usuario tendrá que establecer la ruta de búsqueda de directorios, en función de la distribución que utilice.

Establecer el uso de enlazador dinámico para Mold
$ export LDFLAGS+=' -fuse-ld=mold'

Establecer el uso de enlazador dinámico para LLD
Clang
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO/ThinLTO/PGO de LLD
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)"
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)"

Establecer la variable de entorno de uso de compilador para Clang
$ export CC=clang CXX=clang++

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf ImageMagick-6.9.13-7.tar.xz
$ cd ImageMagick-6.9.13-7
$ ./configure --prefix=/opt/imagemagick-6 --with-libstdc=/opt/gcc13/lib64 \
--with-modules --with-fftw --with-gslib --with-rsvg --with-perl \
--with-perl-options=INSTALL_BASE=/opt/imagemagick-6 --with-gvc \
--with-tcmalloc --disable-static --enable-hdri --enable-opencl \
--libdir=/opt/imagemagick-6/lib64
$ find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g'

Explicación de los comandos

--prefix=/opt/imagemagick-6 : Instala el programa en el directorio /opt/imagemagick-6.

--with-libstdc=/opt/gcc13/lib64 : Le indicamos la ruta de instalación de Libstdc++, en el caso de que utilicemos otra versión de GCC diferente a la principal del sistema.

--with-modules : Compila el soporte de módulos compartidos en lugar de integrarlos de forma estática en los binarios ejecutables del paquete.

--with-fftw : Activa el soporte de FFTW.

--with-gslib : Activa el soporte de Libgs de Ghostscript.

--with-rsvg : Activa el soporte de imágenes en formato SVG mediante el uso de Librsvg. Si no añadimos esta opción, se utilizará Cairo para compilar el soporte de este formato de imagen.

--with-perl : Activa la compilación e instalación de PerlMagic.

--with-perl-options=INSTALL_BASE=/opt/imagemagick-6 : Instala PerlMagick en la ruta de instalación de ImageMagick 6, en lugar de la predefinida de Perl, para evitar que sobreescriba la versión de PerlMagick de ImageMagick 7.

--with-gvc : Activa el soporte de Graphviz.

--with-tcmalloc : Activa el soporte del asignador de memoria, TCMalloc, para optimizar el uso de la misma en operaciones multihilo.

--disable-static : Desactiva la compilación de las librerías estáticas, al no ser necesarias para la ejecución de los programas.

--enable-hdri : Activa el soporte de imágenes de alto rango dinámico.

--enable-opencl : Activa el soporte de OpenCL en algunas de las operaciones del programa. Requiere de un controlador de gráficos que lo soporte también.

--libdir=/opt/imagemagick-6/lib64 : Instala las librerías en /opt/imagemagick-6/lib64, en sistemas de 64 bits multiarquitectura.

find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' : Modifica los archivos Makefile creados para evitar que los binarios se enlacen contra la librería Libgomp de GCC, en el caso de que utilicemos Clang para compilar el paquete, y se enlacen sólo contra la librería Libomp proporcionada por LLVM. También modifica los archivos de configuración que se instalan para Pkg-config, para que aparezca de forma correcta esta librería en los mismos.

Compilación

$ make

Parámetros de compilación opcionales

Instalación como root

$ su
# make install-strip
# ldconfig -v

Estadísticas de Compilación e Instalación de ImageMagick 6

Estadísticas de Compilación e Instalación de ImageMagick 6
CPU AMD Ryzen 5 5500
MHz 3593.250 (BoostMax=4457.000)
RAM 32 GB
Tarjeta gráfica AMD Radeon RX 580 2048SP
Controlador de gráficos AMDGPU 23.0.0
Sistema de archivos XFS
Versión del Kernel 6.7.6-ml SMP PREEMPT_DYNAMIC x86_64
Modo de frecuencia de la CPU powersave (balance performance)
Planificador de CPU BORE
Versión de Glibc 2.39
Enlazador dinámico LLD 17.0.6
Compilador Clang 17.0.6 + Ccache 4.9.1
Parámetros de optimización -03 -march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm -polly-omp-backend=LLVM -fopenmp=libomp -fopenmp-version=50 -flto -funified-lto -fprofile-use=/var/pgo/imagemagick-6/cspgo.profdata -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt
Parámetros de compilación V=1 -j12
Tiempo de compilación 22"
Tiempo de instalación 56"
Tiempo total consumido 1' 18"
Archivos instalados 775
Mostrar/Ocultar la lista de archivos instalados
Enlaces simbólicos creados 6
Mostrar/Ocultar la lista de enlaces simbólicos creados
Ocupación de espacio en disco 21,1 MB

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

$ su -c "make uninstall"

2) MODO MANUALINUX

ImageMagick-6.9.13-7-scripts.tar.gz

$ su
# tar zxvf ImageMagick-6.9.13-7-scripts.tar.gz
# cd ImageMagick-6.9.13-7-scripts
# ./Desinstalar_ImageMagick-6.9.13-7

Copia de Seguridad como root

$ su
# tar zxvf ImageMagick-6.9.13-7-scripts.tar.gz
# cd ImageMagick-6.9.13-7-scripts
# ./Respaldar_ImageMagick-6.9.13-7

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_ImageMagick-6.9.13-7

Variables de entorno a establecer para poder compilar los paquetes con ImageMagick 6

$ export PKG_CONFIG_PATH=/opt/imagemagick-6/lib64/pkgconfig:$PKG_CONFIG_PATH
$ export PATH=/opt/imagemagick-6/bin:$PATH



Iniciamos ImageMagick

Sólo nos queda teclear en una terminal o en un lanzador el comando display, y el programa aparecerá en la pantalla. La interfaz gráfica es bastante espartana y poco funcional.


Captura- ImageMagick - 1


Captura- ImageMagick - 2




Enlaces


http://imagemagick.org >> La web de ImageMagick.

Filtros de Gimp - IM >> Manual del filtro de Gimp, IM, que nos permite utilizar ImageMagick con este editor de imágenes.


Foro Galería Blog


Actualizado el 25-02-2024

Instalar ImageMagick desde cero

Instalar Image Analyzer con WineInstalar MAGIX Photo Designer con Wine