1.Thinkphp圖像處理php
在TP框架中,咱們常常用到圖片上傳,我最近寫了不少關於圖片上傳的文章,thinkphp圖片上傳+validate表單驗證+圖片木馬檢測+縮略圖生成等文章,今天寫一下關於圖片上傳成功後給圖片加水印文字或者加圖片水印,html
1.1圖片處理類和庫thinkphp
首先,在Thinkphp\Think\Image類中有圖像處理功能,支持Gd庫和Imagick庫,包括對GIf圖像處理的支持。數據庫
1.2實例化類庫 windows
$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打開圖片資源post
若是咱們要對圖像進行處理,第一步,必須先打開圖像資源:字體
使用open方法打開圖像文件進行相關操做:spa
$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中選取咱們要用的字體(不是很推薦,咱們要想用,去下載最新的字體,比較全面,並且支持生成的字比較多)。