php处理图片的方法

#获取图片的大小
$info = getimagesize($src);//$info[0]宽度 $info[1]高度 $info['mime']图片类型
#加载图片
imagecreatefromjpeg($src);
imagecreatefrompng($src);
imagecreatefromjpg($src);
imagecreatefromgif($src);
#创建画布
imagecreatetruecolor($width,$height);
imagecopyresampled(resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h ,int $src_w , int $src_h )
$dst_image:新建的图片
$src_image:需要载入的图片
$dst_x:设定需要载入的图片在新图中的x坐标
$dst_y:设定需要载入的图片在新图中的y坐标
$src_x:设定载入图片要载入的区域x坐标
$src_y:设定载入图片要载入的区域y坐标
$dst_w:设定载入的原图的宽度(在此设置缩放)
$dst_h:设定载入的原图的高度(在此设置缩放)
$src_w:原图要载入的宽度
$src_h:原图要载入的高度
#生成新图片
bool imagejpeg(resource $image , mixed $to = null , int $quality = 75)
$image 欲输出的图像资源,如imagecreate()或imagecreatefrom系列函数的返回值
$to 可选,指定输出图像的文件名,如果省略,则原始图像流将被直接输出
$quality 可选,指定图像质量,范围从 0(最差质量,文件最小)到 100(最佳质量,文件最大),默认75imagejpeg() 独有参数
bool imagepng(resource $image , mixed $to = null)
bool imagegif(resource $image , mixed $to = null)
#销毁图像
bool imagedestroy(resource $image)
#旋转图像
resource imagerotate(resource $image,float $angle)
	/**
     * 图片重置图片大小
     * @param  $src 图片路径 $width $height 新图片的宽高
     */
	public function resize($src,$width,$height){
		$info = getimagesize($src);
		if($info[0] == $width && $info[1] == $height){
			return $src;
		}
		switch ($info['mime']) {
			case 'image/jpeg':
				$image_wp = imagecreatetruecolor($width, $height);
        		$image_src = imagecreatefromjpeg($src);
        		imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
        		imagedestroy($image_src);
        		imagejpeg($image_wp,$src);
				break;
			case 'image/png':
        		$image_wp = imagecreatetruecolor($width, $height);
        		$image_src = @imagecreatefrompng($src);
		        imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
		        imagedestroy($image_src);
		        imagepng($image_wp,$src);
				break;
			case 'image/jpg':
        		$image_wp = imagecreatetruecolor($width, $height);
        		$image_src = imagecreatefromjpg($src);
		        imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
		        imagedestroy($image_src);
		        imagejpeg($image_wp,$src);
				break;
			case 'image/gif':
        		$image_wp = imagecreatetruecolor($width, $height);
        		$image_src = imagecreatefromgif($src);
		        imagecopyresampled($image_wp, $image_src, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
		        imagedestroy($image_src);
		        imagegif($image_wp,$src);
			default:
				break;
		}
		return $src;
	}
class ImageWatermark{

    public $markPosType = 0;          //水印位置,缺省为随机位置输出水印

    public $fontFile = 'arial.ttf';   //字体文件名

    public $color = '#CCCCCC';        //水印字体的颜色

    public $fontSize = 12;            //水印字体大小

    public $angle = 0;                //水印文字旋转的角度

    private $markPos = array();

    private $markImageFile = null, $destImageFile = null;

    private $mark_res = null, $mark_width = 0, $mark_height = 0, $mark_type = null;

    private $dest_res = null, $dest_width = 0, $dest_height = 0, $dest_type = null;



    //用目标图片作为构造函数的参数

    public function __construct($destImage){

        if(!file_exists($destImage)) return false;

        $this->destImageFile=$destImage;

        //获取图片大小、类型

        $imageInfo = getimagesize($this->destImageFile);

        $this->dest_width = $imageInfo[0];$this->dest_height = $imageInfo[1];$this->dest_type = $imageInfo[2];

        //得到图片资源句柄

        $this->dest_res = $this->getImageResource($this->destImageFile,$this->dest_type);

    }

    public function __destruct(){

        imagedestroy($this->dest_res);

    }

    //添加文字水印

    public function appendTextMark($markText){

        if($markText==null) return false;

        //计算水印文本的大小

        $box = imagettfbbox($this->fontSize,$this->angle,$this->fontFile,$markText);

        $this->mark_width = $box[2]-$box[6];

        $this->mark_height = $box[3]-$box[7];

        //计算水印位置

        $pos = ($this->markPos!=null)?$this->markPos:$this->getMarkPosition($this->markPosType);

        $pos[1]+=$this->mark_height;

        //将文字打印到图片上

        $RGB=$this->colorHexRgb($this->color);

        $imageColor=imagecolorallocate($this->dest_res,$RGB[0],$RGB[1],$RGB[2]);

        imagettftext($this->dest_res,$this->fontSize,$this->angle,$pos[0],$pos[1],$imageColor,$this->fontFile,$markText);

    }

    //添加图片水印

    public function appendImageMark($markImage){

        if(!file_exists($markImage)) return false;

        $this->markImageFile=$markImage;

        //获取水印图片大小、类型

        $imageInfo = getimagesize($this->markImageFile);

        $this->mark_width = $imageInfo[0];$this->mark_height = $imageInfo[1];$this->mark_type = $imageInfo[2];

        //得到图片资源句柄

        $this->mark_res = $this->getImageResource($this->markImageFile,$this->mark_type);

        //计算水印位置

        $pos = ($this->markPos!=null)?$this->markPos:$this->getMarkPosition($this->markPosType);

        //设置图像混色模式

        imagealphablending($this->dest_res, true);

        //复制叠加图像

        imagecopy($this->dest_res,$this->mark_res,$pos[0],$pos[1],0,0,$this->mark_width,$this->mark_height);

        imagedestroy($this->mark_res);

    }

    //将叠加水印后的图片写入指定文件,若不定文件名,则输出到浏览器

    public function write($filename=null){

        $this->writeImage($this->dest_res,$filename,$this->dest_type);

    }

    //设置水印x,y坐标

    public function setMarkPos($x,$y){

        $this->markPos[0]=$x; $this->markPos[1]=$y;

    }

    //将十六进制的颜色值分解成RGB形式

    private function colorHexRgb($color){

        $color = preg_replace('/#/','',$color);

        $R=hexdec($color[0].$color[1]);

        $G=hexdec($color[2].$color[3]);

        $B=hexdec($color[4].$color[5]);

        return array($R,$G,$B);

    }

    //计算水印位置

    private function getMarkPosition($type=0){

        switch($type){

            case 0: $x = rand(0,$this->dest_width-$this->mark_width);

                    $y = rand(0,$this->dest_height-$this->mark_height);

                    break;//random

            case 1: $x = 0;

                    $y = 0;

                    break;//topleft

            case 2: $x = ($this->dest_width-$this->mark_width)/2;

                    $y = 0;

                    break; //topcenter

            case 3: $x = $this->dest_width-$this->mark_width;

                    $y = 0;

                    break;// topright

            case 4: $x = 0;

                    $y = ($this->dest_height-$this->mark_height)/2;

                    break;//middleleft

            case 5: $x = ($this->dest_width-$this->mark_width)/2;

                    $y = ($this->dest_height-$this->mark_height)/2;

                    break;//middlecenter

            case 6: $x = $this->dest_width-$this->mark_width;

                    $y = ($this->dest_height-$this->mark_height)/2;

                    break;//middleright

            case 7: $x = 0; $y = $this->dest_height-$this->mark_height;

                    break;//bottomleft

            case 8: $x = ($this->dest_width-$this->mark_width)/2;

                    $y = $this->dest_height-$this->mark_height;

                    break;//bottomcenter

            case 9: $x = $this->dest_width-$this->mark_width;

                    $y = $this->dest_height-$this->mark_height;

                    break;//bottomright

            default:$x = rand(0,$this->dest_width-$this->mark_width);

                    $y = rand(0,$this->dest_height-$this->mark_height);

                    break;//random

        }

        return array($x,$y);

    }

    //从一个图像文件中取得图片资源标识符

    private function getImageResource($filename,$type=0){

        switch($type){

            case 1:return imagecreatefromgif($filename);break;

            case 2:return imagecreatefromjpeg($filename);break;

            case 3:return imagecreatefrompng($filename);break;

            // 以后可添加其它格式

            default:return null;

        }

    }

    //将图像写入文件或输出到浏览器

    private function writeImage($ImageRes,$filename=null,$type=0){

        switch($type) {

            case 1:imagegif($ImageRes,$filename);break;

            case 2:imagejpeg($ImageRes,$filename);break;

            case 3:imagepng($ImageRes,$filename);break;

            default:return null;

        }

        return true;

    }

}

//使用示例

/* $markimg = new ImageWatermark('c_si.jpg');

//$markimg->setMarkPos(100,200);//如何设置setMarkPos,则markPosType无效。

$markimg->markPosType=5;

$markimg->appendImageMark('mark.png');

$markimg->fontFile='STCAIYUN.TTF';

$markimg->color='#FFFFFF';

$markimg->fontSize=24;

$markimg->angle=45;//设置角度时,注意水印可能旋转出目标图片之外。

$markimg->appendTextMark('汉字水印');

$markimg->write();

$markimg=null; */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值