在一张图片上,打印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);
分享到:
相关推荐
【有文档,有两个安装软件等】php中的imagick扩展,主要实现对图片的操作与gd库都是对图片的操作的扩展,我当时用imagick的时候主要是想将格式为pdf的文件通过程序来转化成图片形式,经过一段时间的研究和探索最终...
PHP建图通常都用GD库,因为是内置的不需要在服务器上额外安装插件,所以用起来比较省心,但是如果你的程序主要的功能就是处理图像,那麼就不建议用GD了,因为GD不但低效能而且能力也比较弱,佔用的系统资源也颇多,另外GD的...
仓库管理 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和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要求:...
Intervention Image是一个PHP图像处理和操作库,它提供了一种更容易表达的方式来创建,编辑和合成图像。 该软件包包括用于轻松集成Laravel的ServiceProviders和Facades。 要求 PHP> = 5.4 Fileinfo扩展名 支持的...
+php5 curl拓展 函数库;curl Information 7.21.0; +ImageMagick是一个优秀的图片转换工具. 同时支持命令行方式的图片转换操作. 图像处理例如“验证码”“图片水印”.imagick module version 3.1.0RC2;ImageMagick...
存储库针对imagick和gd测试php-vips 。 在该测试中以及在我的笔记本电脑上, php-vips速度大约是imagick而所需的内存却少了10倍。 使用libvips的程序不会直接处理图像,而是会从源图像开始创建图像处理操作的管道。...
媒体库 FFMPEG 和 IMAGEMAGICK 组合库,使用 PHP 进行强大的媒体文件操作 需要 GD 模块 需要 ffmpeg 模块 需要 Imagick 模块 有关更多详细信息,请访问: : 所有者:VYRAZU 实验室
存储库针对imagick和gd测试php-vips :在该测试以及我的笔记本电脑上, php-vips速度大约是imagick而所需的内存却少了十倍。 例子 #!/usr/bin/env php <?php $ x = vips_image_new_from_file ( $ argv [ 1 ...
sudo apt-get install avconv arp-scan php-imagick 通过@BotFather注册漫游器(如有必要,将SSL证书发送给BotFather) 克隆存储库 git clone https://github.com/paulzi/ipcamera-telegram-bot.git cd ipcamera-...
使用库,该库可以检测和使用Gd和Imagick ,并且还支持和不同的。 生成的uri使用对图像路径和操作选项进行,以防止更改和图像调整大小的攻击。 注意:为了保留 ,此中间件不提供以下功能,应将其委派给其他中间件...
要求PHP 5.4及以上具有mod_rewrite或nginx的Apache(Debian上的nginx-light应该足够了) 使用PHP的GD库,但最好使用Imagick扩展名(并安装ImageMagick)安装复制您的DocumentRoot中的内容,这也可以是一个子文件夹...