小编给大家分享一下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;
}
}后来会遇到这样的问题————当水印有透明底色时,生成的图片背景为黑色;
如图

这样就需要对水印图片做一下处理,如下
//2.上色 //防止png透明背景变黑 $color=imagecolorallocate($wImage,255,255,255); //3.设置透明 imagecolortransparent($wImage,$color); imagefill($wImage,0,0,$color);
这样再进行加水印的操作就可以了

以上是“php中png水印不透明的解决方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
新闻名称:php中png水印不透明的解决方法
URL分享:http://www.jxjierui.cn/article/gppsog.html


咨询
建站咨询
