小編給大家分享一下php中png水印不透明的解決方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)專注于海倫企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站建設(shè)。海倫網(wǎng)站建設(shè)公司,為海倫等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
php是一個嵌套的縮寫名稱,是英文超級文本預(yù)處理語言,它的語法混合了C、Java、Perl以及php自創(chuàng)新的語法,主要用來做網(wǎng)站開發(fā),許多小型網(wǎng)站都用php開發(fā),因為php是開源的,從而使得php經(jīng)久不衰。
php png水印不透明的方法:首先通過“public function water(){...}”給圖片添加水?。蝗缓笸ㄟ^“imagecolorallocate($wImage...);”等函數(shù)防止png透明背景變黑即可。
本文操作環(huán)境:Windows7系統(tǒng)、PHP7.1版,DELL G3電腦
php圖片添加水?。ㄋng圖片透明處變黑)
首先是給圖片添加水印,該函數(shù)的使用很簡單,寫的很詳細
/** * 為圖片添加水印 * @static public * @param string $source 原文件名 * @param string $water 水印圖片 * @param string $$savename 添加水印后的圖片名 * @param string $alpha 水印的透明度 * @return void */ public function water($source, $water, $savename=null, $alpha=80 ,$w_pos = 9) { //檢查文件是否存在 if (!file_exists($source) || !file_exists($water)) return false; //圖片信息 $sInfo = self::getImageInfo($source); $wInfo = self::getImageInfo($water); //如果圖片小于水印圖片,不生成圖片 if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height']) return false; //建立圖像 $sCreateFun = "imagecreatefrom" . $sInfo['type']; $sImage = $sCreateFun($source); $wCreateFun = "imagecreatefrom" . $wInfo['type']; $wImage = $wCreateFun($water); //$wImage //2.上色 //防止png透明背景變黑 $color=imagecolorallocate($wImage,255,255,255); //3.設(shè)置透明 imagecolortransparent($wImage,$color); imagefill($wImage,0,0,$color); //設(shè)定圖像的混色模式 imagealphablending($wImage, true); //imageAlphaBlending($wImage, false); //imageSaveAlpha($wImage, true); //圖像位置,默認為右下角右對齊 //$posY = $sInfo["height"] - $wInfo["height"]; //$posX = $sInfo["width"] - $wInfo["width"]; switch($w_pos) { case 1: $wx = 5; $wy = 5; break; case 2: $wx = ($sInfo["width"] - $wInfo["width"]) / 2; $wy = 0; break; case 3: $wx = $sInfo["width"] - $wInfo["width"]; $wy = 0; break; case 4: $wx = 0; $wy = ($sInfo["height"] - $wInfo["height"]) / 2; break; case 5: $wx = ($sInfo["width"] - $wInfo["width"]) / 2; $wy = ($sInfo["height"] - $wInfo["height"]) / 2; break; case 6: $wx = $sInfo["width"] - $wInfo["width"]; $wy = ($sInfo["height"] - $wInfo["height"]) / 2; break; case 7: $wx = 0; $wy = $sInfo["height"] - $wInfo["height"]; break; case 8: $wx = ($sInfo["width"] - $wInfo["width"]) / 2; $wy = $sInfo["height"] - $wInfo["height"]; break; case 9: $wx = $sInfo["width"] - $wInfo["width"]; $wy = $sInfo["height"] - $wInfo["height"]; break; case 10: $wx = rand(0,($sInfo["width"] - $wInfo["width"])); $wy = rand(0,($sInfo["height"] - $wInfo["height"])); break; default: $wx = $sInfo["width"] - $wInfo["width"]; $wy = $sInfo["height"] - $wInfo["height"]; break; } //生成混合圖像 imagecopymerge($sImage, $wImage, $wx, $wy, 0, 0, $wInfo['width'], $wInfo['height'], $alpha); //輸出圖像 $ImageFun = 'Image' . $sInfo['type']; //如果沒有給出保存文件名,默認為原圖像名 if (!$savename) { $savename = $source; @unlink($source); } //保存圖像 $ImageFun($sImage, $savename); imagedestroy($sImage); }
補充,上面的函數(shù)中需要用到下面這個函數(shù)
/** * 取得圖像信息 * @static * @access public * @param string $image 圖像文件名 * @return mixed */ static function getImageInfo($img) { $imageInfo = getimagesize($img); if ($imageInfo !== false) { $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1)); $imageSize = filesize($img); $info = array( "width" => $imageInfo[0], "height" => $imageInfo[1], "type" => $imageType, "size" => $imageSize, "mime" => $imageInfo['mime'] ); return $info; } else { return false; } }
后來會遇到這樣的問題————當水印有透明底色時,生成的圖片背景為黑色;
如圖
這樣就需要對水印圖片做一下處理,如下
//2.上色 //防止png透明背景變黑 $color=imagecolorallocate($wImage,255,255,255); //3.設(shè)置透明 imagecolortransparent($wImage,$color); imagefill($wImage,0,0,$color);
這樣再進行加水印的操作就可以了
以上是“php中png水印不透明的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標題:php中png水印不透明的解決方法
轉(zhuǎn)載注明:http://aaarwkj.com/article6/gppsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、動態(tài)網(wǎng)站、定制開發(fā)、網(wǎng)站設(shè)計、電子商務(wù)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)