欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)圖片加水印功能

 更新時間:2022年06月22日 10:13:17   作者:camellia  
這篇文章主要和大家分享幾個php給圖片加水印的幾個自定義函數(shù),文中的示例代碼講解詳細,對我們學習PHP有一定幫助,需要的可以參考一下

這里分享下php給圖片加水印的幾個自定義函數(shù)

給圖片加水印首先需要開啟GD庫。

用到的php函數(shù)是imagecopymerge () 和 imagecopy ()

imagecopymerge 函數(shù)可以支持兩個圖像疊加時,設(shè)置疊加的透明度

imagecopy 函數(shù)則不支持疊加透明。

基本概念就啰嗦到這,下邊是幾個函數(shù)的講解

在圖像上打上LOGO水印。

logo透明的png圖像,logo.png ,

使用imagecopymerge函數(shù),可以實現(xiàn)打上透明度為30%的水印圖標

(可是當我的圖片是jpeg,而我的水印圖片是png時,水印圖片原來透明的背景,變得一片黑灰,背景不透明了,我不知道這個問題是不是只有我自己遇見過)

使用imagecopy函數(shù),可以保留logo本身的透明信息,但無法實現(xiàn)透明度30%的水印疊加

我的解決方式是這樣

先用imagecopy()函數(shù)生成水印,將水印放到生成的空白圖像上

再用imagecopymerge()再將要加水印的圖片與其合成一張圖片,為其設(shè)置透明度

不啰嗦了,直接上函數(shù)。

/**
?*?圖片加水?。ㄟm用于png/jpg/gif格式)
 * @author camellia
 *?@param?$srcImg?原圖片
?*?@param?$waterImg?水印圖片
?*?@param?$savepath?保存路徑
?*?@param?$savename?保存名字
?*?@param?$positon?水印位置
?*?1:頂部居左,?2:頂部居右,?3:居中,?4:底部局左,?5:底部居右
?*?@param?$alpha?透明度?--?0:完全透明,?100:完全不透明
?*?@return?成功?--?加水印后的新圖片地址
?*??????????失敗?--?-1:原文件不存在,?-2:水印圖片不存在,?-3:原文件圖像對象建立失敗
?*??????????-4:水印文件圖像對象建立失敗?-5:加水印后的新圖片保存失敗
?*/
function?img_water_mark($srcImg,?$waterImg,?$savepath=null,?$savename=null,?$positon=5,?$alpha=50)
{
????$temp?=?pathinfo($srcImg);
????$name?=?$temp['basename'];
????$path?=?$temp['dirname'];
????$exte?=?$temp['extension'];
????$savename?=?$savename???$savename?:?$name;
????$savepath?=?$savepath???$savepath?:?$path;
????$savefile?=?$savepath?.'/'.?$savename;
????$srcinfo?=?@getimagesize($srcImg);//取得圖片信息,是一個數(shù)組,第一個值是寬,第二個值是高(因此水印圖片的寬高我們是可以限制的)
????if?(!$srcinfo)?{
????????return?-1;?//原文件不存在
????}
????$waterinfo?=?@getimagesize($waterImg);
????if?(!$waterinfo)?{
????????return?-2;?//水印圖片不存在
????}
????$srcImgObj?=?image_create_from_ext($srcImg);
????if?(!$srcImgObj)?{
????????return?-3;?//原文件圖像對象建立失敗
????}
????$waterImgObj?=?image_create_from_ext($waterImg);
????if?(!$waterImgObj)?{
????????return?-4;?//水印文件圖像對象建立失敗
????}
????switch?($positon)?{
????????//1頂部居左
????????case?1:?$x=$y=0;?break;
????????//2頂部居右
????????case?2:?$x?=?$srcinfo[0]-$waterinfo[0];?$y?=?0;?break;
????????//3居中
????????case?3:?$x?=?($srcinfo[0]-$waterinfo[0])/2;?$y?=?($srcinfo[1]-$waterinfo[1])/2;?break;
????????//4底部居左
????????case?4:?$x?=?0;?$y?=?$srcinfo[1]-$waterinfo[1];?break;
????????//5底部居右
????????case?5:?$x?=?$srcinfo[0]-$waterinfo[0];?$y?=?$srcinfo[1]-$waterinfo[1];?break;
????????default:?$x=$y=0;
????}
????imagecopymerge_gc($srcImgObj,?$waterImgObj,?$x,?$y,?0,?0,?$waterinfo[0],?$waterinfo[1],?$alpha);
????//?imagecopymerge($srcImgObj,?$waterImgObj,?$x,?$y,?0,?0,?$waterinfo[0],?$waterinfo[1],?$alpha);
????//?imagecopy($srcImgObj,?$waterImgObj,?$x,?$y,?0,?0,?$waterinfo[0],?$waterinfo[1]);
????switch?($srcinfo[2])?{
????????case?1:?imagegif($srcImgObj,?$savefile);?break;
????????case?2:?imagejpeg($srcImgObj,?$savefile);?break;
????????case?3:?imagepng($srcImgObj,?$savefile);?break;
????????default:?return?-5;?//保存失敗
????}
????imagedestroy($srcImgObj);
????imagedestroy($waterImgObj);
????return?$savefile;
}
?
/**
?*?由文件或?URL?創(chuàng)建一個新圖象
*/
function?image_create_from_ext($imgfile)
{
????$info?=?getimagesize($imgfile);
????$im?=?null;
????switch?($info[2])?{
????????case?1:?$im=imagecreatefromgif($imgfile);?break;
????????case?2:?$im=imagecreatefromjpeg($imgfile);?break;
????????case?3:?$im=imagecreatefrompng($imgfile);?break;
????}
????return?$im;
}
?
/**
?*?將背景透明的陪你過圖片與背景不透明的jpg圖片合成一張
?*?并保持png圖片背景透明
*/
function?imagecopymerge_gc($dst_im,?$src_im,?$dst_x,?$dst_y,?$src_x,?$src_y,?$src_w,?$src_h,?$pct){
????//?透明度
????$opacity?=?$pct;
????//?獲取水印圖片寬
????$w?=?imagesx($src_im);
????//?獲取水印圖片高
????$h?=?imagesy($src_im);
????//?函數(shù)用于創(chuàng)建一幅空白圖像
????$cut?=?imagecreatetruecolor($src_w,?$src_h);
????//??拷貝圖像的一部分
????imagecopy($cut,?$dst_im,?0,?0,?$dst_x,?$dst_y,?$src_w,?$src_h);
????//?計算透明度
????//?$opacity?=?100?-?$opacity;
????//?生成水印,將水印放到生成的空白圖像上
????imagecopy($cut,?$src_im,?0,?0,?$src_x,?$src_y,?$src_w,?$src_h);
????//?再將要加水印的圖片與其合成一張圖片,為其設(shè)置透明度
????imagecopymerge($dst_im,?$cut,?$dst_x,?$dst_y,?$src_x,?$src_y,?$src_w,?$src_h,?$opacity);
}
/**
?*?============================??我是分隔符??==============================
?*/

注:調(diào)用方法

img_water_mark(‘要加水印圖片' , ‘水印圖片' , ‘保存路徑');

其他參數(shù)函數(shù)的備注里邊有介紹。對應其位置就好

但是,這個也是有問題的,測試的時候,發(fā)現(xiàn),當水印圖片是png文件,被加水印的圖片也是png圖片時,就會出現(xiàn)水印圖片原來透明的背景,變得一片黑灰,背景不透明了。

這個問題,暫時還沒有想到解決的辦法,使用的時候,注意一下這個問題。

請注意:水印功能需要用到GD庫,請檢查下php是否開啟了GD庫擴展。

到此這篇關(guān)于PHP實現(xiàn)圖片加水印功能的文章就介紹到這了,更多相關(guān)PHP圖片加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論