metinfo 5.0图片水印bug修改和支持透明背景png水印功能的增加

最近在用metinfo 5.0做一个自己的小站,功能还可以,也蛮好用,就是发现有好多小问题,做得差不多了,也懒得在换其它的cms了,自己修复一下吧~

问题一:网站后台开启图片水印功能,但发现上传图片为jpeg格式时,系统不会为这格式图片保存水印图片,在系统upload/watermark/目录下无此图片的水印图;上传图片为png,jpg,gif格式时无此问题。
调试程序源码发现:admin/include/watermark.class.php文件第102:

function createImage($type,$img_name){
         if (!$type){
              $type = $this->get_type($img_name);
         }
                 
          switch ($type){
                  case 'gif':
                        if (function_exists('imagecreatefromgif'))
                               $tmp_img=@imagecreatefromgif($img_name);
                        break;
                  case 'jpg':
                        $tmp_img=imagecreatefromjpeg($img_name);
                        break;                                  
                  case 'png':
                        $tmp_img=imagecreatefrompng($img_name);
                        break;
                  default:
                        $tmp_img=imagecreatefromstring($img_name);
                        break;
          }
          return $tmp_img;
}

并未对jpeg格式做判断,于是在switch里加上判断,如下:

                  case 'jpeg':
                        $tmp_img=imagecreatefromjpeg($img_name);
                        break;
问题解决。


问题二:想让站上的图片都加有水印,用自己透明背景的png网站logo来做水印图片,后台设置了下,上传了张图片做测试,

发现png图片透明背景色素完全乱掉,去官网搜相关问题,发现暂时不支持,于是自己改。

步骤如下:

1.admin/include/watermark.class.php里加入支持透明背景png水印的函数(网上找到的)

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
	$opacity=$pct;
	// getting the watermark width
	$w = imagesx($src_im);
	// getting the watermark height
	$h = imagesy($src_im);
	 
	// creating a cut resource
	$cut = imagecreatetruecolor($src_w, $src_h);
	// copying that section of the background to the cut
	imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
	// inverting the opacity
	$opacity = $opacity;//100 - $opacity;
	 
	// placing the watermark now
	imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
	imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
}


2.admin/include/watermark.class.php第53行
imagecopymerge($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition);
替换成

	   if(strpos($this->met_image_name,'.png')!==false){
	   	   $this->imagecopymerge_alpha($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition);
	   }else{
		   imagecopymerge($src_image,$met_image,$met_image_x,$met_image_y,0,0,$met_image_w,$met_image_h,$this->met_image_transition);
	   }
也就是如果是透明背景的png水印图时调用我们新加进去的函数。

测试了下,成功。





你可能感兴趣的:(metinfo 5.0图片水印bug修改和支持透明背景png水印功能的增加)