Ubuntu 安装 ImageMagic(6.9.1-6)及 PHP 的 imagick (3.0.1)扩展
关于 ImageMagic 和 imagick 的介绍,见《图片处理神器ImageMagick以及PHP的imagick扩展》 和 《Ubuntu下安装ImageMagick和MagicWand For PHP》,安装和代码也都参考自这几篇文章,同时记录下了自己的安装过程以及自己在安装过程中遇到的问题。
说明:ImageMagic 的 PHP 扩展可以用 imagick 和 MagicWand for PHP,这里安装使用 imagick。
安装环境:Ubuntu 13.10 (GNU/Linux 3.11.0-12-generic i686)
Nginx 版本:1.2.7
Nginx 安装路径:/usr/local/nginx
Nginx 网站根目录:/home/wwwroot
PHP 版本:5.3.27
PHP 框架:ThinkPHP 3.2.2
PHP 安装路径:/usr/local/php
PHP 配置文件 php.ini 路径:/usr/local/php/etc/php.ini
(一)安装 ImageMagic (6.9.1-6)
下载地址:http://www.imagemagick.org/download/ImageMagick-6.9.1-6.tar.gz
① 下载安装包 ImageMagick-6.9.1-6.tar.gz 并通过 ftp 上传到服务器环境,可以通过命令:
find / -name *.tar.gz
找到之前安装包的存放路径,cd 进入该目录:
cd /home/***/lnmp/lnmp1.-full/
解压压缩包:
tar -zxvf ImageMagick-6.9.-.tar.gz
cd 进入解压之后的目录:
cd ImageMagick-6.9.-/
② 配置:
./configure --enable-shared --enable-lzw --without-perl --with-modules
③ 编译和安装:
make && make install
④ 测试 ImageMagic 是否安装成功:
convert -version
如果执行该命令后报错:
/usr/local/bin/convert: error while loading shared libraries: libMagickCore-.Q16.so.: cannot open shared object file: No such file or directory
则需要执行 ldconfig(ldconfig命令的用途, 主要是在默认搜寻目录( /lib和/usr/lib ) 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下, 搜索出可共享的动态链接库( 格式如lib*.so* ), 进而创建出动态装入程序( ld.so )所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表. ):
root@***:/home/***/lnmp/lnmp1.-full/ImageMagick-6.9.-# ldconfig
此时再使用 convert -version,就可以显示版本信息了,也就说明安装成功了:
root@***:/home/***/lnmp/lnmp1.-full/ImageMagick-6.9.-# /usr/local/bin/convert -version Version: ImageMagick 6.9.- Q16 i686 -- http://www.imagemagick.org
Copyright: Copyright (C) - ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib freetype jng jpeg ltdl png xml zlib
(参考:《undefined reference to `inflateReset2'》)
(二). 安装 imagick
主要参考《Linux下php安装imagick》
① 下载、拷贝、安装 imagick
下载地址:http://pecl.php.net/get/imagick-3.0.1.tgz
root@***:/home/***/lnmp/lnmp1.-full# tar -zxvf imagick-3.0..tgz
解压之后,进入解压后的目录:
root@***:/home/***/lnmp/lnmp1.-full# cd imagick-3.0./
② 用 phpize 生成 configure 配置文件
root@***:/home/***/lnmp/lnmp1.-full/imagick-3.0.# /usr/local/php/bin/phpize
如果报错:checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h,则:
ln -s /usr/local/include/ImageMagick- /usr/local/include/ImageMagick
(参考: 《安装imagick时Cannot locate header file MagickWand.h错误的解决》)
③ 配置:
root@***:/home/***/lnmp/lnmp1.-full/imagick-3.0.# ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
④ 编译与安装
make && make install
make install 成功后显示:
root@***:/home/***/lnmp/lnmp1.-full/imagick-3.0.# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-/
Installing header files: /usr/local/php/include/php/
⑤ 配置 php,让 php 支持 imagick
vi /usr/local/php/etc/php.ini #编辑配置文件,在最后一行添加以下内容
extension="imagick.so"
⑥ 重启 php-fpm:
ps aux | grep php-fpm
kill -QUIT
/usr/local/php/sbin/php-fpm
(参考:《php修改php.ini重启nginx php.ini设置不生效》)
⑦ 重启 Nginx:
nginx -s reload
⑧ 测试 imagick 是否添加成功:
在 php 文件中输入:
<?php
phpinfo();
如果在 info 页有如下内容,则说明添加成功:
(三)使用 imagick 减小上传图片的品质(80%)
工具类:
Imgicktool.class.php:
<?php
/*
* 图片压缩类 重新封装了Imagick
*/ namespace Home\Common; class Imgicktool{ //Imagick对象实例
public $obj = null; public function __construct()
{
//判断是否加载了该扩展
if(!extension_loaded('Imagick'))
{
return false;
}
$this->obj = new \Imagick();
}
/*
* png2jpg转换图片格式
*
* @param string src_img 源图片路径
* @param string dest_img 要生成的图片的路径
* @return boolean 转换成共返回true 否则false
*/
public function png2jpg($src_img,$dest_img)
{
if(!is_object($this->obj))
{
return false;
}
try
{
$this->obj->readImage($src_img);
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
} /*
* 去掉图片的profile信息
*
* @param string src_img 源图片路径
* @return string src_img 图片名称 否则返回false
*/
public function strip_profile($src_img,$dest_img = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->stripImage ();
if($this->obj->writeImage ($dest_img))
{
$this->destory();
return $src_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
} /*
* 设置jpg图片质量
*
* @param string src_img 源图片路径
* @param string dest_img 要生成的图片的路径
* @return boolean 转换成共返回true 否则false
*/
public function set_quality($src_img,$quality = 70,$dest_img = '')
{
if(!is_object($this->obj))
{ echo 'error1';
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->setImageCompression(Imagick::COMPRESSION_JPEG);
$this->obj->setImageCompressionQuality($quality);
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
echo 'error2';
return false;
}
catch (ImagickException $e)
{
echo 'error3';
return false;
}
} /*
* 图片瘦身
*
* @param string src_img 源图片路径
* @param int quality 设置图片压缩质量
* @param string dest_img 要生成的图片的路径
* @return boolean 转换成共返回true 否则false
*/
public function slimming($src_img,$quality = 60,$dest_img = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{
$dest_img = empty($dest_img) ? $src_img : $dest_img;
$this->obj->readImage($src_img);
$this->obj->setImageFormat('jpeg');
$this->obj->setImageCompression(\Imagick::COMPRESSION_JPEG);
//将图片的质量降低到原来的60%
$quality = $this->obj->getImageCompressionQuality() * $quality / 100;
$this->obj->setImageCompressionQuality($quality);
$this->obj->stripImage(); if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
} /*
* 生成缩略图
*
* @param string src_img 源图片路径
* @param int quality 设置图片压缩质量
* @param string dest_img 要生成的图片的路径
* @return boolean 转换成共返回true 否则false
*/
public function thump($src_img,$width = 250,$height = '')
{
if(!is_object($this->obj))
{
return false;
}
try
{ $file_info = pathinfo($src_img);
//生成缩略图名称
$file_name = substr($file_info['basename'],0,strrpos($file_info['basename'],'.'));
$dest_img = $file_info['dirname'] . '/' . $file_name . '_thump.' . $file_info['extension'];
$this->obj->readImage($src_img);
//计算要获得缩略图的高度
$img_width = $this->obj->getImageWidth();
$img_height = $this->obj->getImageHeight();
$dest_height = $img_height * ($width / $img_width);
$this->obj->resizeImage($width, $dest_height, Imagick::FILTER_CATROM, 1, false);
//生成图片
if($this->obj->writeImage($dest_img))
{
$this->destory();
return $dest_img;
}
return false;
}
catch (ImagickException $e)
{
return false;
}
} /*
* 释放资源
*
*/
function destory()
{
if(is_object($this->obj))
{
$this->obj->clear(); $this->obj->destroy();
}
}
}
测试文件 ImgController.class.php:
<?php
namespace Home\Controller;
use Home\Common\Imgicktool;
use Think\Controller; class ImgController extends Controller{ function info(){
phpinfo();
} function quality(){
$srcFile = APP_PATH.'/test/test.jpg';
$destFile = APP_PATH.'/test/test.jpg';
$qua = new Imgicktool();
$qua->slimming($srcFile, 80, $destFile);
} }
参考:
1.《Ubuntu下安装ImageMagick和MagicWand For PHP》
2.《undefined reference to `inflateReset2'》
3.《php修改php.ini重启nginx php.ini设置不生效》
5.《安装imagick时Cannot locate header file MagickWand.h错误的解决》
7. Centos 安装 ImageMagic 时,make 报错,参考《红帽安装ImageMagick出错》
8. PHP 5.4的不能安装 imagick-3.0.1《linux下安装ImageMagick-6.5.1-2 老是编译有错误,哪位高手知道怎么解决吗》,这是在正式环境下 (CentOS6)下遇到的问题,imagick 各个版本下载地址:http://pecl.php.net/package/imagick/
Ubuntu 安装 ImageMagic(6.9.1-6)及 PHP 的 imagick (3.0.1)扩展的更多相关文章
- 使用UltraISO制作ubuntu安装u盘启动盘图文教程
使用UltraISO制作ubuntu安装u盘启动盘图文教程 胖先森关注 0.9572017.09.07 11:06:15字数 770阅读 27,901 制作U盘启动1.gif 1.首先打开Ultr ...
- Mac OS、Ubuntu 安装及使用 Consul
Consul 概念(摘录): Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,比如 Airbnb 的 SmartStac ...
- ubuntu安装mysql
好记性不如烂笔头,记录一下,ubuntu安装mysql的指令. 安装MySQL: sudo apt-get install mysql-server sudo apt-get install mysq ...
- ubuntu 安装Elasticsearch5.0(Debian包)
通过Debian包安装Elasticsearch Elasticsearch的Debian包可以从downloaded from our website或APT repository 它可以用于在任何 ...
- ubuntu安装vim时提示 没有可用的软件包 vim,但是它被其它的软件包引用了 解决办法
ubuntu安装vim时提示 没有可用的软件包 vim-gtk3,但是它被其它的软件包引用了 解决办法 本人在ubuntu系统安装vim 输入 sudo apt-get install vim 提示 ...
- docker 1.8+之后ubuntu安装指定版本docker-engine
这边记录ubuntu安装过程,首先是官网文档 If you haven’t already done so, log into your Ubuntu instance. Open a termina ...
- debian/ubuntu安装桌面环境
apt-get install xorg apt-get install gnome 然后startx ubuntu 安装Gnome桌面 1.安装全部桌面环境,其实Ubuntu系列桌面实际上有几种桌面 ...
- 一个ubuntu phper的自我修养(ubuntu安装)
ubuntu安装篇 一.ubuntu下载 到ubuntu官网下载适合自己电脑配置的系统版本,此处不做展开. 二.制作USB启动盘 在windows下制作USB启动盘,工具是universal usb ...
- ubuntu 安装JAVA jdk的两种方法:
ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用pp ...
随机推荐
- jar包和war包的区别
jar包和war包的区别: jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录 ...
- DB,Cache和Redis应用场景分析
最近做一产品,微博方面的.数据存储同时用到了DB(mysql),Cache(memcache),Redis.其实最开始架构设计的时候是准备用MongoDB的,由于学习成本太高,最终选择放弃了,采用了比 ...
- PHP 图片水印类
<?php /** * 加水印类,支持文字图片水印的透明度设置.水印图片背景透明. * $obj = new WaterMask($imgFileName); //实例化对象 * $obj-&g ...
- sina sae 部署 java ssh 项目
转自:http://jacobcookie.iteye.com/blog/1876798 1. 在sae上使用struts,需要添加的Listener,在com.company.listener中添加 ...
- 怎么在手机上查看sqlite db
在 从 百度应用 下载“SQLite编辑器(SQLite Editor)” 安装到手机上.前体是 手机已经Root(可以用360一键Root软件进行root).
- MATLAB信号与系统分析(三)——连续信号与系统的复频域分析及MATLAB实现
一.系统的拉普拉斯变换和反变换 1.MATLAB函数 F=laplace(f) %求拉氏变换 f=ilaplace(F) %求拉氏反变换 2.例子 clear all;clc;close all f= ...
- MATLAB学习笔记(五)——MATLAB绘图
(一)二维数据曲线图 一.绘制单根二维曲线 1.基本调用格式 plot(x,y) (1)x,y为长度相同的向量,分别用于储存x坐标和y坐标数据 (2)用于绘制以x,y为横,纵坐标的二维曲线. (3)举 ...
- DedeCMS让{dede:list}标签支持weight权重排序
1.找到"根目录\include\arc.listview.class.php"文件. 2.修改代码:在文件第727行处添加按weight排序判断代码(红色部分为新添加代码). / ...
- oracle 11g安装(转)
原文地址:http://www.2cto.com/database/201208/150620.html 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可 ...
- json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸
我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容 ...