7

I've tried to find a simple explanation for several hours but I just can't seem to find anything useful. I'm primarily a Windows programmer with some experience with Linux-based OSes. For some reason doing apt install imagemagick only gives me a really old version (pre-2012) and there's a change in the later versions that I need, which means I need to build from source.

Compiling IM 7 on Ubuntu 18.04 is simple enough: Download tar.gz, extract, ./configure, make and make install. However it seems that PNG support is not included by default (why??).

I've tried doing ./configure --with-png but that didn't achieve anything (I see --with-png=yes no, which presumably means "yes, you've asked for PNG support but no, I haven't given it to you"). I've seen many forum posts and SE questions about this, but everyone asking seems to have some prior knowledge which I am clearly missing and the questions appear to be about some later step in the process.

So, what do I actually need to do to get PNG support?

(And as some bonus questions: Why is there no documentation for this? Why does it not include PNG support out of the box? Why are there no prebuilt binaries for Ubuntu?)

Related question: Imagemagick still exists after apt remove?

Clonkex
  • 1,684

4 Answers4

6

I highly recommend ImageMagick Easy Install (IMEI):

https://github.com/SoftCreatR/imei/

It tracks down all the source/development libraries needed for the additional ImageMagick "delegates" (image formats in IM-speak). Plus, it can also incrementally update your local install from newer source after the initial installation.

Installation steps as of now:

git clone https://github.com/SoftCreatR/imei
cd imei
sudo ./imei.sh
Zanna
  • 72,312
4

ImageMagick doesn't find libpng on its own. The simplest way to tell it how to find, compile and link with libpng is by installing libpng followed by pkg-config:

sudo apt install build-essential libpng-dev pkg-config

Now you can see if it works:

./configure | grep -i png

checking for libpng >= 1.0.0... yes PNG --with-png=yes yes CFLAGS = -I/usr/include/libpng16 -fopenmp -Wall -g -O2 -mtune=amdfam10 -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 LIBS = -lpng16 -lz -lz -lm -lpthread DELEGATES = png zlib

Mark Setchell
  • 226
  • 1
  • 6
0

I am not sure what error message you were getting, but I was getting convert: no decode delegate for this image format `JPG' @ error/constitute.c/ReadImage/562 when working with jpegs with a fresh ImageMagick install from source.

To resolve it:

  1. uncomment deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted in /etc/apt/sources.list

  2. install dependencies

sudo apt update
sudo apt build-dep imagemagick
  1. Reinstall ImageMagick
./configure
make
sudo make install
sudo ldconfig /usr/local/lib

source: https://linuxconfig.org/how-to-install-imagemagick-7-on-ubuntu-18-04-linux

joe
  • 101
0

In case anyone is looking to do this in docker with ImageMagick Easy Install:

FROM eclipse-temurin:21-jdk-jammy

Hardcode version to avoid unexpected breaking changes

ARG IMAGE_MAGICK_VERSION=7.1.1-43

Install ImageMagick using IMEI - ImageMagick Easy Install

https://github.com/SoftCreatR/imei

RUN t=$(mktemp) &&
wget 'https://dist.1-2.dev/imei.sh' -qO "$t" &&
bash "$t" --imagemagick-version $IMAGE_MAGICK_VERSION &&
rm "$t"

Includes lots of delegates:

# magick -version
Version: ImageMagick 7.1.1-43 Q16-HDRI aarch64 afd817ca6:20241222 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(4.5)
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zip zlib zstd
Compiler: gcc (11.4)
jenglert
  • 101