在做旅游攻略时,需要把攻略页面生成PDF和Jpg图片,PDF生成用的是《MPDF把Html生成PDF》,而HTML生成Jpg又卡壳了。前期打算以纯程式的生成,但是除了调用别的网站提供的远程API生成Jpg,不然以单纯的程式(GD库和内置函数,或封装的类)都没找到完美的解决。
不得已,安装扩展wkhtmltoimage生成。
安装步骤如下:
1、服务器端下载安装wkhtmltoimage,32和64位有区别,心情天空安装的是centos 5.8 32位。但是下载了 wkhtmltoimage 0.11版本但是出现以下错误,
Pixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used最后心情天空安装wkhtmltoimage-0.10.0_rc2-static-i386.tar.bz2低版本才可以正常生成。
32位
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.10.0_rc2-static-i386.tar.bz2
tar jxf wkhtmltoimage-0.10.0_rc2-static-i386.tar.bz2
cp wkhtmltoimage-i386 /usr/local/bin/wkhtmltoimage
64位
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2
mv wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2 wkhtmltoimage-0.10.0_rc2-static-amd64.tar
tar -xvf wkhtmltoimage-0.10.0_rc2-static-amd64.tar
mv wkhtmltoimage-amd64 /usr/bin/wkhtmltoimage
就这样,安装成功,可以测试 wkhtmltoimage http://www.111cn.net/ screenshot.png
2、php执行wkhtmltoimage 生成图片
代码如下 | 复制代码 |
set_time_limit(0); |
假若用foreach批量生成的话建议,sleep(10),每次生成后停顿几秒。
本文章来给大家介绍一篇关于php 给图片加灰色透明效果,希望此方法对各位同学会有所帮助哦。原理:
1.首先计算出原图片的尺寸
2.创建相同尺寸的半透明图片
3.使用 imagecopy()方法,把新创建的半透明图片与原图合并
代码如下 | 复制代码 |
<?php |
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。
php_imagick是PHP对图片处理的一个扩展包,可以完成对图片改变大小、旋转、锐化、减色或增加特效等操作。
一、windows下安装Imagick扩展:
1、下载 ImageMagick并安装
http://image_magick.veidrodis.com/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows-dll.exe
2、下载php_imagick.dll
http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_nts/php_imagick.dll
如果你用的是线程安全的php,请下载
http://valokuva.org/outside-blog-content/imagick- windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll
3、设置
在php.ini中添加
extension=php_imagick.dll ,重启web server
二、linux下安装Imagick扩展:
1.yum安装ImageMagick
yum install ImageMagick ImageMagick-devel
2.测试是否安装成功
convert -version
3.安装imagick扩展
01.wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz02.tar xzvf imagick-3.1.0RC2.tgz03.cd imagick-3.1.0RC204.phpize05../configure06.make07.make install
4.编辑php.ini文件,在文件末尾添加如下代码
extension=imagick.so
5. 重新启动apache服务器
service httpd restart
三、案例
1. 边框处理
代码如下 | 复制代码 |
//by www.111cn.net header('Content-type: image/jpeg'); $image = new Imagick('test.jpg'); $color=new ImagickPixel(); $color->setColor("rgb(220,220,220)"); $image->borderImage($color,5,4); $image->blurImage(5,5,imagick::CHANNEL_GREEN); echo $image; |
我们先来看个简单的实例
php_imagick程序示例
1.创建一个缩略图并显示出来
代码如下 | 复制代码 |
<?php header('Content-type: image/jpeg'); $image = new Imagick('image.jpg'); // If 0 is provided as a width or height parameter,// aspect ratio is maintained $image->thumbnailImage(100, 0); echo $image; ?> |
2.创建一个目录下的缩略图,并保存
代码如下 | 复制代码 |
<?php |
3.缩略GIF动画图片
代码如下 | 复制代码 |
<?php |
现在我们进入正题吧,
例1
裁切/生成缩略图/添加水印, 自动检测和处理 GIF
调用方式:
代码如下 | 复制代码 |
include 'imagick.class.php'; $image = new lib_image_imagick(); $image->open('a.gif'); |
imagick.class.php
代码如下 | 复制代码 |
<?php class lib_image_imagick // 构造函数
// 载入图像 public function crop($x=0, $y=0, $width=null, $height=null) $canvas->addImage( $img ); /* $canvas->addImage( $img ); $canvas->addImage( $img ); if($src_width*$height > $src_height*$width) $image = $this->image; $draw = new ImagickDraw(); $img = new Imagick(); $canvas->addImage( $img );
// 添加水印图片 if($this->type=='gif') // 输出图像 // 设置图像类型, 默认与源类型一致 // 获取源图像类型
/* public function add_noise($type=null){$this->image->addNoiseImage($type==null?imagick::NOISE_IMPULSE:$type);} // 添加噪点 public function charcoal($radius, $sigma){$this->image->charcoalImage($radius, $sigma);} // 素描 } |
GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。
生成效果图:
GD库的安装什么的网上都有,现在很多虚拟空间也都支持,这里就不再赘述。下面通过我实际应用代码的实例和相关的注释为大家介绍一下GD库的使用方法。
代码如下 | 复制代码 |
$str="北京"; $str2= "空气质量:轻度污染"; // 通过图片生成一个对象$im $im = imagecreatefromjpeg("images/3.jpg"); //载入字体zt.ttf $fnt = "zt.ttf"; //创建颜色,用于文字字体的白和阴影的黑 $white=imagecolorallocate($im,222,229,207); $black=imagecolorallocate($im,50,50,50); //创建关于相对图片位置的函数,方便调用 $top=100; $left=60; $top2=170; //在图片中添加文字,imagettftext (image,size,angle, x, y,color,fontfile,text) imagettftext($im,41, 0, $left+1, $top+1, $black, $fnt, $str); imagettftext($im,41, 0, $left, $top, $white, $fnt, $str); imagettftext($im,43, 0, $left+1,$top2+1 , $black, $fnt, $str2); imagettftext($im,43, 0, $left,$top2, $white, $fnt, $str2); //将$im输出 ImageJpeg($im); //销毁$im对象 ImageDestroy($im); |
接下来详细解释一下:
代码如下 | 复制代码 |
imagettftext (image,size,angle, x, y,color,fontfile,text) |
imagettftext() 是将字符串 text画到 image所代表的图像上,从坐标 x,y(左上角为 0, 0)开始,角度为 angle,颜色为 color,使用 fontfile 所指定的 TrueType 字体文件。
由 x,y 所表示的坐标定义了第一个字符的基本点大概在字符的左下角。
angle 以角度表示,0 度为从左向右阅读文本,更高的值表示逆时针方向(即如果值为 90 则表示从下向上阅读文本)。
fontfile 是想要使用的 TrueType 字体的文件名。
text 是文本字符串,可以包含 UTF-8 字符序列。
color 是颜色的索引值。
在php中要实现图片增加水印我们要用到的函数有很多,imagecreatefromjpeg,imagecreatefrompng,getimagesize等等函数,这些都是属于php GD库的函数,所以我们必须在php.ini中打开GD库才可以让php使用这些函数生成图片水印了。实现水印功能主要就是靠这些函数功能操作
1.imagecreatefromjpeg // 打开JPG图片 2.imagecreatefromgif // 打开GIF图片
3.imagecreatefrompng // 打开PNG图片
4.imagecreatefromwbmp // 打开WBMP图片(比较少用)
5.getimagesize // 获取图片大小信息
6.imagecopymerge // 把多张图片整合(添加水印的主要函数)
7.imagejpeg // 保存JPG图片
8.imagegif // 保存GIF图片
9.imagepng // 保存PNG图片
代码如下 | 复制代码 |
<?php |
目前支持jpg、gif、png等图片格式。
用法举例:
代码如下 | 复制代码 |
if($pic = watermark('./image.jpg','./watermark.png')) |
下面演示一个完整全水印增加函数
代码如下 | 复制代码 |
<?php 参数说明: 使用说明: //上传文件类型列表 $max_file_size=2000000; //上传文件大小限制, 单位BYTE <body> $file = $_FILES["upfile"]; if(!in_array($file["type"], $uptypes)) if(!file_exists($destination_folder)) $filename=$file["tmp_name"]; if(!move_uploaded_file ($filename, $destination)) $pinfo=pathinfo($destination); if($watermark==1) imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); switch($watertype) switch ($iinfo[2]) //覆盖原上传文件 if($imgpreview==1) |