node.js 对图片进行缩放等操作
node.js对图片进行操作是要安装gm模块,而gm模块是通过调用系统的ImageMagick来工作的,所以,首先系统要先安装ImageMagick
ImageMagickr 的下载地址:
http://www.imagemagick.org/download/
http://www.imagemagick.org/download/delegates/
安半步骤(说明,有些文件版不存在了,就用更新的版,从下载网复制文件名替):
wget http://www.imagemagick.org/download/delegates/zlib-1.2.8.tar.gz
wget http://www.imagemagick.org/download/delegates/libpng-1.6.4.tar.gz
wget http://www.imagemagick.org/download/delegates/freetype-2.4.10.tar.gz
wget http://www.imagemagick.org/download/delegates/jpegsrc.v9.tar.gz
wget http://www.imagemagick.org/download/ImageMagick-6.8.7-6.tar.gz
tar zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install
cd ../
tar zxvf libpng-1.6.4.tar.gz
cd libpng-1.6.4
cd scripts/
mv makefile.linux ../makefile
cd ..
make
make install
cd ../
tar zxvf freetype-2.4.10.tar.gz
cd freetype-2.4.10
./configure
make
make install
cd ../
tar zxvf jpegsrc.v9.tar.gz
cd jpeg-9/
./configure --enable-shared
make
make test
make install
cd ../
tar zxvf ImageMagick-6.8.7-6.tar.gz
cd ImageMagick-6.8.7-6/
./configure --prefix=/wp-content/local/imagemagick
make
make install
下面是添加php支持的
wget http://pecl.php.net/get/imagick-3.2.0b2.tgz
tar -xzvf imagick-3.2.0b2
/wp-content/local/php/bin/phpize
/configure --with-php-config=/wp-content/local/php/bin/php-config --with-imagick=/wp-content/local/imagemagick
make
make install
添加环境变量
vim /etc/profile
修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码,请记住/wp-content/local/imagemagick/bin这个路径
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin:/wp-content/local/imagemagick/bin
export PATH
最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。
以上已安装完成,可以用以下命测试一下是否成功
#convert -resize 100x100 src.jpg des.jpg
可能出现的错误有
1、convert 命令不存在,那就有可能环境变量没有配置好,未生效,或对于早前登录的用户没有生效。
2、如果出现error while loading shared libraries: xxx.so.x"错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:
tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
所以安装共享库后要注意共享库路径设置问题, 如下:
1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
4)如果程序需要的库文件比系统目前存在的村文件版本低,可以做一个链接
比如:
error while loading shared libraries: libncurses.so.4: cannot open shared
object file: No such file or directory
ls /usr/lib/libncu*
/usr/lib/libncurses.a /usr/lib/libncurses.so.5
/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3
可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
建一个链接就好了
ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4
出处:http://blog.csdn.net/sahusoft/article/details/7388617
http://www.vrlinux.com/shujukuyingyong/20100407/26958.html
其它Imagemagick命令
ImageMagick最方便的地方就是可以在命令行模式下运行,结合shell脚本,我们可以进行非常复杂的图片操作,下面举几个简单的例子进行抛砖引玉。
(1) 图片格式转换:比如把目录下所有的jpeg格式的图片转化为png的,就可以如下进行操作:
[cpp] view plaincopyprint?
1. for pic in *.jpg
2. do
3. convert ${pic} `basename ${pic} .jpg`.png
4. done
for pic in *.jpg
do
convert ${pic} `basename ${pic} .jpg`.png
done
(2) 压缩图片大小:一般来说,在web应用中,如果图片很多或者很大,就需要考虑对图片大小进行适当的压缩,常用的压缩办法有:减小图片尺寸(图片缩放),调节压缩比或者去除图片中的多余信息。这些操作使用ImageMagick就可以轻易的完成:
[cpp] view plaincopyprint?
1. convert -resize 100x100 src.jpg des.jpg
convert -resize 100x100 src.jpg des.jpg
把src.jpg的图片大小调整为100x100,convert命令在调整图片高度和宽度的过程中会进行等比压缩,也就是说图片des.jpg的高宽比将会和src.jpg一致。
[cpp] view plaincopyprint?
1. convert -quality 75% src.jpg des.jpg
convert -quality 75% src.jpg des.jpg
压缩比越低,图片的大小越小,一般来说75%是最佳的压缩比,在这种情况下肉眼是很难看出图片的失真。
[cpp] view plaincopyprint?
1. convert -strip src.jpg dest.jpg
convert -strip src.jpg dest.jpg
数码相机在拍照的时候会在生成的图片中留下一些额外的信息,这些信息往往是没用的,可以使用convert –strip命令去除。
以上三种操作可以合在一起进行:
[cpp] view plaincopyprint?
1. convert -resize 100x100 –strip -quality 75% src.jpg dest.jpg
convert -resize 100x100 –strip -quality 75% src.jpg dest.jpg
ImageMagick功能十分强大,上面只是抛砖引玉,有兴趣的同学可以去挖掘其更多的功能和用法。
node.js代码引用
首先安装gm模块
#npm install gm
代码中:
var gm = require('gm').subClass({ imageMagick: true });
var base64Data_face = req.body.faceimg.substr(22, req.body.faceimg.length - 22);
base64Data_face = base64Data_face.replace(/\s/g,"+");
var dataBuffer_face = new Buffer(base64Data_face, 'base64');
//直接将接收到的buffer压缩转成图片并保存为文件new_path
gm(dataBuffer_face, 'image.jpg')
.resize(200, 200, '!')
.write(new_path, function (err) {
if (err)
{
console.log("gm:"+err);
};
console.log('Created an image from a Buffer!');
});
gm的node.js项目github网址
https://github.com/aheckmann/gm
graphicsmagick官网址
http://www.graphicsmagick.org/index.html
http://www.imagemagick.org/
其它资料
node-images
https://github.com/zhangyuanwei/node-images
¥29.8
¥9.9
¥59.8