`
muyu
  • 浏览: 218288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP操作Imagick库

    博客分类:
  • php
PHP 
阅读更多

在一张图片上,打印8*10的数字矩阵,实现如下:

	//格子的尺寸
	$grid_font_size = 18;           //字体大小
	$grid_font_color = "#000";      //字体颜色
	$grid_width = 36;               //格子的宽度
	$grid_height = 24;              //格子的高度
	$grid_origin_x = 15;           //左上角的数字的起始横坐标
	$grid_origin_y = 98;            //左上角的数字的起始纵坐标

  #原图
  $image = new Imagick('background.jpg');
  
  #写入密保卡数据
  $tmp_grid_origin_x = $grid_origin_x;
  $tmp_grid_origin_y = $grid_origin_y;
  foreach ($pData as $k => $v){
    foreach ($v as $k_grid_data => $v_grid_data){
      $tmp_grid_origin_x += $grid_width;
      $draw = new ImagickDraw();
      $draw->setFillColor($grid_font_color);
      $draw->setFontSize($grid_font_size);
      $draw->annotation($tmp_grid_origin_x, $tmp_grid_origin_y, $v_grid_data);
      $image->drawImage($draw);
    }
    $tmp_grid_origin_x = $grid_origin_x;
    $tmp_grid_origin_y += $grid_height;
  }
  $image->writeImage($ks_ImageSrcPath. $pSN. '.jpg');

  #释放资源
  $image->destroy();
  $draw->destroy();

 

 

这样做的后果是,在每次循环的时候,都要实例化一个ImagickDraw,并执行drawImage方法,非常占用CPU资源。

可以从以下两点优化:

1. 不必每次都执行new操作,一个就够了;

2. 不必每次都执行drawImage方法,一次就够了。也就是说,annotation方法好像具有“附加”的意味,不用担心后来的覆盖掉之前的;

 

代码如下:

	      $draw = new ImagickDraw();
	      $draw->setFillColor($grid_font_color);
	      $draw->setFontSize($grid_font_size);
	      foreach ($pData as $k => $v){
	        foreach ($v as $k_grid_data => $v_grid_data){
	          $tmp_grid_origin_x += $grid_width;
	          $draw->annotation($tmp_grid_origin_x, $tmp_grid_origin_y, $v_grid_data);
	        }
          $tmp_grid_origin_x = $grid_origin_x;
          $tmp_grid_origin_y += $grid_height;
	      }
	      $image->drawImage($draw);

 

--------------------

2009-9-1 更新

--------------------

换种思路!

 

把8*10的数字矩阵看做“由80个数字、每10个换一行、每2个有一定间距”的字符串,哈!就可以从“调用80次annotation方法”减少到“调用1次”。

 

只是,我们不得不重新修改背景图的尺寸、“该字符串”在背景图的起始坐标等。

 

示例代码如下:

 

$numX = 0;
$str = '';
$tData = explode(",", $pData);
foreach ($tData as $d) {
  if (($numX++)%10 == 0) {
    $str .= "\n\n";
  }
  $str .= $d . "  "; 
}

$draw->setFillColor($grid_font_color);
$draw->setFontSize($grid_font_size);
$draw->annotation($grid_origin_x, $grid_origin_y, $str);

$image->drawImage($draw);

 

0
0
分享到:
评论

相关推荐

    windows下php配置imagick扩展

    【有文档,有两个安装软件等】php中的imagick扩展,主要实现对图片的操作与gd库都是对图片的操作的扩展,我当时用imagick的时候主要是想将格式为pdf的文件通过程序来转化成图片形式,经过一段时间的研究和探索最终...

    浅谈php扩展imagick

    PHP建图通常都用GD库,因为是内置的不需要在服务器上额外安装插件,所以用起来比较省心,但是如果你的程序主要的功能就是处理图像,那麼就不建议用GD了,因为GD不但低效能而且能力也比较弱,佔用的系统资源也颇多,另外GD的...

    Agua Gest - Gestionale Aziendale php:开源 - 基于网络 - CRM - 仓库管理和仓库发票-开源

    仓库管理 php 和 mysql 适用于所有电脑 正确操作 需要安装: 需要: apa​​che apache-mod_php mysql php-pdo php-pdo_mysql 需要: php-openssl php-ftp php-zip php-imagick php-gd php-mbstring php -imap 需要...

    Agua Gest - Gestionale Aziendale php:开源-基于Web-CRM-仓库管理和仓库发票-开源

    仓库管理php和mysql可以与所有计算机配合使用正确操作需要安装:需要:apache apache-mod_php mysql php-pdo php-pdo_mysql需要:php-openssl php-ftp php-zip php-imagick php-gd php- mbstring php -imap要求:...

    图像:PHP图像处理

    Intervention Image是一个PHP图像处理和操作库,它提供了一种更容易表达的方式来创建,编辑和合成图像。 该软件包包括用于轻松集成Laravel的ServiceProviders和Facades。 要求 PHP> = 5.4 Fileinfo扩展名 支持的...

    DebianLNMP加强版一键安装包Debian6配置Nginx PHP5.3 MySQL最快最新

    +php5 curl拓展 函数库;curl Information 7.21.0; +ImageMagick是一个优秀的图片转换工具. 同时支持命令行方式的图片转换操作. 图像处理例如“验证码”“图片水印”.imagick module version 3.1.0RC2;ImageMagick...

    php-vips:php绑定libvips

    存储库针对imagick和gd测试php-vips 。 在该测试中以及在我的笔记本电脑上, php-vips速度大约是imagick而所需的内存却少了10倍。 使用libvips的程序不会直接处理图像,而是会从源图像开始创建图像处理操作的管道。...

    mediaLibrary:FFMPEG PHP 和 IMAGEMAGICK 组合库,使用 PHP 进行强大的媒体文件操作

    媒体库 FFMPEG 和 IMAGEMAGICK 组合库,使用 PHP 进行强大的媒体文件操作 需要 GD 模块 需要 ffmpeg 模块 需要 Imagick 模块 有关更多详细信息,请访问: : 所有者:VYRAZU 实验室

    php-vips-ext:PHP的低级libvips绑定

    存储库针对imagick和gd测试php-vips :在该测试以及我的笔记本电脑上, php-vips速度大约是imagick而所需的内存却少了十倍。 例子 #!/usr/bin/env php <?php $ x = vips_image_new_from_file ( $ argv [ 1 ...

    ipcamera-telegram-bot:IPCamera 电报机器人

    sudo apt-get install avconv arp-scan php-imagick 通过@BotFather注册漫游器(如有必要,将SSL证书发送给BotFather) 克隆存储库 git clone https://github.com/paulzi/ipcamera-telegram-bot.git cd ipcamera-...

    图像处理:PSR-15中间件可按需处理图像

    使用库,该库可以检测和使用Gd和Imagick ,并且还支持和不同的。 生成的uri使用对图像路径和操作选项进行,以防止更改和图像调整大小的攻击。 注意:为了保留 ,此中间件不提供以下功能,应将其委派给其他中间件...

    LDG:一个简单的图库,用于浏览文件系统中已存在的图像

    要求PHP 5.4及以上具有mod_rewrite或nginx的Apache(Debian上的nginx-light应该足够了) 使用PHP的GD库,但最好使用Imagick扩展名(并安装ImageMagick)安装复制您的DocumentRoot中的内容,这也可以是一个子文件夹...

Global site tag (gtag.js) - Google Analytics