Thinkphp圖片水印和文字水印

1.Thinkphp圖像處理

  在TP框架中,我們經常用到圖片上傳,我最近寫了很多關於圖片上傳的文章,thinkphp圖片上傳+validate表單驗證+圖片木馬檢測+縮略圖生成等文章,今天寫一下關於圖片上傳成功後給圖片加水印文字或者加圖片水印,

  

  1.1圖片處理類和庫

  首先,在Thinkphp\Think\Image類中有圖像處理功能,支持Gd庫和Imagick庫,包括對GIf圖像處理的支持。

  

  1.2實例化類庫  

$image = new \Think\Image(); 

 

    實例化image後,默認使用GD庫進行圖像操作,如果需要使用Imagick庫操作的話,需要把實例化寫成:

 

$image = new \Think\Image(\Think\Image::IMAGE_IMAGICK); 
// 或者採用
$image = new \Think\Image('Imagick');

 

    如果對GD庫或者imageick庫不瞭解,可以參考http://php.net/manual/zh/book.image.php,對GD庫和imageick庫有詳細的講解,而且是中文版的,特別通俗易懂!

 

 

    1.3打開圖片資源

  如果我們要對圖像進行處理,第一步,必須先打開圖像資源:

    使用open方法打開圖像文件進行相關操作:

 

$image = new \Think\Image(); 
$image->open('./1.jpg');        //指向要打開的圖片資源

 

    在圖片上傳中,把open路徑指向要打開的上傳文件,然後進行對該圖片的處理。

   

   1.4獲取圖像信息

  在open圖像文件以後,我們要獲取圖像的信息:

 

$image = new \Think\Image(); 
$image->open($file);//路徑指向你上傳的圖片
$width = $image->width(); // 返回圖片的寬度
$height = $image->height(); // 返回圖片的高度
$type = $image->type(); // 返回圖片的類型
$mime = $image->mime(); // 返回圖片的mime類型
$size = $image->size(); // 返回圖片的尺寸數組 0 圖片寬度 1 圖片高度

 

    這樣我們可以獲取圖片的信息,接下里可以把圖片的一些信息保存在數據庫或者繼續對圖像進行處理。

 

   1.5添加圖片水印

  接下來我們就可以對我們上傳的圖片添加水印

 

$image = new \Think\Image(); 
// 在圖片左上角添加水印(水印文件位於./logo.png) 並保存爲water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_CENTER)->save("water.jpg");

 

 

 

 

    如圖,就是把logo.png水印到1.jpg的5(居中)的位置上

   

    圖片水印的位置,是根據下面的代碼確定的,我們想吧圖片水印在哪裏,可以根據自己的需求改變

IMAGE_WATER_NORTHWEST =   1 ; //左上角水印
IMAGE_WATER_NORTH     =   2 ; //上居中水印
IMAGE_WATER_NORTHEAST =   3 ; //右上角水印
IMAGE_WATER_WEST      =   4 ; //左居中水印
IMAGE_WATER_CENTER    =   5 ; //居中水印
IMAGE_WATER_EAST      =   6 ; //右居中水印
IMAGE_WATER_SOUTHWEST =   7 ; //左下角水印
IMAGE_WATER_SOUTH     =   8 ; //下居中水印
IMAGE_WATER_SOUTHEAST =   9 ; //右下角水印

    還可以支持水印圖片的透明度(0~100,默認值是80)

 

$image = new \Think\Image(); 
// 在圖片左上角添加水印(水印文件位於./logo.png) 水印圖片的透明度爲50 並保存爲water.jpg
$image->open('./1.jpg')->water('./logo.png',\Think\Image::IMAGE_WATER_NORTHWEST,80)->save("water.jpg"); 

 

 

    1.6給圖片添加文字水印

 

$image = new \Think\Image(); 
// 在圖片右下角添加水印文字 ThinkPHP 並保存爲new.jpg
$image->open('./1.jpg')->text('www.THZ.CN','./1.ttf',20,'#000000',\Think\Image::IMAGE_WATER_SOUTHEAST)->save("new.jpg"); 

 

   參數詳解:text('要水印的文字',字體,字體大小,字體顏色,'文字要水印的位置');

   效果圖:

   

    在這裏,製作的時候會出現水印文字亂碼的問題:

    解決方案:1.出現亂碼或者出現框框,是因爲你所選用字體的原因,有些字體不支持中文,當我們要水印中文的時候會出現亂碼問題,這個時候,我們要去下載支持中文的字體,例如:微軟雅黑,宋體……

    2.大部分的字體都支持英文,所以我們水印的時候要儘量水印英文字母吧,這樣不容易出錯。

    3.我們要想水印一些奇怪的字,比如韓語,日本語……,我們需要去下載對應的字體。

    4.如果我們的字體只用於windows,我們可以到C:\Windows\Fonts中選取我們要用的字體(不是很推薦,我們要想用,去下載最新的字體,比較全面,而且支持生成的字比較多)。

   

 

發佈了42 篇原創文章 · 獲贊 9 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章