php 給圖片加水印

昨天下午同事問我一個php的問題,就是給圖片加水印,php我也只知其一;不知其二,網上資料找了一通,本身就寫了一個加水印的php類。php

具體代碼以下:函數

<?php
class WaterGener{


    private $default_text="Just for test"; 
    private $default_waterpic="girl.jpg";
    private $default_qulity=75;
    //默認使用的字體
    private $font = 'simhei.ttf'; //定義字體

    //默認的padding 的值
    private $padding=5;

    /**
    構造函數
    **/
    function __construct(){

    }

    //獲取圖片類型
    private function getImage($path){
        if(!empty($path) && file_exists($path)) {
            $water_info = @getimagesize($path);
            $water_im;
            switch($water_info[2])   {    //取得水印圖片的格式  
                 case 1:$water_im = @imagecreatefromgif($path);break;
                 case 2:$water_im = @imagecreatefromjpeg($path);break;
                 case 3:$water_im = @imagecreatefrompng($path);break;
                 default:return 1;
             }
             return $water_im;
        }
        return -1;
    }


    public function buildWaterImage($picture,$logo="",$savePath="demo.jpg"){
        //須要判斷圖片的類型,水印圖片的類型
        if(!empty($path) && file_exists($path))return -1;

        $logoImage =$this->getImage($logo===""?$this->default_waterpic:$logo);

        $photoImage =$this->getImage($picture);
        if($photoImage==-1){
            echo "沒有找到圖片";
            return; 
        }
        imagealphablending($photoImage, true);
        $logo_size = getimagesize($logo); 
        $logoW = $logo_size[0];
        $logoH = $logo_size[1];
        $picture_size = getimagesize($picture); 
        ImageCopy($photoImage, $logoImage, $picture_size[0]-$logoW-$this->padding, $picture_size[1]-$logoH-$this->padding, 0, 0, $logoW, $logoH);
        ImageJPEG($photoImage,$savePath,$this->default_qulity); // output to browser or file
        ImageDestroy($photoImage);
        ImageDestroy($logoImage);
        echo "success...";
    } 

    public function buildWaterText($picture,$text="",$savePath="demo.jpg"){
        //須要判斷
        $photoImage = $this->getImage($picture);
        ImageAlphaBlending($photoImage, true);
        $picture_size = getimagesize($picture); 
        $textcolor = imagecolorallocate($photoImage, 255,255, 255);
        //解決亂碼問題
        //$text = iconv("GB2312", "UTF-8", $text); //將中文字轉換爲UTF8 
        imagettftext($photoImage, 20, 0, $this->padding, $picture_size[1]-($this->padding*4), $textcolor, $this->font, $text);//將文字寫到圖片中
        //imagestring($photoImage, 5, 0, 0,$text, $textcolor);
        ImageJPEG($photoImage,$savePath,$this->default_qulity); // output to browser
        ImageDestroy($photoImage);
    } 

}
?>

上面代碼有一些紕漏:字體

1,水印生成的位置,好比說能夠是中間,右上角,右下角,等等。須要完善。ui

2,若是是加文字水印,文字水印的位置怎麼計算?計算每一個文字的寬度和高度?這個還有待完善。this

3,異常的處理。php裏面處理異常,我貌似尚未接觸過。圖片

上面代碼調用方式:get

<?php
include_once "water.class.php";
$water=new WaterGener();
$water->buildWaterImage("girl.jpg","logo.gif","demo1.jpg");
$water->buildWaterText("girl.jpg","開源中國");
?>
相關文章
相關標籤/搜索