当前位置:操作系统 > Unix/Linux >>

linux下安装ImageMagick+ PHP IMagick 图片压缩处理

当服务器遭遇高并发和大访问量时,对站点资源比如图片瘦身的需求会有所迫切。search了一下解决方案,希望可以抛砖。此blog在Amazon EC2 Instance部署测试成文。


一、简介

二、安装

三、使用

四、压缩

五、资源




======一、ImageMagick、IMagick简介======

 

ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。

ImageMagick 的官网是:http://www.ImageMagick.org/script/index.php

ImageMagick为php语言提供的两个扩展IMagick和MagickWand for PHP的安装。IMagick已经被php最新的版本选为内部的扩展函数库,php的手册已经有了函数说明使用文档。这个扩展是可选安装的。

ImageMagick有两款接口,分别是MagickCore API和MagickWand API。MagickCore API是全面的底层的接口,而MagickWand API 是官方推荐的精选的重要的一些接口。IMagick和MagickWand for PHP就是分别为这两款接口而准备的。

 

IMagick:

一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。




======二、安装======

》 安装make

   $ yum install make

》 安装gcc

   $ yum install gcc




1、安装ImageMagick

   $ cd /opt/

   $ tar zvxf ImageMagick-6.7.5-6.tar.gz

   $ cd ImageMagick-6.7.5-6

   $ ./configure 

   $ make

   $ make install

   

2、命令行缩放一张图片

   $ /usr/local/bin ./convert -resize 200x200 -colors 100 src.jpg tar.jpg

   PS:报错了。错误信息:no decode delegate for this image format.




   查看convert支持处理的格式

   $ convert -list format




   PS:

     》服务器如果没有安装Jpeg v6b、libPng、FreeType要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了。而安装libpng需要zlib的支持。所以先由安装zlib为开始。(抱歉,只能重新执行4-5-6-1了。)

     》libpng 使用 zlib 程序库作为压缩引擎,zlib 也是著名的 gzip (GNU zip) 所采用的压缩引擎




3、安装IMagick

   $ tar zvxf imagick-3.0.1.tgz

   $ cd imagick-3.0.1

   $ phpize

   $ ./configure 

   $ make

   $ make install




   PS: make的时候报错咯...下了最新包的同学,请降低imagick安装版本。如:IMagick-2.3.0.tgz。




   错误信息

   imagick-3.0.1/imagick_class.c:9673: error: expected ';' before 'severity'

   imagick-3.0.1/imagick_class.c:9673: error: 'php_imagick_object' has no member named 'magick_wand'

   imagick-3.0.1/imagick_class.c:9673: error: 'severity' undeclared (first use in this function)

   imagick-3.0.1/imagick_class.c:9673: warning: assignment makes pointer from integer without a cast

   imagick-3.0.1/imagick_class.c:9673: warning: cast to pointer from integer of different size

   imagick-3.0.1/imagick_class.c:9673: warning: cast to pointer from integer of different size

   imagick-3.0.1/imagick_class.c:9673: error: 'php_imagick_object' has no member named 'magick_wand'

   make: *** [imagick_class.lo] Error 1




4、安装zlib

   $ tar -xzvf zlib-1.2.5.tar.gz 

   $ cd zlib-1.2.5

   $ ./configure

   $ make

   $ make install




5、编译安装libpng

   $ tar -xzvf libpng-1.2.12.tar.gz

   $ cd libpng-1.2.12

   $ cp scripts/makefile.std makefile

   $ make

   $ make install




6、编译安装 jpeg-6b

   $ ./configure --enable-shared --enable-static 

   $ make

   $ make install

   。。。

   Ps:又出错了!!!cannot create regular file `/usr/local/man/man1/cjpeg.1': No such file or directory,按照提示做吧!

7、别忘记在php.ini把扩展配置上去

 

 ImageMagick+ PHP IMagick 图片压缩处理 - VIEWSOFT - Rainbow Tech Blog




======三、ImageMagick使用======

这里只是介绍图片压缩这一点领域,其余的图片处理请research其它资源。

》 压缩jpg图像体积 www.zhaoxi.org

  $ cd /usr/local/ImageMagick/bin/

  $ ./convert -quality 20 /tmp/test/jpg_src.jpg /tmp/test/jpg20.jpg

  压缩前:(约230k)

  压所后:(约70k)

  在图片质量尚可的情况下,体积减小了将近3/4!这对于大访问量和高并发情况下图片加载速度以及服务器流量的意义非常重大。

  

》 压缩png图片体积

  $ ./convert -map netscape: +profile "*" /tmp/test/png_src.png /tmp/test/c_png_src.png

  压缩前:(约89k)

  压所后:(约47k)

  在图片质量尚可的情况下,体积减小了将近1/2!但是对png图片透明背景的处理不尽如人意。




======三、php_IMagick使用======

》压缩jpg图片

  /******************code******************/

    $imgObject = new Imagick("src.jpg");

    // 去除图片信息

    $imgObject->stripImage();

    // 设置压缩比率

    $imgObject->setImageCompressionQuality($q);

    $imgObject->writeImage("compress.png");

    $imgObject->destroy();

  /******************code******************/




》压缩png图片

  /******************code******************/

    $imgObject = new Imagick("src.png");

    // 去除图片信息

    $imgObject->stripImage();

    $flag = $imgObject->getImageAlphaChannel();

    // 如果png背景非透明,则进行压缩

    if(imagick::ALPHACHANNEL_UNDEFINED == $flag||imagick::ALPHACHANNEL_DEACTIVATE == $flag) {

    $imgObject->setImageType(imagick::IMGTYPE_PALETTE);

    $imgObject->writeImage("compress.png);      

    }

    $imgObject->destroy();

  /******************code******************/




======五、资源-帮助文档======

》ImageMagick官网

  http://www.ImageMagick.org/script/index.php

》英文文档:

  http://www.php.net/manual/en/class.IMagick.php

》中文文档:

  http://cn.php.net/manual/zh/class.IMagick.php




=======五、资源-lib src======

》ImageMagick(ImageMagick-6.7.5-6.tar.gz) download

  ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.7.5-6.tar.gz

  可以在 ftp://ftp.kddlabs.co.jp/graphics/ImageMagick找到合适的版本。

》IMagick lib download

  http://pecl.php.net/get/IMagick-2.3.0.tgz

》jpeg lib download

  http://www.ijg.org/files/jpegsrc.v6b.tar.gz

》png lib

  http://sourceforge.net/projects/libpng/files/libpng12/1.2.47/libpng-1.2.47.tar.gz/download

》zlib download

  http://sourceforge.net/projects/libpng/files/zlib/1.2.3/zlib-1.2.3.tar.gz/download
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,