0. ImageMagick
是一个跨平台的图像处理软件,其特点是非常的高效,在Linux服务器中应用十分广泛。
1. 最近
在开发一款Electron应用时,需要加载大量本地图片,考虑到性能和实际情况,需要先将图片处理出缩略图,方便加载。但是如何在Node中高效的实现这样的需求?
2. Jimp
是我在npm上找到的一个纯JS实现的包,他的问题和他的修饰词一样:JS带来的性能问题,如果只是简单的处理几张图片,这个包应该是最高效的选择。
3. GM
是我在npm上看到的第二个包,其使用的是调用本地原生的 GraphicsMagick 或者 ImageMagick 来处理图片,速度基本上是不用说了,但这也要求客户端上必须包含GM或者IM,因此这样的体验对于用户来说并不友好。
4. 以往
开发Windows软件,对于这样的需求可以直接把需要的软件包含在整个软件包里,然后通过代码调用。然而首先Linux 上是没有直接提供的IM、GM独立的包,这也是考虑到动态链接等情况(本人Linux渣),直接通过APT|DNF安装的又包含太多不需要的组件,如UI界面等
5. 手动编译
似乎成为了最后的选择。
首先安装依赖
sudo apt install build-essential autoconf automake autopoint chrpath cm-super-minimal debhelper dh-autoreconf dh-strip-nondeterminism doxygen doxygen-latex gir1.2-rsvg-2.0 graphviz libbz2-dev libcairo-script-interpreter2 libcairo2-dev libcdt5 libcgraph6 libclang1-3.6 libdjvulibre-dev libexif-dev libfftw3-bin libfftw3-dev libfftw3-long3 libfftw3-quad3 libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libglib2.0-dev libgvc6 libgvpr2 libharfbuzz-dev libharfbuzz-gobject0 libice-dev libilmbase-dev libjasper-dev libjbig-dev libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libjs-jquery liblcms2-dev libllvm3.6v5 liblqr-1-0-dev liblzma-dev libobjc-5-dev libobjc4 libopenexr-dev libpango1.0-dev libpathplan4 libpcre3-dev libpcre32-3 libpcrecpp0v5 libperl-dev libpixman-1-dev libpng12-dev libpotrace0 libptexenc1 libpthread-stubs0-dev librsvg2-bin librsvg2-dev libsigsegv2 libsm-dev libsynctex1 libtexlua52 libtexluajit2 libtiff5-dev libtiffxx5 libwmf-dev libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxdmcp-dev libxext-dev libxft-dev libxml2-dev libxml2-utils libxrender-dev libxt-dev libzzip-0-13 m4 pkg-kde-tools po-debconf preview-latex-style 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-input-dev x11proto-kb-dev x11proto-render-dev x11proto-xext-dev xorg-sgml-doctools xsltproc xtrans-dev zlib1g-dev libtiff5-dev xorg-dev libopenjp2-7-dev
我希望你用的是Debian系,但在RPM下面应该都有对应。
下载源码并解压
wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xzvf ImageMagick.tar.gz && cd cd ImageMagick-7.0.*/
配置编译选项
./configure CC=clang --disable-installed --with-fftw=no --with-openexr=yes --with-openjp2=no --with-djvu=no --with-lqr=no --with-xml=no --with-x=no --with-wmf=no --with-tiff=yes --with-raw=yes --with-raqm=no --with-pango=no --with-jbig=no --with-heic=no --with-freetype=no --with-fontconfig=no --with-bzlib=no --with-lzma=no --with-lcms=no --with-magick-plus-plus=no --prefix="/home/xvan/Desktop/build"
上面的--prefix="/home/xvan/Desktop/build"修改成你想要编译到的位置,其余的都是一些编译设置,比如--with-x=no、设置为非安装模式(--disable-installed )等,这里用的是Clang编译器,你可能需要安装一下。具体的选项可以在官网查看。
make
当你配置好后运行
make
大概几分钟后应该就编译结束,如果你看不到error,应该就是成功啦~,接下来
make install
你就会在你之前设置的目录看到编译好的文件啦~~~
Screenshot from 2017-12-11 06-46-41.png进入bin文件夹可以看到所有的文件了。
image.png
Lenna是我自己下载的哦
处理链接库
在bin打开终端,运行
ldd ./convert
链接的so文件
可以看到程序使用的libjpeg等so文件,根据后面的地址找到对应的文件,(注意这里的文件地址对应大部分是软连接你需要把他们指向的文件找到,右键Follow link to original file 或类似指令)。
选中源文件和链接复制到之前的bin文件里面,大概有libgomp, libjbig, libjpeg, liblzma, libpng12, libtiff 等,这里还是要根据具体情况,后面会提供一个在全新安装的xubuntu下能运行的链接。
同时,你也可以直接先把整个build 文件夹复制到一个新的Linux环境下面,设置环境变量
export LD_LIBRARY_PATH="/home/xvan/Desktop/build/lib:$LD_LIBRARY_PATH"
上面的地址修改为你build的lib文件,运行,就会提示缺少so文件,按需复制即可。
#测试
./convert 220px-Lenna.png out.jpg #转码
./convert 220px-Lenna.png -resize 100x100 out.bmp #缩放并转码
大概结果
貌似Linux Mint的截图工具有点小问题,截图后直接复制到Clipboard会有点绿???
网友评论