中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

實(shí)現(xiàn)縮略圖和加水印的php類

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
/**
 * 圖片縮放水印類
 *
  * @version 1.0 ;
 *
 */
class cls_photo
{
    protected $waterrate = 0.2; //水印圖標(biāo)在圖片上的比例
    protected $width = 300; //縮略圖默認(rèn)寬度
    protected $height = 200; //縮略圖默認(rèn)高度
    protected $padding = 5;  //水印圖到邊的距離
    protected $water_mark = "./water.png";
    protected $water_mark_pos = 5;//水印圖片位置(1=左上角,2=右上角,3=左下角,4=右下角,5中央)
    protected $watermode = 0;// 0縮略圖時(shí)不打水印 1縮略圖時(shí)打水印
    protected $magick_handle;//圖片操作句柄
    protected $format = array('jpg','gif','png','jpeg'); // 圖片文件格式限定
    protected $smallpic_mode = 2;//默認(rèn)模式 0為不生成縮略圖, 1為裁切縮放 ,2為比例縮放 3為縮放填充模式

    /**
     * 設(shè)置圖片類參數(shù)
     *
     * @param $arg 圖片參數(shù) 多次可放入數(shù)組里 如下
     * @param $protected 參數(shù)值
     * array(
     *      'waterrate'=>0.2,
     *      'water_mark'=>'./water.png',
     *      'water_mark_pos'=>4,
     *      'smallpic_mode'=>1
     *      );
     * @return ture/false
     */
    public function set_args($arg,$val="")
    {
        $params = array('waterrate','water_mark','water_mark_pos','smallpic_mode','watermode','width','height');
        if(is_array($arg))
        {
            foreach ($arg as $k =>$v)
            {
                if(in_array($k,$params))
                {
                    $this->$k = $v;
                }
            }
        }
        else
        {
            if(empty($val))
            {
                return false;
            }
            else
            {
                if(in_array($arg,$params))
                {
                    $this->$arg = $val;
                }
            }
        }
        return true;
    }

    /**
     * 圖片縮放
     *
     * @param $src_file 源文件路徑
     * @param $dst_file 目標(biāo)文件路徑
     * @return 縮略圖片路徑/false
     */
    public function scale($src_file,$dst_file="")
    {
        $dst_width  = $this->width;
        $dst_height = $this->height;
        $mode       = $this->smallpic_mode;
        $magic_water_handle = NewMagickWand();
        if (!MagickReadImage($magic_water_handle, $src_file))return false;

        //類型
        $srcext = strtolower(MagickGetImageFormat($magic_water_handle));
        if($srcext=='bmp')
        {
            $srcext = 'jpeg';
        }
        if(!in_array($srcext,$this->format))return false;
        //尺寸
        $src_width = MagickGetImageWidth($magic_water_handle);
        $src_height = MagickGetImageHeight($magic_water_handle);

        //裁切縮放模式
        if($mode == 1)
        {
            $pos_x=$pos_y = 0;//裁切臨時(shí)位置
            $src_widthc = $src_width;//裁切臨時(shí)寬度
            $src_heightc = $src_height;//裁切臨時(shí)高度
            if($src_width/$src_height>$dst_width/$dst_height)
            {
                $src_widthc = $src_height*$dst_width/$dst_height;
                $pos_x = ($src_width-$src_widthc)/2;

            }
            else
            {
                $src_heightc = $src_width*$dst_height/$dst_width;
                $pos_y = ($src_height-$src_heightc)/2;
            }
        MagickCropImage($magic_water_handle,$src_widthc,$src_heightc,$pos_x,$pos_y);//裁切
        //因?yàn)镸agickCropImage函數(shù)后,Gif 圖像改,但畫布不變
        $this->magick_handle = NewMagickWand();
        MagickNewImage($this->magick_handle,$src_widthc,$src_heightc,'#ffffff');
        MagickSetFormat($this->magick_handle,$srcext);
        MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,0,0);
        //縮放
        MagickScaleImage($this->magick_handle, $dst_width, $dst_height);

        }
        //比例縮放模式
        if($mode == 2)
        {
            if($src_width/$src_height>$dst_width/$dst_height)
            {
                $dst_height=$dst_width*$src_height/$src_width;
            }
            else
            {
                $dst_width=$dst_height*$src_width/$src_height;
            }
            $this->magick_handle=$magic_water_handle;//替換
            MagickScaleImage($this->magick_handle, $dst_width, $dst_height);//縮放
        }
        //縮放填充模式
        if($mode == 3)
        {
            if($src_width/$src_height>$dst_width/$dst_height)
            {
                $dst_heightc=$dst_width*$src_height/$src_width;
                $dst_widthc=$dst_width;
            }
            else
            {
                $dst_widthc=$dst_height*$src_width/$src_height;
                $dst_heightc=$dst_height;
            }
              MagickScaleImage($magic_water_handle, $dst_widthc, $dst_heightc);//縮放
            $this->magick_handle = NewMagickWand();
            MagickNewImage($this->magick_handle,$dst_width,$dst_height,$this->smallpic_bgcolor);
            MagickSetFormat($this->magick_handle,$srcext);
            MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,($dst_width-$dst_widthc)/2,($dst_height-$dst_heightc)/2);
        }
        //打水印
        if($this->watermode == 1)
        {
            $this->set_mark();
        }
        if(empty($dst_file))
        {
            //建立臨時(shí)文件
            $dst_file = tempnam($_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG");
        }
        MagickWriteImage($this->magick_handle, $dst_file);
        return $dst_file;
    }    

    /**
     * 打水印
     *
     * @param $src_file 要打水印的圖片路徑
     * @param $dst_file 生產(chǎn)水印的文件保存路徑,為空則生產(chǎn)隨機(jī)臨時(shí)文件
     * @return 水印文件路徑/false
     */
    public function water_mark($src_file,$dst_file="")
    {
        $this->magick_handle = NewMagickWand();
        if (!MagickReadImage($this->magick_handle, $src_file))
        return false;
        $this->set_mark();
        if(empty($dst_file))
        {
            //建立臨時(shí)文件
            $dst_file = tempnam($_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG");
        }
        MagickWriteImage($this->magick_handle, $dst_file);
        return $dst_file;
    }

    /**
     * 對內(nèi)接口
     * 給圖片打水印
     *
     */
    protected  function set_mark()
    {

        //尺寸
        $dst_width = MagickGetImageWidth($this->magick_handle);
        $dst_height = MagickGetImageHeight($this->magick_handle);
        //處理水印圖
        if ($this->water_mark && is_file($this->water_mark))
        {
            $magic_water_handle = NewMagickWand();
            MagickRemoveImage($magic_water_handle);
            if (MagickReadImage($magic_water_handle, $this->water_mark))
            {
                MagickScaleImage($magic_water_handle, $dst_width*$this->waterrate, $dst_width*$this->waterrate*MagickGetImageHeight($magic_water_handle)/MagickGetImageWidth($magic_water_handle));//縮放水印到圖片的1/5
                if ($this->water_mark_pos == 1)
                {
                    $left = $this->padding;
                    $top = $this->padding;
                }
                elseif ($this->water_mark_pos == 2)
                {
                    $left = $dst_width-$this->padding-MagickGetImageWidth($magic_water_handle);
                    $top = $this->padding;
                }
                elseif ($this->water_mark_pos == 3)
                {
                    $left = $this->padding;
                    $top = $dst_height -$this->padding-MagickGetImageHeight($magic_water_handle);
                }
                elseif ($this->water_mark_pos == 4)
                {
                    $left = $dst_width-$this->padding-MagickGetImageWidth($magic_water_handle);
                    $top =$dst_height -$this->padding-MagickGetImageHeight($magic_water_handle);
                }
                elseif ($this->water_mark_pos == 5)
                {
                    $left = ($dst_width-MagickGetImageWidth($magic_water_handle))/2;
                    $top =($dst_height -MagickGetImageHeight($magic_water_handle))/2;
                }
                MagickCompositeImage($this->magick_handle,$magic_water_handle,MW_OverCompositeOp,$left,$top);
            }
        }
    }
}

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:php生成圖像縮略圖(支持:JPEG,GIT,PNG,BMP)

下一篇: js獲取本機(jī)ip地址