ImageMagick 7 for PHP 7

ImageMagick 7 for PHP 7
просмотров: 359125 декабря 2019 года

ImageMagick требователен к зависимостям, перво-наперво стоит установить все что может понадобиться:

С помощью build-dep попросим установить пакеты, необходимые для сборки ImageMagick:

sudo apt build-dep imagemagick libmagickcore-dev libde265 libheif

Ну и чтоб перестраховаться, установим все что может понадобиться при компиляции:

sudo apt install -y autoconf automake autopoint autotools-dev build-essential bzip2 checkinstall chrpath cm-super-minimal debhelper dh-autoreconf dh-exec dh-strip-nondeterminism doxygen doxygen-latex dpkg-dev ffmpeg fontconfig fontconfig-config fonts-dejavu-core fonts-droid-fallback fonts-lmodern fonts-noto-mono g++ g++-7 gcc gcc-7 ghostscript gir1.2-harfbuzz-0.0 graphviz gsfonts hicolor-icon-theme icu-devtools libann0 libasan4 libatomic1 libavahi-client3 libavahi-common-data libavahi-common3 libbz2-dev libc-dev-bin libc6-dev libcairo-script-interpreter2 libcairo2 libcairo2-dev libcdt5 libcgraph6 libcilkrts5 libclang1-6.0 libcups2 libcupsfilters1 libcupsimage2 libdatrie1 libde265-dev libdjvulibre-dev libdjvulibre-text libdjvulibre21 libexif-dev libexpat1-dev libfftw3-bin libfftw3-dev libfftw3-double3 libfftw3-long3 libfftw3-quad3 libfile-stripnondeterminism-perl libfontconfig1 libfontconfig1-dev libfreetype6 libfreetype6-dev libgcc-7-dev libgdk-pixbuf2.0-dev libglib2.0-dev libglib2.0-dev-bin libgraphite2-3 libgraphite2-dev libgraphviz-dev libgs-dev libgs9 libgs9-common libgts-0.7-5 libgvc6 libgvpr2 libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz0b libheif-dev libice-dev libicu-dev libicu-le-hb-dev libicu-le-hb0 libiculx60 libijs-0.35 libilmbase-dev libilmbase12 libitm1 libjbig-dev libjbig0 libjbig2dec0 libjpeg-dev libjpeg-turbo8 libjpeg-turbo8-dev libjpeg62-turbo libjpeg8 libjpeg8-dev liblab-gamut1 liblcms2-2 liblcms2-dev liblqr-1-0 liblqr-1-0-dev liblsan0 libltdl-dev liblzma-dev libmime-charset-perl libmpx2 libnetpbm10 libopenexr-dev libopenexr22 libopenjp2-7-dev libpango-1.0-0 libpango1.0-dev libpangocairo-1.0-0 libpangoft2-1.0-0 libpaper-utils libpaper1 libpathplan4 libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libperl-dev libpixman-1-0 libpixman-1-dev libpng-dev libpotrace0 libptexenc1 libpthread-stubs0-dev libpython-stdlib libquadmath0 libraqm0 libraw-bin libraw-dev libraw15 librsvg2-bin librsvg2-dev libsigsegv2 libsm-dev libsombok3 libstdc++-7-dev libsynctex1 libtexlua52 libtexluajit2 libthai-data libthai0 libtiff-dev libtiff5 libtiff5-dev libtiffxx5 libtool libtool-bin libtsan0 libturbojpeg0 libubsan0 libunicode-linebreak-perl libwebp-dev libwmf-dev libwmf0.2-7 libx11-dev libxau-dev libxcb-render0 libxcb-render0-dev libxcb-shm0 libxcb-shm0-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev libxml2-dev libxml2-utils libxrender-dev libxrender1 libxt-dev libxt6 libzstd-dev libzzip-0-13 linux-libc-dev m4 make netpbm pkg-config pkg-kde-tools po-debconf poppler-data preview-latex-style python python-minimal python2.7 python2.7-minimal python3-distutils python3-lib2to3 tex-common texlive-base texlive-binaries texlive-extra-utils texlive-font-utils texlive-fonts-recommended texlive-latex-base texlive-latex-extra texlive-latex-recommended texlive-pictures x11proto-core-dev x11proto-dev x11proto-xext-dev xorg-sgml-doctools xsltproc xtrans-dev zlib1g-dev

Этап 1 - Установка ImageMagick

Есть несколько вариантов установки...

1. Установка чрез dpkg (не всегда срабатывает)

ImageMagick поставляется в REMI пакете (для CentOS). Учитывая, что у меня Ubuntu (Debian) я конвертирую эти пакеты в deb используя alien.

wget https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.9-16.x86_64.rpm
wget https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.9-16.x86_64.rpm
wget https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-devel-7.0.9-16.x86_64.rpm
sudo apt-get install -y alien
sudo alien -d ImageMagick-7.0.9-16.x86_64.rpm
sudo alien -d ImageMagick-libs-7.0.9-16.x86_64.rpm
sudo alien -d ImageMagick-devel-7.0.9-16.x86_64.rpm

# install the packages generated by alien
sudo dpkg -i imagemagick_7.0.9-17_amd64.deb
sudo dpkg -i imagemagick-libs_7.0.9-17_amd64.deb
sudo dpkg -i imagemagick-devel_7.0.9-17_amd64.deb

# register libraries
sudo ldconfig /usr/lib64

Может потребоваться:

sudo ln -s /usr/lib64/pkgconfig/ImageMagick-7.Q16HDRI.pc /usr/lib/pkgconfig/ImageMagick-7.Q16HDRI.pc
sudo ln -s /usr/lib64/pkgconfig/ImageMagick.pc /usr/lib/pkgconfig/ImageMagick.pc
sudo ln -s /usr/lib64/pkgconfig/MagickCore-7.Q16HDRI.pc /usr/lib/pkgconfig/MagickCore-7.Q16HDRI.pc
sudo ln -s /usr/lib64/pkgconfig/MagickCore.pc /usr/lib/pkgconfig/MagickCore.pc
sudo ln -s /usr/lib64/pkgconfig/MagickWand-7.Q16HDRI.pc /usr/lib/pkgconfig/MagickWand-7.Q16HDRI.pc
sudo ln -s /usr/lib64/pkgconfig/MagickWand.pc /usr/lib/pkgconfig/MagickWand.pc

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
export CPATH=/usr/include/ImageMagick-7

2. Собираем из исходников

Для поддержки HEIF:

sudo apt install -y git-core
mkdir -p ~/install-im && cd ~/install-im
sudo git clone https://github.com/strukturag/libde265.git
sudo git clone https://github.com/strukturag/libheif.git
cd libde265/
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install
cd ../libheif/
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install

Для поддержки JPEG XL:

mkdir -p ~/install-im && cd ~/install-im
git clone --depth=1 https://github.com/google/brunsli.git
cd brunsli
git submodule update --init --recursive
mkdir bin && cd bin
cmake ..
make -j
sudo make -j install

Сборка самого ImageMagick:

mkdir -p ~/install-im && cd ~/install-im
sudo wget https://www.imagemagick.org/download/ImageMagick.tar.gz 
sudo tar xf ImageMagick.tar.gz 
cd ImageMagick-7*
./configure --prefix=/usr/ --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gvc=yes --with-jpeg=yes --with-png=yes --with-tiff=yes --with-webp=yes --with-openjp2=yes

На этом этапе убедитесь, что у вас отображается YES для всех необходимых Вам типов файлов:

Delegate library configuration:
...
  JPEG v1           --with-jpeg=yes             yes
...
  OpenJP2           --with-openjp2=yes          yes
...
  TIFF              --with-tiff=yes             yes
  WEBP              --with-webp=yes             yes
...

Если все хорошо, выполняйте сборку далее:

make
sudo make install

На счет ./configure

Есть один ОЧЕНЬ не приятный баг связанный с libgs-dev из-за которого я отказался от опции "--with-gslib=yes". Суть бага злоключается в не возможности работы с OpenJPEG (JP2, J2K...).
Когда я пытался включать gslib, то при попытке конвертирования изображения всегда получал совершенно не информативную ошибку "Aborted (core dumped)" (по-русски: "Аварийный останов (стек памяти сброшен на диск)").
Пример попытки (ошибки):

$ convert -verbose -debug coder -log %e image.jpeg image.jp2
[image.jpeg] JPEG Trace: "Start of Image"
[image.jpeg] JPEG Trace: "JFIF APP0 marker: version 1.01, density 37x37  2"
[image.jpeg] JPEG Trace: "Define Quantization Table 0  precision 0"
[image.jpeg] JPEG Trace: "Define Quantization Table 1  precision 0"
[image.jpeg] JPEG Trace: "Start Of Frame 0xc0: width=1332, height=912, components=3"
[image.jpeg] JPEG Trace: "    Component 1: 1hx1v q=0"
[image.jpeg] JPEG Trace: "    Component 2: 1hx1v q=1"
[image.jpeg] JPEG Trace: "    Component 3: 1hx1v q=1"
[image.jpeg] JPEG Trace: "Define Huffman Table 0x00"
[image.jpeg] JPEG Trace: "          0   1   4   3   1   1   1   0"
[image.jpeg] JPEG Trace: "          0   0   0   0   0   0   0   0"
[image.jpeg] JPEG Trace: "Define Huffman Table 0x10"
[image.jpeg] JPEG Trace: "          0   1   2   5   3   2   3   3"
[image.jpeg] JPEG Trace: "          6   6   7  14  14  13   5  17"
[image.jpeg] JPEG Trace: "Define Huffman Table 0x01"
[image.jpeg] JPEG Trace: "          1   0   3   1   1   1   1   1"
[image.jpeg] JPEG Trace: "          1   0   0   0   0   0   0   0"
[image.jpeg] JPEG Trace: "Define Huffman Table 0x11"
[image.jpeg] JPEG Trace: "          0   2   1   3   3   1   4   6"
[image.jpeg] JPEG Trace: "          9   1   3  10   6   2   1   5"
[image.jpeg] JPEG Trace: "Start Of Scan: 3 components"
[image.jpeg] JPEG Trace: "    Component 1: dc=0 ac=0"
[image.jpeg] JPEG Trace: "    Component 2: dc=1 ac=1"
[image.jpeg] JPEG Trace: "    Component 3: dc=1 ac=1"
[image.jpeg] JPEG Trace: "  Ss=0, Se=63, Ah=0, Al=0"
Interlace: nonprogressive
Data precision: 8
Geometry: 1332x912
Quality: 92 (exact)
Colorspace: RGB
Sampling Factors: 1x1,1x1,1x1
[image.jpeg] JPEG Trace: "End Of Image"
image.jpeg JPEG 1332x912 1332x912+0+0 8-bit sRGB 324946B 0.010u 0:00.022
Aborted (core dumped)

Обновите ldconfig:

sudo ldconfig

 

Команды для проверки успешной установки:

identify -version
convert -version
identify -list format

 

Этап 2 - Сборка расширения для PHP

Если вы используете, как я, несколько версий PHP (например, через ppa:ondrej/php), не забудьте переключить версию:

sudo update-alternatives --config php
sudo update-alternatives --config phpize
sudo update-alternatives --config php-config

# For apache:
sudo a2dismod php7.2
sudo a2enmod php5.6
sudo systemctl restart apache2

Заходим на https://pecl.php.net/package/imagick и берем последнюю версию imagick for PHP, на сегодня это 3.4.4.
Чтоб не подключать модуль в php.ini, установим imagick из репозитория и затем, поверх, соберем его из исходников:

sudo apt install php-imagick
mkdir -p ~/install-im && cd ~/install-im
wget https://pecl.php.net/get/imagick-3.4.4.tgz
tar -xvzf imagick-3.4.4.tgz
cd imagick-3.4.4/
apt install php7.2-dev
phpize
./configure
make
sudo make install
sudo phpenmod imagick

Проверямем установку:

sudo systemctl restart apache2
php -r 'phpinfo();' | grep JP2

 

Дополнительно

Если нужно установить OpenJPEG из исходников, делается так:

https://github.com/uclouvain/openjpeg.git
cd openjpeg
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install
make clean

 

Источники

  • https://www.imagemagick.org/discourse-server/viewtopic.php?t=35892
  • https://askubuntu.com/questions/1042436/how-to-install-delegate-libraries-for-image-magick-7-0-7
  • https://medium.com/@eplt/5-minutes-to-install-imagemagick-with-heic-support-on-ubuntu-18-04-digitalocean-fe2d09dcef1
  • https://handynotes.ru/2007/05/linux-2.html (про ldconfig)
 
 
Поделиться

Что скажем?