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

圖片縮放水印PHP類

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
/**
* 圖片縮放水印類
*
*/
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)系。

上一篇:python抓取圖片示例

下一篇:獲得客戶端使用操作系統(tǒng)類型的php代碼