温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php中png水印不透明的解决方法

发布时间:2021-05-11 11:03:52 来源:亿速云 阅读:393 作者:小新 栏目:编程语言

小编给大家分享一下php中png水印不透明的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

php有什么用

php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。

php png水印不透明的方法:首先通过“public function water(){...}”给图片添加水印;然后通过“imagecolorallocate($wImage...);”等函数防止png透明背景变黑即可。

本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑

php图片添加水印(水印png图片透明处变黑)

首先是给图片添加水印,该函数的使用很简单,写的很详细

/**      * 为图片添加水印      * @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.设置透明          imagecolortransparent($wImage,$color);          imagefill($wImage,0,0,$color);                   //设定图像的混色模式         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);     }

补充,上面的函数中需要用到下面这个函数

 /**      * 取得图像信息      * @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;         }     }

后来会遇到这样的问题————当水印有透明底色时,生成的图片背景为黑色;

如图

php中png水印不透明的解决方法

这样就需要对水印图片做一下处理,如下

//2.上色   //防止png透明背景变黑          $color=imagecolorallocate($wImage,255,255,255);          //3.设置透明          imagecolortransparent($wImage,$color);          imagefill($wImage,0,0,$color);

这样再进行加水印的操作就可以了

php中png水印不透明的解决方法

以上是“php中png水印不透明的解决方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI