imagick添加水印图片

给图片添加水印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);//将水印图片拼接到原图片上

具体的里面参数啊以及水印旋转的角度,需要自己进行微调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值