为了账号安全,请及时绑定邮箱和手机立即绑定

图片操作类(文字水印,图片水印,非等比缩放),还有哪些操作?准备将其他的操作补齐作为工具类

<?php
/*********************
*    pictureDeal.class.php
*    图片处理类
*
*********************/
class PictureDeal{
    private $imagePathName;

    public function __construct($filepath){
        $this->init($filepath);
    }

    public function init($filepath){
        if(is_string($filepath) && file_exists($filepath) && (getimagesize($filepath)!==false)){
            $this->imagePathName=$filepath;
        }
        else{
            //return false;
            exit("不是图片或文件不存在!");
        }
    }
    
    /*
    *    @function 给图片添加文字水印
    *    @param string $savePathName 保存路径及文件名(不含后缀名), string $content 文字内容, int $fontSize 字体大小, string $font 字体路径, array $fontColor RGB对应的int值0-255, int $transparency 透明度, int $x 相距原图0,0点的横向距离, int $y 相距原图0,0点的纵向距离
    */
    public function addTextWaterMark($savePathName,$content,$fontSize,$font,$fontColor,$transparency,$x,$y){
        $imageInfo=$this->getImageInfo($this->imagePathName);
        $imageExt=$this->getImageExt($imageInfo);
        $this->operateTextCarbon($savePathName,$imageExt,$content,$fontSize,$font,$fontColor,$transparency,$x,$y);//图片打开,操作,输出,销毁
    }

    /*
    *    @function 给图片添加图片水印
    *    @param string $savePathName 保持路径及文件名(不含后缀名), string $waterImagePath 水印图片的全路径, int $transparency 透明度, int $x 相距原图0,0点的横向距离, int $y 相距原图0,0点的纵向距离
    */
    public function addPicWaterMark($savePathName,$waterImagePath,$transparency,$x,$y){
        $imageInfo=$this->getImageInfo($this->imagePathName);
        $imageExt=$this->getImageExt($imageInfo);
        $waterImageInfo=getimagesize($waterImagePath);
        $waterImageExt=$this->getImageExt($waterImageInfo);
        $this->operateImageCarbon($savePathName,$imageExt,$imageInfo,$waterImagePath,$waterImageExt,$waterImageInfo,$transparency,$x,$y);
    }

    /*
    *    @function 压缩图片(非等比缩放)
    *    @param string $savePathName 保存路径及文件名(不含后缀名), int $width 缩放后的宽度, int $height 缩放后的高度
    */
    public function thumbImage($savePathName,$width,$height){
        $imageInfo=$this->getImageInfo($this->imagePathName);
        $imageExt=$this->getImageExt($imageInfo);
        $this->operateThumbImage($savePathName,$imageExt,$imageInfo,$width,$height);
    }

    /*
    *    @function 获取图片信息
    *    @param
    *    @return array
    */
    public function getImageInfo($file){
        $info=getimagesize($file);
        return $info;
    }
    
    /*
    *    @function 获得图像后缀名
    *    @param array $imageInfo
    *    @return string
    */
    public function getImageExt($imageInfo){
        return image_type_to_extension($imageInfo[2],false);
    }
    
    /*
    *    @function 对图片添加文字水印操作并生成新图片
    *    @param string $imageExt 原图片的后缀名
    *    @notice 包含打开,操作,输出,销毁图片的操作
    */
    public function operateTextCarbon($savePathName,$imageExt,$content,$fontSize,$font,$fontColor,$transparency,$x,$y){
        $tmp_handler=$this->getImageResource($imageExt,$this->imagePathName);//打开资源
        $color=imagecolorallocatealpha($tmp_handler,$fontColor["R"],$fontColor["G"],$fontColor["B"],$transparency);
        imagettftext($tmp_handler, $fontSize, 0, $x, $y, $color, $font, $content);//操作图片
        $this->createImageByResource($imageExt,$tmp_handler,$savePathName);//输出图片
        imagedestroy($tmp_handler);//销毁图片
    }
    
    /*
    *    @function 对图片添加图片水印操作并生成新图片
    *    @param string $imageExt 原图片的后缀名, array $imageInfo 原图片信息, string $waterImagePath 水印图片全路径 
    *    @notice 包含打开,操作,输出,销毁图片的操作
    */
    public function operateImageCarbon($savePathName,$imageExt,$imageInfo,$waterImagePath,$waterImageExt,$waterImageInfo,$transparency,$x,$y){
        $this->copyResourceImage($imageExt,$imageInfo,$savePathName);//复制图片
        $carbon_filename=$savePathName.".".$imageExt;//获得复制后的图片全路径名
        $tmp_carbon_handler=$this->getImageResource($imageExt,$carbon_filename);//打开副本图片资源
        $tmp_water_handler=$this->getImageResource($waterImageExt,$waterImagePath);//打开水印图片资源
        //操作图片
        imagecopymerge($tmp_carbon_handler, $tmp_water_handler, $x, $y, 0, 0, $waterImageInfo[0], $waterImageInfo[1], $transparency);
        //header("content-type:image/jpeg");
        //imagejpeg($tmp_carbon_handler);
        $this->createImageByResource($imageExt,$tmp_carbon_handler,$savePathName);
        imagedestroy($tmp_water_handler);//销毁图片
        imagedestroy($tmp_carbon_handler);//销毁图片
    }
    
    /*
    *    @function 复制原图,以副本进行图像操作
    *    @param string $imageExt 原图后缀名, array $imageInfo 原图信息, string $savePathName 保存路径及文件名(不含后缀名)
    */
    public function copyResourceImage($imageExt,$imageInfo,$savePathName){
        $tmp_handler=$this->getImageResource($imageExt,$this->imagePathName);
        $tmp_carbon_handler=imagecreatetruecolor($imageInfo[0],$imageInfo[1]);
        imagecopy($tmp_carbon_handler,$tmp_handler,0,0,0,0,$imageInfo[0],$imageInfo[1]);
        $this->createImageByResource($imageExt,$tmp_carbon_handler,$savePathName);
        imagedestroy($tmp_handler);
        imagedestroy($tmp_carbon_handler);
    }

    public function operateThumbImage($savePathName,$imageExt,$imageInfo,$width,$height){        
        $tmp_dst_handler=imagecreatetruecolor($width,$height);
        $tmp_handler=$this->getImageResource($imageExt,$this->imagePathName);
        imagecopyresampled ($tmp_dst_handler, $tmp_handler, 0, 0, 0, 0, $width, $height, $imageInfo[0], $imageInfo[1]);
        $this->createImageByResource($imageExt,$tmp_dst_handler,$savePathName);
        imagedestroy($tmp_handler);
        imagedestroy($tmp_dst_handler);
    }
    
    /*
    *    @function 根据后缀名以不同的形式获取资源句柄
    *    @param string $imageExt 原图后缀名, string $file 原图全路径
    *    @return resource
    */
    public function getImageResource($imageExt,$file){
        $handler=null;
        if($imageExt=="jpeg"){
            $handler=imagecreatefromjpeg($file);
        }
        if($imageExt=="png"){
            $handler=imagecreatefrompng($file);
        }
        if($imageExt=="gif"){
            $handler=imagecreatefromgif($file);
        }
        return $handler;
    }
    
    /*
    *    @function 根据后缀名生成格式不同的图片
    *    @param string $imageExt 原图后缀名, resource $handler 图片资源句柄, string $savePathName 保存路径及文件名(不含后缀名)
    */
    public function createImageByResource($imageExt,$handler,$savePathName){
        if($imageExt=="jpeg"){
            imagejpeg($handler,$savePathName.".".$imageExt);
        }
        if($imageExt=="png"){
            imagepng($handler,$savePathName.".".$imageExt);
        }
        if($imageExt=="gif"){
            imagegif($handler,$savePathName.".".$imageExt);
        }
    }

    
}
/*
//文字水印的测试
$pathname="./resource/Nico_cool_r342.jpg";
$picDeal=new PictureDeal($pathname);
$savePathName="./resource/new_image_text";
$content="にっこにっこにーー!";
$fontSize=20;
$font="./resource/msyh.ttc";
$fontColor=array("R"=>0,"G"=>0,"B"=>0);
$transparency=50;
$x=55;
$y=20;
$picDeal->addTextWaterMark($savePathName,$content,$fontSize,$font,$fontColor,$transparency,$x,$y);
*/
/*
//图片水印的测试
$pathname="./resource/Nico_cool_r342.jpg";
$picDeal=new PictureDeal($pathname);
$savePathName="./resource/new_image_img";
$waterImagePath="./resource/getimage_2.jpg";
$transparency=50;
$x=10;
$y=20;
$picDeal->addPicWaterMark($savePathName,$waterImagePath,$transparency,$x,$y);
*/
//非等比缩放的测试
$pathname="./resource/Nico_cool_r342.jpg";
$picDeal=new PictureDeal($pathname);
$savePathName="./resource/new_image_thumb";
$width=60;
$height=80;
$picDeal->thumbImage($savePathName,$width,$height);
?>

本人菜鸟一个,各位大大们看看,有写的不好的地方请指出,个人不喜欢动态调用方法,所以直接就用多重if了。这几天在赶项目等空下来,准备将图片的其余操作给补全了,作为将来可以拿来作为工具类。

正在回答

2 回答

再有个旋转和裁剪基本上可以满足大部分需求了

0 回复 有任何疑惑可以回复我~
#1

微笑de迪妮莎 提问者

あぃがとうございます 谢谢。
2015-03-02 回复 有任何疑惑可以回复我~

あぃがとうございます 谢谢。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

图片操作类(文字水印,图片水印,非等比缩放),还有哪些操作?准备将其他的操作补齐作为工具类

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信