php 使用 imagick 处理图片--获取图片颜色等高级处理

使用php合并二维码头像图片失真的问题

要用PHP建立分析图片颜色的程序,需要安装imagick扩展,这个一个pecl扩展,可以进行很多高级的图片操作,有兴趣的话可以仔细研究研究。

例如可以获取一张图片的多种颜色。

下面介绍如何安装和使用:

我的PHP版本为5.2.9,Apache 版本为2.0,win环境。我安装的Imagick的版本为2.2.1.

请分别下载下面三个资源文件:(我已经上传到资源库中,可以点击下载

  • php-5.2.4_magickwand_q16_st.dll
  • php-5.2.4_magickwand_dyn.dll
  • php_imagick.dll

然后放置在php/ext 文件夹中,接着在 php.ini 文件夹中 配置 如下

extension=php-5.2.4_magickwand_q16_st.dll
extension=php_imagick.dll

然后重启Apache,然后查看phpinfo(),可以看到如下配置,即安装成功。


1336488838_5074.jpg

1336488886_5290.jpg

下面介绍如何使用:

这里是imagick的函数库文档:http://cn2.php.net/imagick

举例代码:

<?php  
$average = new Imagick("3dcf97dac6ff58cc692846acaae37060.png");  
  
$average->quantizeImage( 10, Imagick::COLORSPACE_RGB, 0, false, false );  
/* 每个颜色取样一个像素 */  
$average->uniqueImageColors();  
/* 克隆对象并调节到明色*/  
$bright = $average->clone();  
$bright->modulateImage ( 125, 200, 100 );  
/* 克隆对象并调节到暗色 */  
$dark = $average->clone();  
$dark->modulateImage ( 80, 100, 100 );  
/* 建立图片函数 */  
function createImages( Imagick $composite, Imagick $im )  
{  
    /* Get ImagickPixelIterator */  
    $it = $im->getPixelIterator();  
    /* Reset the iterator to begin */  
    $it->resetIterator();  
    /* Loop trough rows */  
    while( $row = $it->getNextIteratorRow() )  
    {  
        /* Loop trough columns */  
        foreach ( $row as $pixel )  
        {  
            /* Create a new image which contains the color */  
            $composite->newImage( 20, 20, $pixel );  
            $composite->borderImage( new ImagickPixel( "black" ), 1, 1 );  
        }  
    }  
}  
/*创建一个图片以保存颜色 */  
$composite = new Imagick();  
  
createImages( $composite, $dark );  
createImages( $composite, $average );  
createImages( $composite, $bright );  
/* 组合颜色到一个图片 */  
$montage = $composite->montageImage( new imagickdraw(), "10x3+0+0",  
        "20x20+4+3>", imagick::MONTAGEMODE_UNFRAME,  
        "0x0+3+3" );  
/* 释放资源 */  
$composite->destroy();  
/* 建立空图片 */  
$canvas = new Imagick();  
$canvas->newImage( $montage->getImageWidth() + 55,  
        $montage->getImageHeight(),  
        new ImagickPixel( "white" ) );  
/* 设置图片格式 */  
$canvas->setImageFormat( "png" );  
/* 设置字体大小 */  
$draw = new ImagickDraw();  
$draw->setFontSize( 12 );  
/* 为每个调色板建立标签 */  
$canvas->annotateImage( $draw, 5, 20, 0, "Dark: " );  
$canvas->annotateImage( $draw, 5, 45, 0, "Average: " );  
$canvas->annotateImage( $draw, 5, 70, 0, "Bright: " );  
/* 整合调色板和标签*/  
$canvas->compositeImage( $montage, Imagick::COMPOSITE_OVER, 55, 0 );  
/* 输出图片 */  
header( "Content-Type: image/png" );  
echo $canvas;  
?>  

转发来自http://blog.csdn.net/ljguo212/article/details/7548029

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,589评论 25 709
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,913评论 3 64
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,937评论 0 27
  • Composer Repositories Composer源 Firegento - Magento模块Comp...
    零一间阅读 3,973评论 1 66
  • 周宝做浙西节度使时,有一次修城隍庙,在鹤林门到发掘一座古墓,棺材都快要腐烂了。把它打开,看到里面有一个女子,面色如...
    愛恩阅读 421评论 0 0