Windows服务器环境下多版本php环境安装php的imagick和imagemagick扩展尝试多版本成功安装运行实现图片平铺水印代码
发布时间:2017-02-27, 16:51:54 分类:Linux | 编辑 off 网址 | 辅助
图集1/3
正文 7531字数 738,879阅读
1. 下载 ImageMagick安装后不得请多试试几个版本 64位系统也可以安装32位的程序
ImageMagick-7.0.5-0-Q16-x64-dll
ImageMagick-6.2.7-6-Q16-windows-dll
Windows Server2012 64位用的是下面这个32位版才安装成功的
ImageMagick-6.8.4-0-Q16-x86-dll
多版本php环境记得修改php.ini里面的在运行php版本对应路径
2. 安装 ImageMagick
安装 ImageMagick 到 PC 上。安装路径不能出现空格,否则无法使用。安装时,一点选中把执行路径添加到 path 上,否则你就得手动去添加 path 路径了。
3. 测试安装
打开windows 命令行窗口(win+r -> “cmd” -> Enter),输入convert,回车。会出现convert的帮助文档,如果没有出现,说明没有安装成功,或没有把安装目录添加到环境变量 path 中。
4. 下载 php扩展 php_imagick.dll
下载地址 http://www.peewit.fr/imagick/
http://pecl.php.net/package/imagick/3.4.3/windows
php_imagick-3.2.0RC1-5.6-nts-vc11-x86
本站使用的是nts 32位版的dll
判断PHP 是ts还是nts版
通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
Run code
Cut to clipboard
5. 把dll文件重命名为php_imagick.dll,并放到php 扩展文件目录 php/ext 中。
6. 在 php.ini 配置文件中添加,extension=php_imagick.dll。
7. 重启电脑,只重启apache不管用的情况下,重启下PC。因为扩展底层使用的是imageMagic软件,所以软件重启电脑,重新加载软件,并刷新path路径。
8. 重启后,打开 phpinfo页面,查看,扩展已经安装成功。如果还未安装成功,极有可能imagemagick软件版本过高,请选择更低一级的版本安装。
9. PHP测试代码。
<?php
$im = new imagick( 'a.jpg' );
// resize by 200 width and keep the ratio
$im->thumbnailImage( 200, 0);
// write to disk
$im->writeImage( 'a_thumbnail.jpg' );
Run code
Cut to clipboard
10. 查看手册,学习API
相关扩展学习手册地址 http://uk3.php.net/manual/zh/book.imagick.php]http://uk3.php.net/manual/zh/book.imagick.php]http://uk3.php.net/manual/zh/book.imagick.php 手册中包含大量易用实例。
这里还有查看命令行参数的文档 http://www.imagemagick.org/Usage/
windows7下安装php的imagick和imagemagick扩展教程
php open_basedir restriction in effect. 的问题
open_basedir='/var/www/html/:/usr/share/pear/';
Run code
Cut to clipboard
如果是nginx环境,解决方法就是在/etc/nginx/fastcgi_params PHP_VALUE 中修改
"open_basedir=$document_root:$document_root/../:/usr/share/pear:/usr/share/php:/etc/phpMyAdmin:/tmp:/proc";
Run code
Cut to clipboard
解决: 在/www下建立/tmp 并赋予权限
Run code
Cut to clipboard
windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
php扩展 调试命令:
在cmd运行: php --ri imagick
1. 如果报错是:“php_imagick.dll' - %1 不是有效的 Win32 应用程序” ,则说明版本不相符合。 需要检查 imagick软件本身( 如x86 )、php本身( x86 ts (thread safe) )、php扩展php_imagick.dll (ts) 三方版本 要一致。
2. 如果报错是:“php.exe - 系统错误 ,无法启动此程序因为计算机丢失CORE_RL_wand_.dll ” , 说明你没有将 php_imagick-3.3.0-5.4-ts-vc9-x86.zip 扩展包中的“CORE_*.dll” 这些dll文件 放到 你的php.exe同级目录下。 ,只需要拷贝 CORE_*.dll 到php目录就可以解决了。
3. 如果php --ri imagick 显示的结果 ImageMagick number of supported formats: => 0 支持的图片格式数量为0,请看第5步需要新建一个环境变量。
4.如果php代码执行调用时报错:“ NoDecodeDelegateForThisImageFormat ”,表明你的php_imagick.dll的版本 并不支持或并不匹配 ImageMagick软件版本,这时候 php --ri imagick 的结果也显示为: ImageMagick number of supported formats => 0 。需要更换ImageMagick软件版本。
Run code
Cut to clipboard
PHP中Imagick的使用
ImageMagick 中文站
Imagick::compositeImage
Imagick::getImageFormat
php 给图片增加背景平铺水印代码
<?php
$image = new imagick('logo.jpg');
$im = new imagick();
$im->newimage( 140, 80, new imagickpixel( "none" ) );
$draw = new imagickdraw();
$draw->setfillcolor(new imagickpixel( "grey" ));
$draw->setgravity(imagick::gravity_northwest);
$draw->annotation(10,10 ,'copyright');
$draw->setgravity(imagick::gravity_southeast);
$draw->annotation(5,15 ,'copyright');
$im->drawimage( $draw);
$image = $image->textureimage($im);
$image->compositeimage($image,imagick::composite_copy,0,0);
header( "content-type: image/{$image->getimageformat()}" );
$image->writeimage('wmark_text_tiled.jpg');
$image->clear();
$image->destroy();
Run code
Cut to clipboard
上传图片并添加水平平铺水印实例完整代码 文字水印,图片水印
<?php
include 'db.php';
if(!$uligon){
header('Location:/login.php');
exit;
}
if(date('j',$ttitme)>$conf['my']) exit('本月作品'.$conf['my'].'号之后禁止修改!');
$file=$_FILES["file"]["tmp_name"];
if(!$file) exit('图片上传失败!');
$image = new imagick($file);
$syxzsssyxzss=$conf['syxz'];
if($conf['syxzss']) $syxzsssyxzss=rand(-360,360);//水印旋转
if($conf['syxzssf']==1){
$im = new imagick();
$im->newimage( $conf['sykd'], $conf['sygd'], new imagickpixel( "none" ) ); //水印高度 宽度 背景色
$draw = new imagickdraw();
$draw->setfillcolor(new imagickpixel( $conf['syys'] ));//水印颜色
//$draw->setgravity(imagick::gravity_northwest);
$draw->setFont('simsun.ttc');//水印字体
$waterText=$conf['sy'];
$draw->annotation($conf['syzb'],$conf['syyb'] ,$waterText);//水印文字 左 上距离
//$draw->setgravity(imagick::gravity_southeast);
//$draw->annotation(5,15 ,'copyright');//多重水印
$im->drawimage( $draw);
$im->rotateImage(new ImagickPixel('none'), $syxzsssyxzss);
$image = $image->textureimage($im);
}else if($conf['syxzssf']==2){
$src2 = new Imagick('logo3.png');//图片水印
$src2->rotateImage(new ImagickPixel('none'), $syxzsssyxzss);
$image = $image->textureimage($src2);
}
//$image->compositeimage($image,imagick::composite_copy,0,0);
//header( "content-type: image/{$image->getimageformat()}" );
$nwff=md5(md5(md5($file).rand(100000,999999).$ttitme).rand(1000000,9999999));
$immmok= $image->writeimage('u/'.$nwff.'.jpg');
$image->clear();
$image->destroy();
//imagejpeg($im);
if($immmok){
$stmt = $dbh->prepare("INSERT INTO p (uid, url,ctime,dtime,mtime,dday,zt,bz,sm) VALUES (:uid, :url,:ctime,:dtime,:mtime,:dday,:zt,:bz,:sm)");
$stmt->bindParam(':uid', $uligon);
$stmt->bindParam(':url', $nwff);
$stmt->bindParam(':sm', $_POST['sm']);
$stmt->bindParam(':zt', $stmtusernewbbttt['bt']);
$stmt->bindParam(':bz', $stmtusernewbbttt['bz']);
/*$dtime=date('Y',$ttitme);
$mtime=date('n',$ttitme);
$ctime=$ttitme;
$dday=date('j',$ttitme);*/
//$ttitme=$ttitme;
$ctime=$ttitme;
$dtime=date('Y',$ttitme);
$mtime=date('n',$ttitme);
$dday=date('j',$ttitme);
$stmt->bindParam(':dtime', $dtime);
$stmt->bindParam(':mtime', $mtime);
$stmt->bindParam(':ctime', $ctime);
$stmt->bindParam(':dday', $dday);
$stmt->execute();
$title='会员管理';
$mmmdddhh='up';
include 'headu.php';
echo '<p style="margin-top: 29px;"><i class="fi-check" style="color:green;"></i>上传成功!3秒后跳转!</p><script>setTimeout("location.href = \'u.php?mm=by\';",2000);</script>';
include 'foot.php';
exit;
}
exit('上传失败!');
?>
Run code
Cut to clipboard
字体
simsun.ttc
演示代码 效果php文字水印图片水印平铺实例
<?php
/*error_reporting(E_ALL);
ini_set('display_errors',1);*/
$file='a.jpg';
$image = new imagick($file);
$syxzsssyxzss=-40;//rand(-360,360);//水印旋转
$im = new imagick();
$im->newimage( 200, 80, new imagickpixel( "none" ) ); //水印高度 宽度 背景色
$draw = new imagickdraw();
$draw->setfillcolor(new imagickpixel( 'red' ));//水印颜色
//$draw->setgravity(imagick::gravity_northwest);
$draw->setFont('simsun.ttc');//水印字体
//$waterText=$conf['sy'];
$draw->annotation(15,20 ,'意思完 意思玩 yisiwan.com');//水印文字 左 上距离
//$draw->setgravity(imagick::gravity_southeast);
//$draw->annotation(5,15 ,'copyright');//多重水印
$im->drawimage( $draw);
$im->rotateImage(new ImagickPixel('none'), $syxzsssyxzss);
$image = $image->textureimage($im);
//$image->compositeimage($image,imagick::composite_copy,0,0);
//header( "content-type: image/{$image->getimageformat()}" );
//$nwff=md5(md5(md5($file).rand(100000,999999).$ttitme).rand(1000000,9999999));
$immmok= $image->writeimage('1.jpg');
$image->clear();
$image->destroy();
//imagejpeg($im);
Run code
Cut to clipboard

(支付宝)给作者钱财以资鼓励 (微信)→
有过 3 条评论 »
imagick代码:
<?php $image = new imagick('logo.jpg'); $im = new imagick(); $im->newimage( 140, 80, new imagickpixel( "none" ) ); $draw = new imagickdraw(); $draw->setfillcolor(new imagickpixel( "grey" )); $draw->setgravity(imagick::gravity_northwest); $draw->annotation(10,10 ,'copyright'); $draw->setgravity(imagick::gravity_southeast); $draw->annotation(5,15 ,'copyright'); $im->drawimage( $draw); $image = $image->textureimage($im); $image->compositeimage($image,imagick::composite_copy,0,0); header( "content-type: image/{$image->getimageformat()}" ); $image->writeimage('wmark_text_tiled.jpg'); $image->clear(); $image->destroy(); ?>
随机的在角落生成水印
//PHP水印(四个随机位置).php,你改一下就行的: <? function waterMark($fileInHD, $wmFile, $transparency = 50, $jpegQuality = 90, $margin = 5) { $wmImg = imageCreateFromGIF($wmFile); $jpegImg = imageCreateFromJPEG($fileInHD); // Water mark random position $wmX = (bool)rand(0,1) ? $margin : (imageSX($jpegImg) - imageSX($wmImg)) - $margin; $wmY = (bool)rand(0,1) ? $margin : (imageSY($jpegImg) - imageSY($wmImg)) - $margin; // Water mark process imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency); // Overwriting image ImageJPEG($jpegImg, $fileInHD, $jpegQuality); } waterMark('bg.jpg','./images/bz.gif'); ?> <img src='bg.jpg'>
是配置php环境变量导致,删除去掉即可.