给图片添加水印png小图片,并且旋转90度,放在指定位置。有关imagick的例子较少,这里给大家留一份。也给自己留一份
WzImagick这个类为您提供了基类的方法
<?php
/**
* Created by PhpStorm.
* @author: lizhi <lizhi7@xin.com>
* Date: 2019/10/26 15:20
*/
namespace App\Library;
use Imagick;
class WzImagick
{
const TEM_PATH = '/data/www/contract/public/images/';
protected $tem_path = '';
public function __construct()
{
if (!extension_loaded('imagick')) {
throw new \Exception("没有Imagick扩展");
}
$this->tem_path = $this->getLinkDirect();
}
/**
* 给图片增加水印
* @author lizhi7 <lizhi7@xin.com>
* @param \Imagick $imagick 原图片imagick对象
* @param $waterPng
*/
public function watermark(Imagick $canvas, $waterPng)
{
$im = new Imagick($waterPng);
$x = 270;
$y = 2680;
$geo = $im->getImageGeometry();
$im->resizeImage($geo['width']/12, $geo['height']/12, Imagick::FILTER_UNDEFINED, 1, TRUE);
$im->rotateimage(new \ImagickPixel() , -90);//旋转指定角度
$canvas->compositeimage($im, $im->getImageCompose(), $x, $y);//贴上水印图片在指定位置
$im->destroy();
$canvas->writeimage($waterPng);//销毁对象
$canvas->destroy();
}
/*
* pdf转图图片
* @author lizhi7 <lizhi7@xin.com>
* @param $pdf 待处理的PDF文件
* @param int $page
* @return array|bool
*/
public function pdf2Image($pdf)
{
if (!file_exists($pdf)) {
return false;
}
$im = new \Imagick();
$im->setResolution(300,300);//图片设置300dit
$im->setOption('density','300x300');
//$im->setCompressionQuality(100);
$Return = [];
$im->readImage($pdf);
foreach ($im as $Key => $Var) {
$Var->setImageFormat('jpeg');
$filename = $this->tem_path . "/" . md5($Key . time()) . '.jpg';
if ($Var->writeImage($filename) == true) {
$Return[] = $filename;
}
}
return $Return;
}
/**
* 获取临时目录
* @author lizhi7 <lizhi7@xin.com>
* @return string
*/
public function getLinkDirect()
{
if ($this->tem_path == '') {
$archiveTmpDir = $_SERVER['SITE_CACHE_DIR'] . 'WzContractCache/';
if (!is_dir($archiveTmpDir)) {
mkdir($archiveTmpDir, 0777, true);
}
$this->tem_path = $archiveTmpDir;
}
return $this->tem_path;
}
/**
* php7下的imagick无法直接读取远程图片,需下载到本地
* 将远程文件下载到本地临时目录中,并范围文件路径
* @author lizhi7 <lizhi7@xin.com>
* @param $remoteFile 远程路径
* @return string
*/
public function downLinkFile($remoteFile)
{
$filename = $this->getRemoteName($remoteFile);
$templateSource = $this->tem_path. $filename;
if (false == file_exists($templateSource)) {
copy($remoteFile, $templateSource);
}
return $templateSource;
}
/**
* 获取远程图片的名称
* @author lizhi7 <lizhi7@xin.com>
* @param $remoteFile
* @return array|mixed
*/
public function getRemoteName($remoteFile)
{
$arr = parse_url($remoteFile);
$filename = explode('/', $arr['path']);
$filename = end($filename);
return $filename;
}
}
如何调用,单独写一下。哈哈
$watherPng = 'https://c.xinstatic.com/o/20191026/1545/543f98277dd7799970.png';//水印图片
$watherFile = $wzImagick->downLinkFile($watherPng);//将远程图片转成本地照片
$canvas = new \Imagick('原照片');//原图片
$wzImagick->watermark($canvas, $watherFile);//将水印图片拼接到原图片上
具体的里面参数啊以及水印旋转的角度,需要自己进行微调。