图片缩放 图片加水印 php类

...
	/**
	 * 图片缩放
	 *
	 * @param $src_file 源文件路径
	 * @param $dst_file 目标文件路径
	 * @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;//裁切临时位置
			$src_widthc = $src_width;//裁切临时宽度
			$src_heightc = $src_height;//裁切临时高度
			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 );//裁切
			//因为MagickCropImage函数后,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 ) )
		{
			//建立临时文件
			$dst_file = tempnam ( $_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
		}
		MagickWriteImage ( $this->magick_handle, $dst_file );
		return $dst_file;
	}

	/**
	 * 打水印
	 *
	 * @param $src_file 要打水印的图片路径
	 * @param $dst_file 生产水印的文件保存路径,为空则生产随机临时文件
	 * @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 ) )
		{
			//建立临时文件
			$dst_file = tempnam ( $_SERVER["SINASRV_CACHE_DIR"],"TMP_IMG" );
		}
		MagickWriteImage ( $this->magick_handle, $dst_file );
		return $dst_file;
	}

	/**
	 * 对内接口
	 * 给图片打水印
	 *
	 */
	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 );
			}
		}
	...

完整代码:图片缩放水印类 - php代码库 - 云代码 http://yuncode.net/code/c_50850de8bc13e73



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值